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