はじめに
今回は AWS SAM 構文を利用し、 Hello を返す API を作成しました。
AWS SAM 構文を利用すると、シンプルな設定のみでAPIを作成できます。
今回作成するシステムの構成図を以下に示します。
開発環境
・AWS-CLI 1.16.158
・Microsoft Windows 10 Home
※AWS CLI のインストールをしていない場合は、以下を参考にインストール、認証を行ってください。
yaml ファイルの作成
この yaml ファイルに API Gateway と Lambda の設定を書き込みます。
今回使用した yaml ファイルは以下の通りです。
1AWSTemplateFormatVersion: '2010-09-09'23#AWS SAM構文をCloudFormation用に変換する宣言4Transform: 'AWS::Serverless-2016-10-31'56#スタックの説明7Description: test-stack8Resources:9 hellofunction:10 Type: 'AWS::Serverless::Function'11 Properties:12 #用意したPythonファイル名を.lambda_handler前に付ける13 Handler: Hello.lambda_handler1415 #作成されるLambda関数名16 FunctionName: HelloFunction1718 #Lambda関数に記述されるコード19 CodeUri: Hello.py2021 #ランタイム設定22 Runtime: python3.72324 #Lambda関数の説明25 Description: 'Hello api'2627 #メモリサイズ設定28 MemorySize: 1282930 #タイムアウト時間設定31 Timeout: 303233 #イベントを設定34 Events:35 helloapi:36 #イベントを決定37 Type: Api38 Properties:39 #APIのパスを決定40 Path: '/hello'41 #メソッドを設定42 Method: getPythonコードの作成
ただ、Hello を返すコードを記述しました。
1import json23def lambda_handler(event, context):4 return {5 'statusCode': 200,6 'body': json.dumps('Hello')7 }各ファイルをパッケージ化し、テンプレートとしてs3にアップロード
以下のコマンドで、各ファイルをパッケージ化し S3 にアップロードします。
このパッケージは、この後 CLoudFormation にデプロイするために利用します。
1aws cloudformation package --template-file 作成したyamlファイル名 --s3-bucket パッケージを保存するS3バケット名 --output-template-file 作成するテンプレートファイル名.yamlデプロイ
作成したテンプレートを以下のコマンドでデプロイします。
先ほどのコマンドの実行結果からコマンドをコピペします。
–stack-nameには任意のスタック名を入力し、末尾に–capabilities CAPABILITY_IAMを付けて実行します。
–capabilities CAPABILITY_IAMは IAM 関連の処理を行う際に必要になります。
1aws cloudformation deploy --template-file C:\xxx\作成したyamlテンプレートファイル名 --stack-name 任意のスタック名 --capabilities CAPABILITY_IAM作成されたAPIの確認
実際に、作成されたAPIをたたくと以下のように Hello と表示されます。
おわりに
今回はAWS SAM 構文を利用して、API を作成しました。
AWS でサーバーレスアプリケーションを構築する際は、CloudFormation の構文を利用するより、SAM 構文のほうがシンプルに書けるので試してみてください。