

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

# AWS Serverless Application Model (AWS SAM) とは
<a name="what-is-sam"></a>

AWS Serverless Application Model (AWS SAM) は、Infrastructure as Code (IaC) を使用してサーバーレスアプリケーションを構築するためのオープンソースフレームワークです。 AWS SAMの短縮構文を使用すると、開発者はデプロイ中にインフラストラクチャに変換される[CloudFormation](https://aws.amazon.com/cloudformation)リソースと特殊なサーバーレスリソースを宣言します。を使用するときは AWS SAM、次の操作を行います。

1. AWS SAM CLI - サーバーレスアプリケーションの開発、ローカルでのテスト、デプロイに役立つコマンドラインツール。

1. AWS SAM テンプレート - サーバーレスリソースを定義するためのシンプルな構文 CloudFormation を提供する の拡張機能。

**sam init** コマンドを使用すると、プロジェクトディレクトリが作成されます。これはプロジェクトと呼ばれ AWS SAM 、通常は AWS SAM テンプレート、アプリケーションコード、その他の設定ファイルが含まれます。

## いつ を使用するか AWS SAM
<a name="when-to-use-sam"></a>

AWS SAM は、 のフルパワーでサーバーレス開発を簡素化したいシナリオに最適な IaC ソリューションです CloudFormation。例えば、SAM は以下を実行するために使用できます。
+ **サーバーレスアプリケーション:** SAM を使用すると、最小限のコードで AWS Lambda 関数、Lambda の耐久性のある関数、Amazon API Gateway APIs、Amazon DynamoDB テーブル、およびその他のサーバーレスリソースをすばやく定義できます。
+ **CloudFormation の機能強化:** SAM を既存の CloudFormation テンプレートと組み合わせて、サーバーレスコンポーネントを従来のインフラストラクチャに追加できます。SAM リソースは、同じテンプレート内の標準の CloudFormation リソースと連動します。
+ **ローカル開発とテスト:** SAM CLI を使用して Lambda 関数をローカルでテストし、API Gateway エンドポイントをシミュレートして、サーバーレスアプリケーションを AWSにデプロイする前に開発マシンでデバッグできます。
+ **サーバーレス向けの CI/CD:** ステージング環境と本番環境に必要な CloudFormation インフラストラクチャを自動的に生成する SAM テンプレートを使用して、デプロイパイプラインを構築できます。
+ **コンソールで作成したリソースからの移行:** SAM テンプレートを使用して、 AWS マネジメントコンソールで作成した Lambda 関数と API Gateway リソースを Infrastructure as Code に変換できます。

**他の IaC ツール AWS SAM との比較**
+ CloudFormation の代わりに SAM を使用して、テンプレートの互換性を維持しながらサーバーレスリソース定義を簡素化します。
+ プログラムによるアプローチではなく、宣言的なアプローチでインフラストラクチャを記述 AWS CDK する場合は、代わりに SAM を使用します。
+ SAM CLI のローカルテスト機能 AWS CDK を使用して SAM を と組み合わせ、CDK アプリケーションを強化します。

## 主な特徴
<a name="what-is-sam-feature"></a>

AWS SAM には、開発者エクスペリエンスを向上させるさまざまな利点があります。

**より少ないコードを使用して、アプリケーションインフラストラクチャコードを迅速に定義する**  
 AWS SAM テンプレートを作成して、サーバーレスアプリケーションインフラストラクチャコードを定義します。テンプレートを に直接デプロイ CloudFormation して、 リソースをプロビジョニングします。

**開発ライフサイクル全体を通じてサーバーレスアプリケーションを管理する**  
 AWS SAM CLI を使用して、開発ライフサイクルの作成、構築、デプロイ、テスト、モニタリングの各フェーズを通じてサーバーレスアプリケーションを管理します。詳細については、「[AWS SAM CLI](using-sam-cli.md)」を参照してください。

** AWS SAM コネクタを使用してリソース間のアクセス許可をすばやくプロビジョニングする**  
 AWS SAM テンプレートの AWS SAM コネクタを使用して、 AWS リソース間のアクセス許可を定義します。 は、インテントを容易にするために必要な IAM アクセス許可にコードを AWS SAM 変換します。詳細については、「[AWS SAM コネクタを使用したリソースアクセス許可の管理](managing-permissions-connectors.md)」を参照してください。

**開発中にローカルの変更をクラウドに継続的に同期する**  
**sam sync** コマンドを使用してローカルの変更を AWS SAM CLIクラウドに自動的に同期し、開発とクラウドテストのワークフローを高速化します。詳細については、「[を使用して sam sync に同期する方法の概要 AWS クラウド](using-sam-cli-sync.md)」を参照してください。

**Terraform サーバーレスアプリケーションを管理する**  
 AWS SAM CLI を使用して、ローカルで Lambda 関数とレイヤーのデバッグやテストを実行します。詳細については、「[AWS SAM CLI Terraform のサポート](terraform-support.md)」を参照してください。

## 関連情報
<a name="w2aab5c15"></a>
+ の AWS SAM 仕組みについては、「」を参照してください[の AWS SAM 仕組み](what-is-sam-overview.md)。
+ の使用を開始するには AWS SAM、「」を参照してください[の開始方法 AWS SAM](serverless-getting-started.md)。
+  AWS SAM を使用してサーバーレスアプリケーションを作成する方法の概要については、「」を参照してください[の使用方法 AWS SAM](chapter-using-sam.md#chapter-using-sam.title)。

# の AWS SAM 仕組み
<a name="what-is-sam-overview"></a>

 AWS SAM を使用してサーバーレスアプリケーションを作成する場合、次のコンポーネントを操作します。

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

1. **[AWS SAM CLI](using-sam-cli.md)** – サーバーレスアプリケーションを構築および実行するために AWS SAM プロジェクトおよびサポートされているサードパーティー統合で使用できるコマンドラインツール。 AWS SAM CLI は、 AWS SAM プロジェクトでコマンドを実行し、最終的にサーバーレスアプリケーションに変換するために使用するツールです。

サーバーレスアプリケーションを定義するリソース、イベントソースマッピング、およびその他のプロパティを表現するには、リソースを定義し、 AWS SAM テンプレートおよび AWS SAM プロジェクト内の他のファイルでアプリケーションを開発します。を使用して AWS SAM CLI AWS SAM プロジェクトでコマンドを実行します。これは、サーバーレスアプリケーションを初期化、構築、テスト、デプロイする方法です。

**サーバーレスは初めてですか?**  
「[のサーバーレスの概念 AWS Serverless Application Model](what-is-concepts.md)」を確認することをお勧めします。

## AWS SAM テンプレートの仕様は何ですか?
<a name="what-is-sam-template-spec"></a>

 AWS SAM テンプレート仕様は、サーバーレスアプリケーションインフラストラクチャコードの定義と管理に使用できるオープンソースフレームワークです。 AWS SAM テンプレートの仕様は次のとおりです。
+ **上に構築 AWS CloudFormation** – テンプレートで CloudFormation 構文を直接使用し AWS SAM 、リソースとプロパティ設定の広範なサポートを活用します。にすでに精通している場合は CloudFormation、アプリケーションインフラストラクチャコードを管理するために新しいサービスを学ぶ必要はありません。
+ **の拡張 CloudFormation**- サーバーレス開発の高速化に特に焦点を当てた独自の構文 AWS SAM を提供します。同じテンプレート内で CloudFormation 構文と AWS SAM 構文の両方を使用できます。
+ **抽象的で簡潔な構文** – AWS SAM 構文を使用すると、より少ないコード行で、エラーの可能性をより低く抑えながら、インフラストラクチャを迅速に定義できます。その構文は、サーバーレスアプリケーションインフラストラクチャを定義する際の複雑さを抽象化して取り除くために特に精選されています。
+ **変換** – テンプレート AWS SAM を、インフラストラクチャのプロビジョニングに必要なコードに変換するという複雑な作業を行います CloudFormation。

## AWS SAM プロジェクトと AWS SAM テンプレートとは
<a name="what-is-sam-template"></a>

 AWS SAM プロジェクトには、 AWS SAM テンプレート仕様を含む AWS SAM テンプレートが含まれています。この仕様は、サーバーレスアプリケーションインフラストラクチャの定義に使用するオープンソースフレームワークであり AWS、操作を容易にする追加のコンポーネントが含まれています。この意味では、 AWS SAM テンプレートは CloudFormation テンプレートの拡張機能です。

基本的なサーバーレスアプリケーションの例を次に示します。このアプリケーションは、HTTP リクエストを通じてデータベースからすべての項目を取得するリクエストを処理します。これは次の部分で構成されます。

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

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

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

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

![\[シンプルなサーバーレスアプリケーションのアプリケーションアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-06.png)


このアプリケーションのインフラストラクチャコードは、次の 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) アクセス許可。

このインフラストラクチャをプロビジョニングするには、テンプレートを CloudFormationにデプロイします。デプロイ中、 は 23 行のコードを、これらのリソースの生成に必要な CloudFormation 構文 AWS SAM に変換します AWS。変換された CloudFormation テンプレートには 200 行を超えるコードが含まれています。

### 変換された CloudFormation テンプレート
<a name="what-is-sam-template-example-cfn"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "getAllItemsFunction": {
      "Type": "AWS::Lambda::Function",
      "Metadata": {
        "SamResourceId": "getAllItemsFunction"
      },
      "Properties": {
        "Code": {
          "S3Bucket": "amzn-s3-demo-source-bucket-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 行以上の CloudFormation コードにコードを AWS SAM 変換します。

## とは AWS SAM CLI
<a name="what-is-sam-cli"></a>

 AWS SAM CLI は、 AWS SAM テンプレートやサポートされているサードパーティーの統合でサーバーレスアプリケーションを構築および実行するために使用できるコマンドラインツールです。 AWS SAM CLI を使用します。
+ 新しいアプリケーションプロジェクトを迅速に初期化します。
+ デプロイ用にアプリケーションを構築します。
+ ローカルでのデバッグとテストを実行します。
+ アプリケーションをデプロイします。
+ CI/CD デプロイパイプラインを設定します。
+ クラウド内のアプリケーションをモニタリングおよびトラブルシューティングします。
+ 開発中にローカルの変更をクラウドに同期します。
+ その他にも多くのことを実行できます。

は、 AWS SAM CLI AWS SAM および CloudFormation テンプレートで使用する場合に最適です。Terraform などのサードパーティー製品とも連携します。

### 新しいプロジェクトを初期化する
<a name="what-is-sam-cli-init"></a>

スターターテンプレートから選択するか、カスタムテンプレートの場所を選択して、新しいプロジェクトを開始します。

ここでは、**sam init** コマンドを使用して新しいアプリケーションプロジェクトを初期化します。まず、**Hello World サンプル**プロジェクトを選択します。 AWS SAM CLI はスターターテンプレートをダウンロードし、プロジェクトフォルダのディレクトリ構造を作成します。

![\[AWS SAM CLI で新しいアプリケーションプロジェクトを開始するために sam init を使用します。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-01.gif)


詳細については、[でアプリケーションを作成する AWS SAM](using-sam-cli-init.md)を参照してください。

### デプロイ用にアプリケーションを構築する
<a name="what-is-sam-cli-build"></a>

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

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

![\[アプリケーションのデプロイを準備するために sam build を使用します。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-02.gif)


詳細については、[アプリケーションを構築する](serverless-building.md)を参照してください。

### ローカルでのデバッグとテストを実行する
<a name="what-is-sam-cli-local"></a>

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

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

![\[sam local invoke コマンドを使用して関数を AWS SAM CLIローカルに呼び出します。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-04.gif)


詳細については、「[アプリケーションをテストする](serverless-test-and-debug.md)」および「[アプリケーションをデバッグする](debug-application.md)」を参照してください。

### アプリケーションをデプロイします
<a name="what-is-sam-cli-deploy"></a>

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

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

![\[sam deploy コマンドを使用して AWS SAM CLIアプリケーションを AWS クラウドにデプロイします。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-03.gif)


詳細については、[アプリケーションとリソースをデプロイする](serverless-deploying.md)を参照してください。

### CI/CD デプロイパイプラインを設定する
<a name="what-is-sam-cli-cicd"></a>

サポートされている CI/CD システムを使用して、セキュアな*継続的インテグレーションと継続的デリバリー (CI/CD)* パイプラインを作成します。

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

![\[sam pipeline init --bootstrap コマンドを使用して AWS SAM CLI、任意の CI/CD システムで CI/CD パイプラインを設定します。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-07.gif)


詳細については、[CI/CD システムとパイプラインを使用したデプロイ](deploying-options.md#serverless-deploying-ci-cd)を参照してください。

### クラウド内のアプリケーションをモニタリングおよびトラブルシューティングする
<a name="what-is-sam-cli-monitor"></a>

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

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

![\[sam list コマンドを使用して AWS SAM CLI API エンドポイントを取得します。その後、関数のログを表示するために sam logs が使用されます。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-08.gif)


詳細については、[アプリケーションをモニタリングする](serverless-monitoring.md)を参照してください。

### 開発中にローカルの変更をクラウドに同期する
<a name="what-is-sam-cli-sync"></a>

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

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

![\[sam sync コマンドを使用してローカルの変更を AWS SAM CLI AWS クラウドに同期します。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-05.gif)


### サポートされているリソースをクラウドでテストする
<a name="what-is-sam-cli-remote-invoke"></a>

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

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

![\[sam remote invoke コマンドを使用して AWS SAM CLI、 AWS クラウドにデプロイされた関数をテストします。\]](http://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/images/what-is-sam-09.gif)


## 詳細情報
<a name="what-is-sam-learn"></a>

詳細については AWS SAM、次のリソースを参照してください。
+ **[完全な AWS SAM ワークショップ](https://s12d.com/sam-ws-en-intro)** – AWS SAM が提供する主要な機能の多くを学習するために設計されたワークショップ。
+ **[ SAM を使用したセッション](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** – Serverless Developer Advocate チームによって AWS 作成されたビデオシリーズ AWS SAM。
+ **[Serverless Land](https://serverlessland.com/)** – AWS サーバーレスの最新情報、ブログ、動画、コード、学習リソースをまとめたサイト。

## 次の手順
<a name="what-is-sam-next"></a>

を初めて使用する場合は AWS SAM、「」を参照してください[の開始方法 AWS SAM](serverless-getting-started.md)。

# のサーバーレスの概念 AWS Serverless Application Model
<a name="what-is-concepts"></a>

 AWS Serverless Application Model () を使用する前に、サーバーレスの基本的な概念について説明しますAWS SAM。

## サーバーレスの概念
<a name="what-is-concepts-terms"></a>

**イベント駆動型アーキテクチャ**  <a name="what-is-concepts-terms-eda"></a>
サーバーレスアプリケーションは、コンピューティング AWS Lambda 用の やデータベース管理用の Amazon DynamoDB などの個々の AWS サービスで構成され、それぞれが特殊なロールを実行します。これらのサービスは、イベント駆動型のアーキテクチャを通じて相互に緩やかに統合されます。イベント駆動型アーキテクチャの詳細については、「[イベント駆動型アーキテクチャとは](https://aws.amazon.com/event-driven-architecture/)」を参照してください。

**Infrastructure as Code (IaC)**  <a name="what-is-concepts-terms-iac"></a>
Infrastructure as Code (IaC) は、デベロッパーがコードを扱うのと同じ方法でインフラストラクチャを扱う方法であり、アプリケーションコード開発と同じ厳密さをインフラストラクチャのプロビジョニングに適用します。テンプレートファイルでインフラストラクチャを定義し、デプロイして AWS、 リソース AWS を作成します。IaC では、プロビジョニング AWS する内容をコードで定義します。で使用できる IaC ツールの比較については AWS、「」を参照してください[Infrastructure as Code (IaC)](what-is-iac.md)。

**サーバーレステクノロジー**  <a name="what-is-concepts-terms-serverless"></a>
 AWS サーバーレステクノロジーを使用すると、独自のサーバーを管理することなく、アプリケーションを構築して実行できます。すべてのサーバー管理は によって行われるため AWS、自動スケーリングや組み込みの高可用性など、多くの利点があり、アイデアを迅速に本番稼働に移行できます。サーバーレステクノロジーを使用すると、サーバーの管理や運用について心配することなく、製品の中核に注力できます。サーバーレスの詳細については、次を参照してください。  
+ [でのサーバーレス AWS](https://aws.amazon.com/serverless/)
+ [サーバーレスデベロッパーガイド](https://docs.aws.amazon.com/serverless/latest/devguide/serverless-preface.html) – AWS クラウドでのサーバーレス開発の概念的な概要を提供します。
コア AWS サーバーレスサービスの基本的な概要については、[「Serverless 101: Understanding the serverless services](https://serverlessland.com/learn/serverless-101) at *Serverless Land*」を参照してください。

**サーバーレスアプリケーション**  <a name="what-is-concepts-terms-serverless"></a>
を使用すると AWS SAM、 AWS SAM プロジェクトとテンプレートで構成されるアプリケーションの関連リソースを管理できます。アプリケーション内のすべてのリソースは、 AWS SAM テンプレートで定義または参照されます。がテンプレート AWS SAM を処理すると、 CloudFormation リソースが作成されます。では CloudFormation、リソースはスタックと呼ばれる 1 つのユニットで管理され、スタック内のすべてのリソースはスタックの CloudFormation テンプレートによって定義されます。

# Infrastructure as Code (IaC)
<a name="what-is-iac"></a>

Infrastructure as Code (IaC) を使用すると、サーバーレスアプリケーションを含む AWS リソースのデプロイと管理を自動化できます。IaC ではコードを使用してインフラストラクチャを定義できるため、デプロイのバージョニング、共有、レプリケートが容易になります。このアプローチは、以下に役立ちます。
+ 開発サイクルを高速化する
+ 設定管理を簡素化する
+ デプロイの信頼性と一貫性を向上する

## AWS サーバーレスアプリケーション用の IaC ツール
<a name="iac-tools-aws"></a>

AWS には、クラウドリソースの構築、デプロイ、管理に役立つ IaC ツールがいくつか用意されています。このセクションでは、 がこのエコシステムにどのように AWS SAM 適合し、他の AWS IaC ツールと連携するかについて説明します。

**AWS CloudFormation**  
を使用すると[CloudFormation](https://aws.amazon.com/cloudformation/)、YAML または JSON テンプレートを使用して AWS インフラストラクチャ全体をモデル化およびプロビジョニングできます。 は、リソースの作成、更新、削除を自動的に CloudFormation 処理します。 AWS SAM アプリケーションをデプロイすると、 は変換されたテンプレート CloudFormation を処理してリソースを作成および管理します。

**AWS Serverless Application Model (AWS SAM)**  
AWS SAM は、サーバーレスリソースを定義するためのシンプルな構文でサーバーレスアプリケーションを構築するのに役立ちます。 AWS SAM テンプレートを使用して、簡潔な YAML 構文を使用して Lambda 関数、APIs、データベース、イベントソースをプロビジョニングできます。 は、デプロイ中にこれらのテンプレートを CloudFormation テンプレート AWS SAM に変換します。  
はサーバーレスアプリケーションを AWS SAM 専門としていますが、 AWS SAM テンプレートでは任意の CloudFormation リソースタイプを使用できます。これにより、必要に応じて非サーバーレスリソースを含める柔軟性が得られます。

**AWS クラウド開発キット (AWS CDK)**  
[AWS CDK](https://aws.amazon.com/cdk/) を使用すると、TypeScript、Python、Java、C\$1/.Net、または Go などの使い慣れたプログラミング言語を使用してサーバーレスインフラストラクチャを定義できます。ループや条件などのプログラミングコンストラクトを使用してインフラストラクチャを定義し、デプロイ用の CloudFormation テンプレート AWS CDK を生成できます。を使用して AWS SAM CLI、 で作成されたアプリケーションをローカルでテストおよびデバッグできます AWS CDK。詳細については、「[Testing CDK applications locally](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html)」を参照してください。

## サーバーレスアプリケーション用の IaC ツールの比較
<a name="comparing-iac-tools"></a>

サーバーレスアプリケーション用の IaC ツールを選択するときは、チームの好み、プロジェクト要件、既存のワークフローを考慮してください。次の表は、サーバーレス開発用の AWS IaC ツールの主な特性を比較したものです。


| ツール | **主な使用** | **最適な用途** | **と連携する AWS SAM** | **いつ選択するか** | 
| --- | --- | --- | --- | --- | 
| **CloudFormation** | 複雑な AWS インフラストラクチャの管理 |  AWS リソースの詳細な制御を必要とするアプリケーション | AWS SAM テンプレートはデプロイ中に CloudFormation テンプレートに変換されます | 非サーバーレスリソースのきめ細かな制御 | 
| **AWS SAM** | サーバーレスアプリケーション開発 | Lambda を使用してサーバーレスアプリケーションを構築するチーム | ネイティブ機能 | Lambda 関数、API Gateway API、およびその他のサーバーレスリソースを使用するサーバーレスアーキテクチャに主な焦点とする場合 | 
| **AWS CDK** | プログラミング言語を使用したインフラストラクチャ定義 | 型付き言語とコードファーストアプローチを優先するチーム |  AWS SAM テンプレートを生成し、テストに使用する AWS SAM CLI  | プログラムによるインフラストラクチャ定義または複雑なリソース設定ロジックが必要な場合 | 

**注記**  
このガイドでは AWSネイティブ IaC ツールに焦点を当てていますが、Terraform はサーバーレスアプリケーションの定義に使用できるもう 1 つの一般的な IaC ソリューションです。 AWS SAM CLI は、Terraform で定義された Lambda 関数のローカルテストをサポートしています。詳細については、「[AWS SAM CLI Terraform のサポート](terraform-support.md)」を参照してください。

## 詳細情報
<a name="iac-learn-more"></a>
+ での DevOps プラクティスの詳細については AWS、「 での [DevOps の概要」を参照してください。 AWS](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ さまざまな IaC ツールで Lambda を使用する方法については、「[Lambda と Infrastructure as Code (IaC) の使用](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)」を参照してください。