5分でAWS SAMに入門する
今までAWSのコンソール上でLambdaを作っていましたが、SAMを試してみたら思ったより便利だったので、入門するための手順を共有します。
ブラックベルトはこちらです。
- Lambdaの構築でSAMを使うメリット
- デメリット
- 少しずつコードを修正しながら検証する、いわゆるスモールスタートの段階ではコンソールを使ったほうが早い
入門
今回は公式が用意しているテンプレートを利用します。
前提
手順その1 公式サイトを参考にAWS SAM CLIをインストールする
手順その2 任意のフォルダ上でsam init
を実行する
対話型でセットアップが始まります。(行数がとても長いので一部省略しています)
You can preselect a particular runtime or package type when using the `sam init` experience. Call `sam init --help` to learn more. Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Choose an AWS Quick Start application template 1 - Hello World Example Template: 1 Use the most popular runtime and package type? (Python and zip) [y/N]: N Which runtime would you like to use? 15 - python3.9 Runtime: 15 What package type would you like to use? 1 - Zip 2 - Image Package type: 1 Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: N Project name [sam-app]: sam-nyumon (後略)
対話したくない人は以下のようにオプションをつけることで一発で作成できます。
sam init --runtime python3.9 --dependency-manager pip --app-template hello-world --name sam-nyumon
手順その3 ビルド&デプロイする
cd sam-nyumon
sam build
sam deploy
以下のようなログが出力されたらデプロイ成功です。
Successfully created/updated stack - sam-nyumon in ap-northeast-1
コンソール上でもLambda関数の作成が確認できるかと思います。
手順その4 実行してみる
Lambdaをローカルで実行するにはDockerが必要なので、起動しておきます。
sam local invoke
以下のログが出力されたら実行成功です。
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
手順その5 リソースを削除する
最後に、作成した関数を削除します。
sam delete
まとめ
sam init
,sam build
,sam deploy
,sam local invoke
の4コマンドを実行するだけで、Lambdaの作成からテストが実行できました。
また、Lambdaの設定を編集したいときはtemplate.yaml
ファイルの中のPropertiesを編集します。以下に、よく使う設定を列記します。
- FunctionName
- 関数名
- 省略可能だがなるべく指定したほうがいい
- Policies
- Lambdaに付与するポリシー
- MemorySize
- メモリサイズ
- Timeout
- タイムアウトするまでの秒数
- Environment
- Events
- Lambdaを起動するイベント、Eventbridgeもここで指定する
例
Resources: SlackTestFunction: Type: AWS::Serverless::Function Properties: FunctionName: "FunctionName" # 関数名 CodeUri: function/ # コードの場所 Handler: app.lambda_handler Runtime: python3.9 Architectures: - x86_64 Policies: # Lambdaに付与するポリシー - arn:aws:iam::****** MemorySize: 1024 # メモリサイズ Timeout: 15 # タイムアウトまでの秒数 Environment: Variables: # 環境変数 TZ: Asia/Tokyo Events: # 関数を実行するイベント schedulename: Type: Schedule Properties: Schedule: "cron(0 22 * * ? *)" # UTC Name: schedule-name Enabled: true Input: | # 関数を実行するときに渡すパラメータ { "key1": "LOVE", "key2": "PHANTOM" }
全ての設定はこちら。 docs.aws.amazon.com
ここまで読んでいただき、ありがとうございました。