はじめに
APIGateway、Lambda、DynamoDBを使って
簡単なサーバーレスアプリケーションを作成して
サーバレスに触れてみようと思います。
自分用の備忘録として記述しようと思います。
1.DynamoDBを作成
DynamoDBの説明はこちらを参考にしてみて下さい。
テーブル作成
コンソール画面からDynamoDBの画面に移動します。
そして[テーブル作成]をクリック。
テーブル名、プライマリキーを入力します。
今回はそれぞれtest-item
,item_id
と設定しました。
テーブルの項目を追加
初期の状態ではプライマリキーで設定したitem_id
しか入っていません。
作成したテーブルにitem_idと紐づくnameを追加します。
2.Lambdaの作成
Lambdaについては、こちらを参照してみて下さい。
IAMロールの作成
LAmbdaの作成の前にIAMロールを作成します。
IAMロールは、EC2やLambdaなどのAWSリソースに権限を付与するために使用します。
コンソール画面から「IAM」を選択して「ロール」から[ロール作成]をクリックします。
Lambdaに対するロールを作成するため、Lambdaを選択して
[次のステップ:アクセス権限]をクリック
作成するロールに権限を付与します。以下の二つが対象になります。
- ログの書き込み権限:
AWSLambdaBasicExecutionRole
- DynamoDBへのアクセス権限:
AmazonDynamoDBFullAccess
ポリシーの選択が完了したら[次のステップ]を選択して
ロール名を入力します。
完了したら[ロールの作成]をクリックします。
Lambdaの作成
コンソール画面から「Lambda」を選択します。
[関数の作成]をクリックします。
名前、ランタイム、ロールを入力していきます。
関数名はget-item-test
、ランタイムはpython
、実行ロールは上記で作成したロールを選択しています。
Lambda関数の作成
初期のLambdaではテストが成功するとHello from Lambda!
が表示されるような内容になっています。
この関数をDynamoDBから値を取得する関数に変更していきます。
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('test-item')
def get_item(id):
response = table.get_item(
Key={
'item_id': id
}
)
return response['Item']
def lambda_handler(event, context):
item = get_item('001')
return item
get_item
メソッドでitemの情報を取得しています。
これを保存して[テスト]をクリックします。
そうするとitem_idに関連したnameが取れることが確認できます。
3.API Gatewayの作成
API Gatewayについてはこちらを参考にしてみて下さい。
API作成
APIを作成していきます。
API名を記入して[APIの作成]をクリックします。
メソッド作成
Lambda関数に作成したLambda名を記入して保存します。
テスト
マッピングテンプレート
現在の状況だとLambda実行されたときに、idが001のものが呼び出されます。
これをAPI Gatewayからidを指定して引き渡せるようにしていきます。
「Content-Type」にapplication/json
と記入し、保存します。
テンプレート内容を以下のように記述します。
"item_id" : "$input.params('item_id')"
Lambda修正
API Gatewayからid
を取得して、それに紐づく情報をDynamoDBから取ってくるようにLambdaを修正します。
Lambdaの画面の関数コードかlambda_handler
メソッドを以下のように修正します。
def lambda_handler(event, context):
item = get_item(event['item_id'])
return item
これを保存します。
APIのデプロイ
最後にAPIのデプロイをしてインターネットのURLから叩けるようにします。
APIの画面の「アクション」から「APIのデプロイ」を選択します。
このURLの後ろにitem_id=001
を付けてブラウザから送ってみます。
https<ステージ名>/test?item_id=001
のようなURLをブラウザで叩くと
画面に以下の内容が表記されれば成功です。
試しにid
を002
や003
にするとそれに紐づいたname
が返ってくると思います。
まとめ
この資料を参考に今回はDynamoDB、API Gateway、Lambdaを使った開発をしてみて一連の流れがなんとなく理解できた。
これからもっとサーバレスへの理解を深めるために様々なサービスに触れてみたいと思っています。