💨
AWS SAMで単体lambda関数をデプロイする
概要
AWS SAM を用いて、単体の Lambda 関数を作成、デプロイする方法について記載します。
前提
以下の内容は、インストール及び認証情報設定済みの前提とします。
- AWS CLI
- AWS SAM CLI
- Docker
手順
SAM プロジェクトの作成
以下のコマンドを実行し、対話方式で答えていきます。
shell
sam init
使用するテンプレートを聞かれます。
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
1 - AWS Quick Start Templates
を選択します。
どのテンプレートを使用するか聞かれます。
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Multi-step workflow
3 - Serverless API
4 - Scheduled task
5 - Standalone function
6 - Data processing
7 - Infrastructure event management
8 - Machine Learning
5 - Standalone function
を選択します。
どのランタイムを使用するか聞かれます。
Which runtime would you like to use?
1 - dotnetcore3.1
2 - nodejs14.x
3 - nodejs12.x
2 - nodejs14.x
を選択します。
選択できるランタイムがかなり限られているようですね。
続いてプロジェクト名を聞かれるので、任意の名前を設定します。
Project name [sam-app]:
指定したプロジェクト名のフォルダの下に、次のような形でファイルが展開されます。
.
|-- .gitignore
|-- README.md
|-- __tests__
| `-- unit
| `-- handlers
| `-- hello-from-lambda.test.js
|-- buildspec.yml
|-- package.json
|-- src
| `-- handlers
| `-- hello-from-lambda.js
`-- template.yaml
ローカルでの関数実行確認
以下のコマンドを実行し、ローカルで関数を実行確認します。
sam local invoke
次の内容が表示されれば OK です。
Hello from Lambda!
関数のデプロイ
次のコマンドを実行し SAM デプロイを開始します。
shell
sam deploy --guided
SAM の Deploy を実行することで以下のようなリソースが AWS 上に作成されました。
- IAM Role : 関数の実行ロール。
sam-app-helloFromLambdaFunctionRole-xxxxxxxx
のような名前で作成されます。xxxxxxxx
の部分には、自動生成されたハッシュ値が設定されます。 - Lambda 関数:
sam-app-helloFromLambdaFunction-xxxxxxxx
のような名前で lambda 関数が作成されます。xxxxxxxx
の部分には、自動生成されたハッシュ値が設定されます。 - CloudFormation スタック:構築したリソースを管理しているスタック。
Stack Name [sam-app]:
で設定した名前で作成されます。削除すると作成したリソース類も削除されます。
まとめ
AWS SAM を用いる場合、API Gateway やその他リソースも AWS SAM で定義してまとめて作成することが多いと思いますが、既存リソースと接続する場合や、同じ CloudFormation スタックに含めたくない場合など、個別に Lambda 処理を作りたい場合があるかと思います。
シンプルに Lambda 関数だけデプロイできるので、便利にいろいろ応用できそうですね。
Discussion