翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SAM は、サーバーレスアプリケーションの作成に使用する 2 つの主要コンポーネントで構成されています。
-
AWS SAM プロジェクト — sam init コマンドの実行時に作成されるフォルダとファイルです。このディレクトリには、 AWS リソースを定義する重要なファイルである AWS SAM テンプレートが含まれています。このテンプレートには、AWS SAM テンプレート仕様が含まれています。このオープンソースフレームワークには、サーバーレスアプリケーションの関数、イベント、API、設定、アクセス許可を定義するために使用する簡略化された省略構文があります。
-
AWS SAMCLI - プロジェクト AWS SAM およびサポートされているサードパーティー統合でサーバーレスアプリケーションを構築して実行できるコマンドラインツール。 AWS SAMCLI は、 AWS SAM プロジェクトでコマンドを実行し、最終的にサーバーレスアプリケーションに変換するために使用するツールです。
サーバーレスアプリケーションを定義するリソース、イベントソースマッピング、その他のプロパティを表現するには、リソースを定義し、 AWS SAM テンプレートや AWS SAM プロジェクト内の他のファイルでアプリケーションを開発します。を使用して AWS SAMCLI、サーバーレスアプリケーションを初期化、構築、テスト、デプロイする方法である AWS SAM プロジェクトでコマンドを実行します。
サーバーレスは初めてですか?
「のサーバーレスの概念 AWS Serverless Application Model」を確認することをお勧めします。
AWS SAM テンプレートの仕様は何ですか?
AWS SAM テンプレート仕様は、サーバーレスアプリケーションインフラストラクチャコードの定義と管理に使用できるオープンソースフレームワークです。 AWS SAM テンプレートの仕様は次のとおりです。
-
上に構築 AWS CloudFormation — テンプレートで AWS CloudFormation 構文を直接使用して AWS SAM 、リソースとプロパティの設定の広範なサポートを活用します。にすでに精通している場合は AWS CloudFormation、アプリケーションインフラストラクチャコードを管理するために新しいサービスを学ぶ必要はありません。
-
の拡張 AWS CloudFormation - サーバーレス開発の高速化に特に重点を置いた独自の構文 AWS SAM を提供します。同じテンプレート内で 構文 AWS CloudFormation と AWS SAM 構文の両方を使用できます。
-
抽象的で簡潔な構文 – AWS SAM 構文を使用すると、より少ないコード行で、エラーの可能性をより低く抑えながら、インフラストラクチャを迅速に定義できます。その構文は、サーバーレスアプリケーションインフラストラクチャを定義する際の複雑さを抽象化して取り除くために特に精選されています。
-
トランスフォーメーション — テンプレートを、インフラストラクチャ AWS SAM のプロビジョニングに必要なコードに変換するという複雑な作業を行います AWS CloudFormation。
AWS SAM プロジェクトと AWS SAM テンプレートとは
AWS SAM プロジェクトには、 AWS SAM テンプレート仕様を含む AWS SAM テンプレートが含まれています。この仕様は、サーバーレスアプリケーションインフラストラクチャの定義に使用するオープンソースフレームワークであり AWS、操作を容易にする追加コンポーネントがいくつかあります。この意味で、 AWS SAM テンプレートは AWS CloudFormation テンプレートの拡張です。
基本的なサーバーレスアプリケーションの例を次に示します。このアプリケーションは、HTTP リクエストを通じてデータベースからすべての項目を取得するリクエストを処理します。これは次の部分で構成されます。
-
リクエストを処理するロジックを含む関数。
-
クライアント (リクエスタ) とアプリケーション間の通信として機能する HTTP API。
-
項目を保存するデータベース。
-
アプリケーションを安全に実行するための許可。

