AWS SAM 構文を利用した CloudFormation による Lambda と API Gateway の作成

はじめに

今回は 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 ファイルは以下の通りです。

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: get

Pythonコードの作成

ただ、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 構文のほうがシンプルに書けるので試してみてください。

この記事を書いた人

aws-recipe-user