AWS SAM
AWS SAM
公式サイトに書かれている説明を引用します。
AWS SAM は、Serverless Application Model の略称で、AWS 上でサーバーレスアプリケーションを構築するために使用できるオープンソースのフレームワークのことです。
単純な YAML テンプレートを使用して、アプリケーション (Lambda 関数、API エンドポイント、DynamoDB テーブル、およびその他のリソース) を記述するための略式構文を提供します。
デプロイメント中、SAM は短縮形 SAM 構文を AWS CloudFormation テンプレートに変換して展開します。
その後、CloudFormation は信頼性と再現性の高い方法でリソースをプロビジョニングします。
※公式サイトより引用。
簡単に説明すると、サーバレスアプリケーション(Lambda・API Gateway)などのリソースを AWS 上に構築(プロビジョニング)するための IaC ツールです。
設定ファイルを元に、AWS 上にリソースをプロビジョニングするため、管理が容易であるという利点があります。
そもそも、CloudFormationとは
公式サイトの説明の中に、CloudFormation
という言葉が出てきます。
最初にCloudFormation
について説明します。
CloudFormation
は、AWS 上でリソースをプロビジョニングするためのサービスです。
プロビジョニングとは、AWS 上にリソースを作成することです。
CloudFormation
は、AWS 上でリソースをプロビジョニングするためのテンプレート(設定ファイル)を作成し、そのテンプレートを元にリソースをプロビジョニングします。
このようにインフラリソースの構成をコード(設定ファイル)で規定することを IaC(Infrastructure as Code)と呼びます。
IaC ツールには、CloudFormation
以外にも、Terraform
やAnsible
などがあります。
IaCの利点
Web 上でリソースを作成するよりもテンプレートを作成する方が、リソースの管理がしやすくなります。
具体的にはバージョン管理・操作ミス・コードレビュー・脆弱性のチェックなどができます。
GUI は直感的に操作できるので初心者には向いていますが、複雑な構成を作成する場合はテンプレートを作成することで管理がしやすくなります。
もし仮に IaC を使用しないと環境構築の説明が非常に困難になります。
スクリーンショットを貼り付けて・このボタンをクリックして・ここの設定を変更して、というような説明をすることになりますので、非効率かつミスが発生しやすいです。
もう一度、AWS SAMについて
AWS SAM はデプロイ時にCloudFormation
のテンプレートに変換して展開されることから、サーバレスアプリケーション専用の IaC ツールです。
Terraform
などの IaC ツールとは異なり、AWS かつサーバレスアプリケーション専用の IaC ツールです。
したがって、利用用途は狭いですが、AWS 上でサーバレスアプリケーションを構築する際には、非常に便利です。
サーバレスアプリケーションと曖昧に説明しましたが、AWS でのサーバレスアプリケーションとは、以下の構成要素からなるアプリケーションのことです。
- ★ Lambda
- ★ API Gateway
- ☆ IAM
- DynamoDB
- S3
- CloudFront
- CloudWatch
- VPC
特に、★の部分は、サーバレスアプリケーションの重要な構成要素です。
インストール
最初に、AWS CLI をインストールします。
公式サイトよりインストールします。
以下のコマンドで、インストールが正しくできているか確認します。
aws --version
次に、AWS SAM をインストールします。
公式サイトよりインストールします。
以下のコマンドで、インストールが正しくできているか確認します。
sam --version
最後に、Docker をインストールします。
公式サイトよりインストールします。
プロジェクトの作成
以下のコマンドで、プロジェクトを作成します。
sam init
対話型で設定します。
各自の環境に合わせて設定してください。
ここでは、もっとも一般的な Python のプロジェクトを作成します。
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
2 - Multi-step workflow
3 - Serverless API
4 - Scheduled task
5 - Standalone function
6 - Data processing
7 - Infrastructure event management
8 - Serverless Connector Hello World Example
9 - Multi-step workflow with Connectors
10 - Lambda EFS example
11 - Machine Learning
Template: 1
Use the most popular runtime and package type? (Python and zip) [y/N]: y
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N
Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: N
Project name [sam-app]: 🐙プロジェクト名🐙
Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment)
-----------------------
Generating application:
-----------------------
Name: 🐙プロジェクト名🐙
Runtime: python3.9
Architectures: x86_64
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Next steps can be found in the README file at ./🐙プロジェクト名🐙-lambda/README.md
Commands you can use next
=========================
[*] Create pipeline: cd 🐙プロジェクト名🐙-lambda && sam pipeline init --bootstrap
[*] Validate SAM template: cd 🐙プロジェクト名🐙-lambda && sam validate
[*] Test Function in the Cloud: cd 🐙プロジェクト名🐙-lambda && sam sync --stack-name {stack-name} --watch
プロジェクトの実行
以下のコマンドで、プロジェクトを実行します。
これは、ローカルで実行するためのコマンドです。
sam build --use-container
sam local start-api
これでサービスが起動します。
コンソールに表示される URL へ飛ぶと、Hello World!
と表示されます。
これで、プロジェクトの作成と実行が完了しました。
プロジェクトのデプロイ
以下のコマンドで、プロジェクトをデプロイします。
sam build --use-container
sam deploy [--guided]
--guided
オプションをつけると、対話型で設定します。
各自の環境に合わせて設定してください。
プロジェクトの削除
以下のコマンドで、プロジェクトを削除します。
sam delete
Discussion