このアプリケーションのインフラストラクチャコードは、次の AWS SAM テンプレートで定義できます。
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
getAllItemsFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/get-all-items.getAllItemsHandler
Runtime: nodejs20.x
Events:
Api:
Type: HttpApi
Properties:
Path: /
Method: GET
Connectors:
MyConn:
Properties:
Destination:
Id: SampleTable
Permissions:
- Read
SampleTable:
Type: AWS::Serverless::SimpleTable
23 行のコードで、次のインフラストラクチャが定義されます。
-
AWS Lambda サービスを使用する 関数。
-
Amazon API Gateway サービスを使用した HTTP API。
-
Amazon DynamoDB サービスを使用するデータベース。
-
これらのサービスが相互にやり取りするために必要な AWS Identity and Access Management (IAM) アクセス許可。
このインフラストラクチャをプロビジョニングするには、テンプレートを AWS CloudFormationにデプロイします。デプロイ中、 は 23 行のコードを、これらのリソースの生成に必要な AWS CloudFormation 構文 AWS SAM に変換します AWS。変換された AWS CloudFormation テンプレートには 200 行を超えるコードが含まれています。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"getAllItemsFunction": {
"Type": "AWS::Lambda::Function",
"Metadata": {
"SamResourceId": "getAllItemsFunction"
},
"Properties": {
"Code": {
"S3Bucket": "aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr",
"S3Key": "what-is-app/a6f856abf1b2c4f7488c09b367540b5b"
},
"Handler": "src/get-all-items.getAllItemsHandler",
"Role": {
"Fn::GetAtt": [
"getAllItemsFunctionRole",
"Arn"
]
},
"Runtime": "nodejs12.x",
"Tags": [
{
"Key": "lambda:createdBy",
"Value": "SAM"
}
]
}
},
"getAllItemsFunctionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sts:AssumeRole"
],
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
}
}
]
},
"ManagedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
],
"Tags": [
{
"Key": "lambda:createdBy",
"Value": "SAM"
}
]
}
},
"getAllItemsFunctionApiPermission": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"Action": "lambda:InvokeFunction",
"FunctionName": {
"Ref": "getAllItemsFunction"
},
"Principal": "apigateway.amazonaws.com",
"SourceArn": {
"Fn::Sub": [
"arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/${__Stage__}/GET/",
{
"__ApiId__": {
"Ref": "ServerlessHttpApi"
},
"__Stage__": "*"
}
]
}
}
},
"ServerlessHttpApi": {
"Type": "AWS::ApiGatewayV2::Api",
"Properties": {
"Body": {
"info": {
"version": "1.0",
"title": {
"Ref": "AWS::StackName"
}
},
"paths": {
"/": {
"get": {
"x-amazon-apigateway-integration": {
"httpMethod": "POST",
"type": "aws_proxy",
"uri": {
"Fn::Sub": "arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getAllItemsFunction.Arn}/invocations"
},
"payloadFormatVersion": "2.0"
},
"responses": {}
}
}
},
"openapi": "3.0.1",
"tags": [
{
"name": "httpapi:createdBy",
"x-amazon-apigateway-tag-value": "SAM"
}
]
}
}
},
"ServerlessHttpApiApiGatewayDefaultStage": {
"Type": "AWS::ApiGatewayV2::Stage",
"Properties": {
"ApiId": {
"Ref": "ServerlessHttpApi"
},
"StageName": "$default",
"Tags": {
"httpapi:createdBy": "SAM"
},
"AutoDeploy": true
}
},
"SampleTable": {
"Type": "AWS::DynamoDB::Table",
"Metadata": {
"SamResourceId": "SampleTable"
},
"Properties": {
"AttributeDefinitions": [
{
"AttributeName": "id",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "id",
"KeyType": "HASH"
}
],
"BillingMode": "PAY_PER_REQUEST"
}
},
"getAllItemsFunctionMyConnPolicy": {
"Type": "AWS::IAM::ManagedPolicy",
"Metadata": {
"aws:sam:connectors": {
"getAllItemsFunctionMyConn": {
"Source": {
"Type": "AWS::Serverless::Function"
},
"Destination": {
"Type": "AWS::Serverless::SimpleTable"
}
}
}
},
"Properties": {
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchGetItem",
"dynamodb:ConditionCheckItem",
"dynamodb:PartiQLSelect"
],
"Resource": [
{
"Fn::GetAtt": [
"SampleTable",
"Arn"
]
},
{
"Fn::Sub": [
"${DestinationArn}/index/*",
{
"DestinationArn": {
"Fn::GetAtt": [
"SampleTable",
"Arn"
]
}
}
]
}
]
}
]
},
"Roles": [
{
"Ref": "getAllItemsFunctionRole"
}
]
}
}
}
}
を使用すると AWS SAM、23 行のインフラストラクチャコードを定義できます。 は、アプリケーションのプロビジョニングに必要な 200 行以上の AWS CloudFormation コードにコードを AWS SAM 変換します。
とは AWS SAMCLI
AWS SAMCLI は、 AWS SAM テンプレートおよびサポートされているサードパーティー統合でサーバーレスアプリケーションを構築および実行するために使用できるコマンドラインツールです。 AWS SAM CLI を使用します。
-
新しいアプリケーションプロジェクトを迅速に初期化します。
-
デプロイ用にアプリケーションを構築します。
-
ローカルでのデバッグとテストを実行します。
-
アプリケーションをデプロイします。
-
CI/CD デプロイパイプラインを設定します。
-
クラウド内のアプリケーションをモニタリングおよびトラブルシューティングします。
-
開発中にローカルの変更をクラウドに同期します。
-
その他にも多くのことを実行できます。
AWS SAMCLI は、 AWS SAM および AWS CloudFormation テンプレートで使用すると最適です。Terraform などのサードパーティー製品とも連携します。
新しいプロジェクトを初期化する
スターターテンプレートから選択するか、カスタムテンプレートの場所を選択して、新しいプロジェクトを開始します。
ここでは、sam init コマンドを使用して新しいアプリケーションプロジェクトを初期化します。まず、Hello World サンプルプロジェクトを選択します。 AWS SAM CLI はスターターテンプレートをダウンロードし、プロジェクトフォルダのディレクトリ構造を作成します。

