AWSのサーバレスサービス試してみた (Lambda・DynamoDB・APIGateway)
AWSの花形と言えばサーバレスのサービスだろうと思ったので
awsのサーバレスサービス(Lamda)を中心に簡単な設計概念を解説してから
lamdaのハンズオン出来るように記事として書き起こしてみる。
参照:これだけでOK:awsアソシエイト
このハンズオンで実施する内容
1.Lambdaと連携するDynamoDBの構築
2.Lambdaの構築
3.API GatewayによりAPIを構築する
今回構築するアーキテクチャ
apiを介してlambdaを呼び出して、lambdaがdynamodbからデータを取得するという関数を実行してその関数の実行結果に基づいてapiにdynamodbの取得した結果がapi側で取得されるという流れを作る。
1.Lambdaと連携するDynamoDBの構築手順
・awsマネジメントコンソールからdynamodbにアクセス
・以下のようなテーブルを作成
-id:1001
-name:hideki
-department:it
2.Lambdaの構築
・awsマネジメントコンソールからlambdaにアクセス
-ダッシュボード:ラムダ関数のモニタリングに使用
-アプリケーション:サーバレスアプリの作成
-関数:ラムダの本体
-ラムダの共通部分をレイヤーとして作れる。
関数の作成
-関数の作成:一から作成
-関数名:FastLambda
-ランタイム:python3.6を使用
-アクセス権限:
-基本的なlambdaアクセス権限で新しいロール作成
-ロール名:LambdaRole
-ポリシーテンプレート:シンプルなマイクロサービスアクセス権限
→作成をクリック(lambda関数が作成される)
関数の更新
・タグを以下のように追加
-キー:name
-値:MyLambdaforDynamoDB
・ネットワーク:
-VPCを選択する。
・以下の関数コードを貼り付ける
# AWSをPythonで利用するためのSDK boto3をインポートする
import boto3
from boto3.dynamodb.conditions import Key, Attr
# Functionの実行ログを出力
print('Loading function')
# DynamoDBと接続
dynamodb = boto3.resource('dynamodb')
# テーブル内のIDを指定してデータを該当するitemを取得する
def lambda_handler(event, context):
table_name = "DynamoforLambda"
partition_key = {"id": event["id"]}
dynamotable = dynamodb.Table(table_name)
res = dynamotable.get_item(Key=partition_key)
item = res["Item"]
return item
lanbdaテスト関数の設定手順
・テストボタンをクリック
#テスト用の設定
{
"id": "1001"
}
イベント名:MyEventに設定
再度、関数コードの画面に戻り、テストをクリックすると、コードのテスト結果が表示される。
3.API GatewayによりAPIを構築する
・lambdaの画面から左の「トリガーの追加」をクリック
トリガーを選択
-API Gatewayを選択
テンプレートの選択
-Rest APIをクリック
追加をクリック
・awsマネジメントコンソールからAPI Gatewayにアクセス
・リソースからANYメソッドを削除
・GETリソースを追加
GETメソッド
-統合タイプ:lambda関数
-lambda関数:FastLambda
(これでgetメソッドを使ったlambda関数を呼べるようになる)
・統合リクエストをクリック
→マッピングテンプレートの追加
「application/json」と入力
テンプレートの生成に以下のコードを貼り付け保存
#API用の設定
{
"id" : "$input.params('id')"
}
lambda関数のテスト:
・テストをクリック
・クエリ文字列に「id=1001」を入力し「テスト」をクリック
APIのデプロイ:
APIを使ったlambdaとdynamoDBのテスト:
・作られたAPIのエンドポイントををコピーする。
・エンドポイントに「?id=1001」を追加し、貼り付ける
→dynamoDBのデータを取得することが出来る。
Author And Source
この問題について(AWSのサーバレスサービス試してみた (Lambda・DynamoDB・APIGateway)), 我々は、より多くの情報をここで見つけました https://qiita.com/gamelike319/items/7647fff8a57bc1f047a5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .