Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

の AWS SAM 仕組み

フォーカスモード
の AWS SAM 仕組み - AWS Serverless Application Model

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SAM は、サーバーレスアプリケーションの作成に使用する 2 つの主要コンポーネントで構成されています。

  1. AWS SAM プロジェクトsam init コマンドの実行時に作成されるフォルダとファイルです。このディレクトリには、 AWS リソースを定義する重要なファイルである AWS SAM テンプレートが含まれています。このテンプレートには、AWS SAM テンプレート仕様が含まれています。このオープンソースフレームワークには、サーバーレスアプリケーションの関数、イベント、API、設定、アクセス許可を定義するために使用する簡略化された省略構文があります。

  2. 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 リクエストを通じてデータベースからすべての項目を取得するリクエストを処理します。これは次の部分で構成されます。

  1. リクエストを処理するロジックを含む関数。

  2. クライアント (リクエスタ) とアプリケーション間の通信として機能する HTTP API。

  3. 項目を保存するデータベース。

  4. アプリケーションを安全に実行するための許可。

シンプルなサーバーレスアプリケーションのアプリケーションアーキテクチャ。

このアプリケーションのインフラストラクチャコードは、次の 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" } ] } } } }

{ "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 CLI で新しいアプリケーションプロジェクトを開始するために sam init を使用します。

詳細については、でアプリケーションを作成する AWS SAMを参照してください。

デプロイ用にアプリケーションを構築する

関数の依存関係をパッケージ化し、プロジェクトコードとフォルダ構造を整理して、デプロイの準備をします。

ここでは、sam build コマンドを使用してアプリケーションのデプロイを準備します。 AWS SAM CLI は .aws-sam ディレクトリを作成し、そこにアプリケーションの依存関係とファイルをデプロイ用に整理します。

アプリケーションのデプロイを準備するために sam build を使用します。

詳細については、アプリケーションを構築するを参照してください。

ローカルでのデバッグとテストを実行する

ローカルマシン上で、イベントのシミュレート、API のテスト、関数の呼び出しなどを実行して、アプリケーションをデバッグおよびテストします。

ここでは、sam local invoke コマンドを使用してローカルで HelloWorldFunction を呼び出します。これを実現するために、 AWS SAM CLI はローカルコンテナを作成し、関数を構築して呼び出し、結果を出力します。Docker などのアプリケーションを使用して、マシンでコンテナを実行できます。

sam local invoke コマンドを使用して関数を AWS SAMCLIローカルに呼び出します。

詳細については、「アプリケーションをテストする」および「アプリケーションをデバッグする」を参照してください。

アプリケーションをデプロイします

アプリケーションのデプロイ設定を設定し、 AWS クラウドにデプロイしてリソースをプロビジョニングします。

ここでは、sam deploy --guided コマンドを使用して、インタラクティブフローを通じてアプリケーションをデプロイします。は、アプリケーションのデプロイ設定の構成、テンプレートの への変換 AWS CloudFormation、 への AWS CloudFormation デプロイを行ってリソースを作成する AWS SAMCLI方法を説明します。

sam deploy コマンドを使用して AWS SAMCLIアプリケーションを AWS クラウドにデプロイします。

詳細については、アプリケーションとリソースをデプロイするを参照してください。

CI/CD デプロイパイプラインを設定する

サポートされている CI/CD システムを使用して、安全な継続的インテグレーションおよびデリバリー (CI/CD) パイプラインを作成します。

ここでは、sam pipeline init --bootstrap コマンドを使用してアプリケーションの CI/CD デプロイパイプラインを設定します。 AWS SAMCLI では、オプションについて説明し、CI/CD システムで使用する AWS リソースと設定ファイルを生成します。

sam pipeline init --bootstrap コマンドを使用して AWS SAMCLI、任意の CI/CD システムで CI/CD パイプラインを設定します。

詳細については、CI/CD システムとパイプラインを使用したデプロイを参照してください。

クラウド内のアプリケーションをモニタリングおよびトラブルシューティングする

デプロイされたリソースに関する重要な情報を表示し、ログを収集し、 AWS X-Rayなどの組み込みモニタリングツールを利用します。

ここでは、sam list コマンドを使用してデプロイされたリソースを表示します。API エンドポイントを取得して呼び出し、関数をトリガーします。その後、sam logs を使用して関数のログを表示します。

sam list コマンドを使用して AWS SAMCLI API エンドポイントを取得します。その後、関数のログを表示するために sam logs が使用されます。

詳細については、アプリケーションをモニタリングするを参照してください。

開発中にローカルの変更をクラウドに同期する

ローカルマシンで開発すると、変更がクラウドに自動的に同期されます。変更をすばやく確認し、クラウドでテストと検証を実行します。

ここでは、sam sync --watch コマンドを使用して、 AWS SAM CLI がローカルの変更を監視するようにします。HelloWorldFunction コードを変更すると、 AWS SAM CLI が自動的に変更を検出し、更新をクラウドにデプロイします。

sam sync コマンドを使用して、ローカルの変更を AWS SAMCLI AWS クラウドに同期します。

サポートされているリソースをクラウドでテストする

クラウド内のサポート対象リソースを呼び出して、イベントを渡します。

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

sam remote invoke コマンドを使用して AWS SAMCLI、 AWS クラウドにデプロイされた関数をテストします。

詳細

詳細については AWS SAM、以下のリソースを参照してください。

次のステップ

を初めて使用する場合は AWS SAM、「」を参照してくださいの開始方法 AWS SAM

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.