詳細については、でアプリケーションを作成する AWS SAMを参照してください。
デプロイ用にアプリケーションを構築する
関数の依存関係をパッケージ化し、プロジェクトコードとフォルダ構造を整理して、デプロイの準備をします。
ここでは、sam build コマンドを使用してアプリケーションのデプロイを準備します。 AWS SAM CLI は .aws-sam
ディレクトリを作成し、そこにアプリケーションの依存関係とファイルをデプロイ用に整理します。

詳細については、アプリケーションを構築するを参照してください。
ローカルでのデバッグとテストを実行する
ローカルマシン上で、イベントのシミュレート、API のテスト、関数の呼び出しなどを実行して、アプリケーションをデバッグおよびテストします。
ここでは、sam local invoke コマンドを使用してローカルで HelloWorldFunction
を呼び出します。これを実現するために、 AWS SAM CLI はローカルコンテナを作成し、関数を構築して呼び出し、結果を出力します。Docker などのアプリケーションを使用して、マシンでコンテナを実行できます。

詳細については、「アプリケーションをテストする」および「アプリケーションをデバッグする」を参照してください。
アプリケーションをデプロイします
アプリケーションのデプロイ設定を設定し、 AWS クラウドにデプロイしてリソースをプロビジョニングします。
ここでは、sam deploy --guided コマンドを使用して、インタラクティブフローを通じてアプリケーションをデプロイします。は、アプリケーションのデプロイ設定の構成、テンプレートの への変換 AWS CloudFormation、 への AWS CloudFormation デプロイを行ってリソースを作成する AWS SAMCLI方法を説明します。

詳細については、アプリケーションとリソースをデプロイするを参照してください。
CI/CD デプロイパイプラインを設定する
サポートされている CI/CD システムを使用して、安全な継続的インテグレーションおよびデリバリー (CI/CD) パイプラインを作成します。
ここでは、sam pipeline init --bootstrap コマンドを使用してアプリケーションの CI/CD デプロイパイプラインを設定します。 AWS SAMCLI では、オプションについて説明し、CI/CD システムで使用する AWS リソースと設定ファイルを生成します。

詳細については、CI/CD システムとパイプラインを使用したデプロイを参照してください。
クラウド内のアプリケーションをモニタリングおよびトラブルシューティングする
デプロイされたリソースに関する重要な情報を表示し、ログを収集し、 AWS X-Rayなどの組み込みモニタリングツールを利用します。
ここでは、sam list コマンドを使用してデプロイされたリソースを表示します。API エンドポイントを取得して呼び出し、関数をトリガーします。その後、sam logs を使用して関数のログを表示します。

詳細については、アプリケーションをモニタリングするを参照してください。
開発中にローカルの変更をクラウドに同期する
ローカルマシンで開発すると、変更がクラウドに自動的に同期されます。変更をすばやく確認し、クラウドでテストと検証を実行します。
ここでは、sam sync --watch コマンドを使用して、 AWS SAM CLI がローカルの変更を監視するようにします。HelloWorldFunction
コードを変更すると、 AWS SAM CLI が自動的に変更を検出し、更新をクラウドにデプロイします。

サポートされているリソースをクラウドでテストする
クラウド内のサポート対象リソースを呼び出して、イベントを渡します。
ここでは、クラウドにデプロイされた Lambda 関数をテストするために sam remote invoke コマンドを使用します。Lambda 関数を呼び出して、そのログとレスポンスを受け取ります。Lambda 関数はレスポンスをストリーミングするように設定されているので、 AWS SAM CLI はそのレスポンスをリアルタイムでストリーミングして返します。

詳細
詳細については AWS SAM、以下のリソースを参照してください。
-
完全な AWS SAM ワークショップ
– AWS SAM が提供する主要な機能の多くを学習するために設計されたワークショップです。 -
SAM を使用したセッション
– サーバーレス開発者アドボケートチームが作成した AWS 動画シリーズ AWS SAM。 -
Serverless Land
– AWS サーバーレスの最新情報、ブログ、動画、コード、学習リソースをまとめたサイト。
次のステップ
を初めて使用する場合は AWS SAM、「」を参照してくださいの開始方法 AWS SAM。