💬

AWS SAM

2023/02/19に公開

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以外にも、TerraformAnsibleなどがあります。

IaCの利点

この利点としては、Web上でGUIでリソースを作成するよりも、テンプレートを作成することで、リソースの管理がしやすくなります。
具体的にはバージョン管理や、操作ミス、コードレビューや、脆弱性のチェックなどができます。

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
GitHubで編集を提案

Discussion