💨

AWS SAMで単体lambda関数をデプロイする

2022/03/13に公開

概要

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