

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

# を使用してアプリケーションとリソースをデプロイする AWS SAM
<a name="serverless-deploying"></a>

アプリケーションをデプロイすると、 AWS クラウドで AWS リソースがプロビジョニングおよび設定され、アプリケーションが クラウドで実行されます。 は、基盤となるデプロイメカニズム[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)として AWS SAM を使用します。 AWS SAM は、 **sam build** コマンドの実行時に作成したビルドアーティファクトをサーバーレスアプリケーションをデプロイするための標準入力として使用します。

を使用すると AWS SAM、サーバーレスアプリケーションを手動でデプロイすることも、デプロイを自動化することもできます。デプロイを自動化するには、選択した継続的インテグレーションおよび継続的デプロイ (CI/CD) システムで AWS SAM パイプラインを使用します。デプロイパイプラインは、サーバーレスアプリケーションの新しいバージョンをリリースするために実行されるステップの自動シーケンスです。

このセクションのトピックでは、自動デプロイと手動デプロイの両方に関するガイダンスが提供されます。アプリケーションを手動でデプロイするには、 AWS SAMCLI コマンドを使用します。デプロイを自動化するには、このセクションのトピックを参照してください。トピックでは特に、パイプラインと CI/CD システムを使用したデプロイの自動化に関する詳細なコンテンツが提供されます。これには、スターターパイプラインの生成、自動化の設定、デプロイのトラブルシューティング、OpenID Connect (OIDC) ユーザー認証の使用、デプロイ時のローカルファイルのアップロードが含まれます。

**Topics**
+ [を使用したデプロイの概要 AWS SAM](using-sam-cli-deploy.md)
+ [を使用してアプリケーションをデプロイするためのオプション AWS SAM](deploying-options.md)
+ [CI/CD システムとパイプラインを使用して でデプロイする AWS SAM](deploying-cicd-overview.md)
+ [を使用して sam sync に同期する方法の概要 AWS クラウド](using-sam-cli-sync.md)

# を使用したデプロイの概要 AWS SAM
<a name="using-sam-cli-deploy"></a>

 AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) `sam deploy` コマンドを使用して、サーバーレスアプリケーションを にデプロイします AWS クラウド。
+ の概要については AWS SAM CLI、「」を参照してください[とは AWS SAM CLI](what-is-sam-overview.md#what-is-sam-cli)。
+ `sam deploy` コマンドオプションのリストについては、「[sam deploy](sam-cli-command-reference-sam-deploy.md)」を参照してください。
+ 一般的な開発ワークフローでの `sam deploy` の使用例については、「[ステップ 3: アプリケーションを にデプロイする AWS クラウド](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy)」を参照してください。

**Topics**
+ [前提条件](#using-sam-cli-deploy-prerequisites)
+ [sam deploy を使用したアプリケーションのデプロイ](#using-sam-cli-deploy-deploying)
+ [ベストプラクティス](#using-sam-cli-deploy-best)
+ [sam deploy のオプション](#using-sam-cli-deploy-options)
+ [トラブルシューティング](#using-sam-cli-deploy-troubleshooting)
+ [例](#using-sam-cli-deploy-examples)
+ [詳細情報](#using-sam-cli-deploy-learn)

## 前提条件
<a name="using-sam-cli-deploy-prerequisites"></a>

`sam deploy` を使用するには、次を実行して AWS SAM CLI をインストールします。
+ [AWS SAM 前提条件](prerequisites.md).
+ [AWS SAM CLI のインストール](install-sam-cli.md).

`sam deploy` を使用する前に、次の基本を理解しておくことをお勧めします。
+ [AWS SAM CLI の設定](using-sam-cli-configure.md).
+ [でアプリケーションを作成する AWS SAM](using-sam-cli-init.md).
+ [を使用した の構築の概要 AWS SAM](using-sam-cli-build.md).

## sam deploy を使用したアプリケーションのデプロイ
<a name="using-sam-cli-deploy-deploying"></a>

サーバーレスアプリケーションを初めてデプロイする場合は、`--guided` オプションを使用します。 AWS SAM CLI は、アプリケーションのデプロイ設定を構成するためのインタラクティブフローを通じてユーザーをガイドします。

**インタラクティブフローを使用してアプリケーションをデプロイするには**

1. プロジェクトのルートディレクトリに移動します。これは AWS SAM テンプレートと同じ場所です。

   ```
   $ cd sam-app
   ```

1. 次のコマンドを実行します。

   ```
   $ sam deploy --guided
   ```

1. インタラクティブフロー中に、 AWS SAM CLI はアプリケーションのデプロイ設定を構成するためのオプションをプロンプトで表示します。

   括弧 (`[ ]`) はデフォルト値を示します。回答を空白のままにすると、デフォルト値が選択されます。デフォルト値は、次の設定ファイルから取得されます。
   + `~/.aws/config` – 一般的な AWS アカウント設定。
   + `~/.aws/credentials` – AWS アカウントの認証情報。
   + `<project>/samconfig.toml` – プロジェクトの設定ファイル。

    AWS SAM CLI プロンプトに回答して値を指定します。例えば、**はい**に `y`、**いいえ**に `n`、または文字列値を入力できます。

    AWS SAM CLI は、レスポンスをプロジェクトの `samconfig.toml` ファイルに書き込みます。以降のデプロイでは、これらの設定値で `sam deploy` を使用してデプロイできます。これらの値を再設定するには、`sam deploy --guided` を再度使用するか、設定ファイルを直接変更します。

   以下は、その出力例です。

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app]: ENTER
           AWS Region [us-west-2]: ENTER
           #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
           Confirm changes before deploy [Y/n]: ENTER
           #SAM needs permission to be able to create roles to connect to the resources in your template
           Allow SAM CLI IAM role creation [Y/n]: ENTER
           #Preserves the state of previously provisioned resources when an operation fails
           Disable rollback [y/N]: ENTER
           HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
           Save arguments to configuration file [Y/n]: ENTER
           SAM configuration file [samconfig.toml]: ENTER
           SAM configuration environment [default]: ENTER
   ```

1. 次に、 AWS SAM CLI はアプリケーションを にデプロイします AWS クラウド。デプロイ中、進行状況がコマンドプロンプトに表示されます。デプロイの主な段階は次のとおりです。
   +  AWS Lambda 関数が .zip ファイルアーカイブとしてパッケージ化されたアプリケーションの場合、 は AWS SAM CLIパッケージを圧縮して Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。必要に応じて、 AWS SAM CLI は新しいバケットを作成します。
   + Lambda 関数パッケージをコンテナイメージとして含むアプリケーションの場合、 AWS SAM CLI はイメージを Amazon Elastic Container Registry (Amazon ECR) にアップロードします。必要に応じて、 AWS SAM CLI は新しいリポジトリを作成します。
   + は AWS CloudFormation 変更セット AWS SAM CLIを作成し、アプリケーションをスタック CloudFormation として にデプロイします。
   + は、デプロイされた AWS SAM テンプレートを Lambda 関数の新しい`CodeUri`値で AWS SAM CLI変更します。

    AWS SAM CLI デプロイ出力の例を次に示します。

   ```
           Looking for resources needed for deployment:
   
           Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False
   
           Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
           This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.
   
           Saved arguments to config file
           Running 'sam deploy' for future deployments will use the parameters saved above.
           The above parameters can be changed by modifying samconfig.toml
           Learn more about samconfig.toml syntax at 
           https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
   
           Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  262144 / 619839  (42.29%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  524288 / 619839  (84.58%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  619839 / 619839  (100.00%)
   
           Deploying with following values
           ===============================
           Stack name                   : sam-app
           Region                       : us-west-2
           Confirm changeset            : True
           Disable rollback             : False
           Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           Capabilities                 : ["CAPABILITY_IAM"]
           Parameter overrides          : {}
           Signing Profiles             : {}
   
   Initiating deployment
   =====================
   
           Uploading to sam-app-zip/be84c20f868068e4dc4a2c11966edf2d.template  1212 / 1212  (100.00%)
   
   
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   
   
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   
   2023-04-03 12:00:50 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 5.0 seconds)
   -------------------------------------------------------------------------------------------------
   ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
   -------------------------------------------------------------------------------------------------
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                            pi                                                Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                            n                        oWorldPermissionProd     Initiated              
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                            yment                    yment47fc2d5f9d          Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                     tage                     Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_COMPLETE          AWS::CloudFormation::S   sam-app-zip              -                      
                            tack                                                                     
   -------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   -------------------------------------------------------------------------------------------------
   Outputs                                                                                         
   -------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole                                                   
   Description         Implicit IAM Role created for Hello World function                          
   Value               arn:aws:iam::012345678910:role/sam-app-zip-                                 
   HelloWorldFunctionRole-11ZOGSCG28H0M                                                            
   
   Key                 HelloWorldApi                                                               
   Description         API Gateway endpoint URL for Prod stage for Hello World function            
   Value               https://njzfhdmls0.execute-api.us-west-2.amazonaws.com/Prod/hello/          
   
   Key                 HelloWorldFunction                                                          
   Description         Hello World Lambda Function ARN                                             
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-                 
   HelloWorldFunction-XPqNX4TBu7qn                                                                 
   -------------------------------------------------------------------------------------------------
   
   
   Successfully created/updated stack - sam-app-zip in us-west-2
   ```

1. デプロイされたアプリケーションを表示するには、次を実行します。

   1. URL [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) を使用して CloudFormation コンソールを直接開きます。

   1. **[スタック]** を選択します。

   1. アプリケーション名でスタックを識別し、それを選択します。

### デプロイ前に変更を検証する
<a name="using-sam-cli-deploy-deploying-changes"></a>

 CloudFormation 変更セットを表示し、デプロイ前に確認を求めるように を設定できます AWS SAM CLI。

**デプロイ前に変更を確認するには**

1. `sam deploy --guided` 中、デプロイ前に **Y** と入力して変更を確認します。

   ```
   #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
   Confirm changes before deploy [Y/n]: Y
   ```

   あるいは、次のように `samconfig.toml` ファイルを変更することもできます。

   ```
   [default.deploy]
   [default.deploy.parameters]
   confirm_changeset = true
   ```

1. デプロイ中、 AWS SAM CLI はデプロイ前に変更を確認するように求めます。以下に例を示します。

   ```
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   ```

### デプロイ中に追加パラメータを指定する
<a name="using-sam-cli-deploy-deploying-params"></a>

デプロイ時に設定する追加のパラメータ値を指定できます。これを実行するには、デプロイ中に AWS SAM テンプレートを変更し、パラメータ値を設定します。

**追加のパラメータを指定するには**

1.  AWS SAM テンプレートの `Parameters`セクションを変更します。以下に例を示します。

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Globals:
   ...
   Parameters:
     DomainName:
       Type: String
       Default: example
       Description: Domain name
   ```

1. `sam deploy --guided` を実行します。出力例を次に示します。

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app-zip]: ENTER
           AWS Region [us-west-2]: ENTER
           Parameter DomainName [example]: ENTER
   ```

### Lambda 関数のコード署名を設定する
<a name="using-sam-cli-deploy-deploying-signing"></a>

デプロイ時に Lambda 関数のコード署名を設定できます。そのためには、 AWS SAM テンプレートを変更し、デプロイ中にコード署名を設定します。

**コード署名を設定するには**

1.  AWS SAM テンプレート`CodeSigningConfigArn`で を指定します。以下に例を示します。

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function
       Properties:
         CodeUri: hello_world/
         Handler: app.lambda_handler
         Runtime: python3.7
         CodeSigningConfigArn: arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-12e12345db1234567
   ```

1. `sam deploy --guided` を実行します。 AWS SAM CLI は、コード署名を設定するように促すプロンプトを表示します。以下は、その出力例です。

   ```
   #Found code signing configurations in your function definitions
   Do you want to sign your code? [Y/n]: ENTER
   #Please provide signing profile details for the following functions & layers
   #Signing profile details for function 'HelloWorld'
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   #Signing profile details for layer 'MyLayer', which is used by functions {'HelloWorld'}
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   ```

## ベストプラクティス
<a name="using-sam-cli-deploy-best"></a>
+ `sam deploy` を使用すると、 AWS SAM CLI は `.aws-sam` ディレクトリにあるアプリケーションのビルドアーティファクトをデプロイします。アプリケーションの元のファイルに変更を加える場合は、デプロイする前に `sam build` を実行して `.aws-sam` ディレクトリを更新します。
+ アプリケーションを初めてデプロイする場合、`sam deploy --guided` を使用してデプロイ設定を構成します。以降のデプロイでは、構成済みの設定で `sam deploy` を使用してデプロイできます。

## sam deploy のオプション
<a name="using-sam-cli-deploy-options"></a>

`sam deploy` 用に一般的に使用されるオプションを次に示します。すべてのオプションのリストについては、「[sam deploy](sam-cli-command-reference-sam-deploy.md)」を参照してください。

### ガイド付きのインタラクティブフローを使用してアプリケーションをデプロイする
<a name="using-sam-cli-deploy-options-guided"></a>

`--guided` オプションを使用して、インタラクティブフローを通じてアプリケーションのデプロイ設定を構成します。以下に例を示します。

```
$ sam deploy --guided
```

アプリケーションのデプロイ設定はプロジェクトの `samconfig.toml` ファイルに保存されます。詳細については[プロジェクト設定を構成する](using-sam-cli-configure.md#using-sam-cli-configure-project)を参照してください。

## トラブルシューティング
<a name="using-sam-cli-deploy-troubleshooting"></a>

のトラブルシューティングについては AWS SAM CLI、「」を参照してください[AWS SAMCLI トラブルシューティング](sam-cli-troubleshooting.md)。

## 例
<a name="using-sam-cli-deploy-examples"></a>

### .zip ファイルアーカイブとしてパッケージ化された Lambda 関数を含む Hello World アプリケーションをデプロイする
<a name="using-sam-cli-deploy-examples-example1"></a>

例については、Hello World アプリケーションのチュートリアルの「[ステップ 3: アプリケーションを にデプロイする AWS クラウド](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy)」を参照してください。

### コンテナイメージとしてパッケージ化された Lambda 関数を含む Hello World アプリケーションをデプロイする
<a name="using-sam-cli-deploy-examples-example2"></a>

まず、`sam init` を使用して Hello World アプリケーションを作成します。インタラクティブフロー中に、`Python3.9` ランタイムと `Image` パッケージタイプを選択します。

```
$ sam init
...
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
        ...
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]:  ENTER

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        ...
        15 - nodejs12.x
        16 - python3.9
        17 - python3.8
        ...
Runtime: 16

What package type would you like to use?
        1 - Zip
        2 - Image
Package type: 2

Based on your selections, the only dependency manager available is pip.
We will proceed copying the template using pip.
...
Project name [sam-app]: ENTER

    -----------------------
    Generating application:
    -----------------------
    Name: sam-app
    Base Image: amazon/python3.9-base
    Architectures: x86_64
    Dependency Manager: pip
    Output Directory: .
    Configuration file: sam-app/samconfig.toml

    Next steps can be found in the README file at sam-app/README.md
...
```

次に、`cd` を実行してプロジェクトのルートディレクトリに移動し、`sam build` を実行します。 AWS SAM CLI は、Docker を使用して Lambda 関数をローカルで構築します。

```
sam-app $ sam build
Building codeuri: /Users/.../sam-app runtime: None metadata: {'Dockerfile': 'Dockerfile', 'DockerContext': '/Users/.../sam-app/hello_world', 'DockerTag': 'python3.9-v1'} architecture: x86_64 functions: HelloWorldFunction
Building image for HelloWorldFunction function
Setting DockerBuildArgs: {} for HelloWorldFunction function
Step 1/5 : FROM public.ecr.aws/lambda/python:3.9
 ---> 0a5e3da309aa
Step 2/5 : COPY requirements.txt ./
 ---> abc4e82e85f9
Step 3/5 : RUN python3.9 -m pip install -r requirements.txt -t .
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in 43845e7aa22d
Collecting requests
  Downloading requests-2.28.2-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 KB 829.5 kB/s eta 0:00:00
Collecting idna<4,>=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 KB 2.4 MB/s eta 0:00:00
Collecting charset-normalizer<4,>=2
  Downloading charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.2/199.2 KB 2.1 MB/s eta 0:00:00
Collecting certifi>=2017.4.17
  Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 KB 10.2 MB/s eta 0:00:00
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.9/140.9 KB 9.1 MB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.12.7 charset-normalizer-3.1.0 idna-3.4 requests-2.28.2 urllib3-1.26.15
Removing intermediate container 43845e7aa22d
 ---> cab8ace899ce
Step 4/5 : COPY app.py ./
 ---> 4146f3cd69f2
Step 5/5 : CMD ["app.lambda_handler"]
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in f4131ddffb31
Removing intermediate container f4131ddffb31
 ---> d2f5180b2154
Successfully built d2f5180b2154
Successfully tagged helloworldfunction:python3.9-v1


Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided
```

次に、アプリケーションをデプロイするために `sam deploy --guided` を実行します。 AWS SAM CLI は、デプロイ設定の構成をガイドします。次に、 AWS SAM CLIはアプリケーションを にデプロイします AWS クラウド。

```
sam-app $ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: ENTER
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:

        Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False

        Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
        This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.

        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

e95fc5e75742: Pushed 
d8df51e7bdd7: Pushed 
b1d0d7e0b34a: Pushed 
0071317b94d8: Pushed 
d98f98baf147: Pushed 
2d244e0816c6: Pushed 
eb2eeb1ebe42: Pushed 
a5ca065a3279: Pushed 
fe9e144829c9: Pushed 
helloworldfunction-d2f5180b2154-python3.9-v1: digest: sha256:cceb71401b47dc3007a7a1e1f2e0baf162999e0e6841d15954745ecc0c447533 size: 2206

        Deploying with following values
        ===============================
        Stack name                   : sam-app
        Region                       : us-west-2
        Confirm changeset            : True
        Disable rollback             : False
        Deployment image repository  : 
                                       {
                                           "HelloWorldFunction": "012345678910.dkr.ecr.us-west-2.amazonaws.com/samapp7427b055/helloworldfunction19d43fc4repo"
                                       }
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================

HelloWorldFunction may not have authorization defined.
        Uploading to sam-app/682ad27c7cf7a17c7f77a1688b0844f2.template  1328 / 1328  (100.00%)


Waiting for changeset to be created..

CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
+ Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
+ Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                         yment47fc2d5f9d          yment                                           
+ Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                         tage                                                                     
+ Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                  pi                                              
-------------------------------------------------------------------------------------------------


Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680634124/0ffd4faf-2e2b-487e-b9e0-9116e8299ac4


Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y

2023-04-04 08:49:15 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::CloudFormation::S   sam-app                  User Initiated         
                         tack                                                                     
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                         pi                                                Initiated              
CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                         n                        oWorldPermissionProd     Initiated              
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                         yment                    yment47fc2d5f9d          Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                  tage                     Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_COMPLETE          AWS::CloudFormation::S   sam-app                  -                      
                         tack                                                                     
-------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-JFML1JOKHJ71  

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://endlwiqqod.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-  
kyg6Y2iNRUPg                                                                                    
-------------------------------------------------------------------------------------------------


Successfully created/updated stack - sam-app in us-west-2
```

## 詳細情報
<a name="using-sam-cli-deploy-learn"></a>

`sam deploy` コマンドの使用 AWS SAM CLIの詳細については、以下を参照してください。
+ **[完全な AWS SAM ワークショップ: モジュール 3 - 手動でデプロイ](https://s12d.com/sam-ws-en-manual-deploy)**する – を使用してサーバーレスアプリケーションを構築、パッケージ化、デプロイする方法について説明します AWS SAM CLI。

# を使用してアプリケーションをデプロイするためのオプション AWS SAM
<a name="deploying-options"></a>

を使用すると AWS SAM、アプリケーションを手動でデプロイし、デプロイを自動化できます。アプリケーションを手動でデプロイするには AWS SAM CLI を使用します。デプロイを自動化するには、パイプラインと、継続的な統合/継続的なデプロイ (CI/CD) を使用します。このセクションのトピックでは、両方のアプローチについての情報を提供しています。

**Topics**
+ [手動によるデプロイのための AWS SAM CLI の使用法](#serverless-sam-cli-using-package-and-deploy)
+ [CI/CD システムとパイプラインを使用したデプロイ](#serverless-deploying-ci-cd)
+ [段階的なデプロイ](#serverless-deploying-gradual)
+ [AWS SAM CLI を使用したデプロイのトラブルシューティング](#serverless-deploying-troubleshooting)
+ [詳細情報](#serverless-sam-cli-using-invoke-learn)

## 手動によるデプロイのための AWS SAM CLI の使用法
<a name="serverless-sam-cli-using-package-and-deploy"></a>

サーバーレスアプリケーションをローカルで開発してテストしたら、**[sam deploy](sam-cli-command-reference-sam-deploy.md)** コマンドを使用してアプリケーションをデプロイできます。

プロンプトを使用してデプロイを AWS SAM ガイドするには、 **--guided**フラグを指定します。このフラグを指定すると、**sam deploy** コマンドがアプリケーションアーティファクトを zip で圧縮し、それらを Amazon Simple Storage Service (Amazon S3) (.zip ファイルアーカイブの場合) または Amazon Elastic Container Registry (Amazon ECR) (コンテナイメージの場合) のいずれかにアップロードします。その後、 コマンドはアプリケーションを AWS クラウドにデプロイします。

**例**:

```
# Deploy an application using prompts:
sam deploy --guided
```

## CI/CD システムとパイプラインを使用したデプロイ
<a name="serverless-deploying-ci-cd"></a>

AWS SAM は、パイプラインと継続的インテグレーションおよび継続的デプロイ (CI/CD) システムを使用してデプロイを自動化するのに役立ちます。 を使用してパイプラインを作成し、サーバーレスアプリケーションの CI/CD タスクを簡素化 AWS SAM できます。複数の CI/CD システムは AWS SAM ビルドコンテナイメージをサポートし、デプロイのベストプラクティスをカプセル化する複数の CI/CD AWSシステム用のデフォルトのパイプラインテンプレートのセット AWS SAM も提供します。

詳細については、「[CI/CD システムとパイプラインを使用して でデプロイする AWS SAM](deploying-cicd-overview.md)」を参照してください。

## 段階的なデプロイ
<a name="serverless-deploying-gradual"></a>

アプリケーションを一度にすべてではなく AWS SAM 徐々にデプロイする場合は、 AWS CodeDeploy が提供するデプロイ設定を指定できます。詳細については、*AWS CodeDeploy ユーザーガイド*の「[Working with deployment configurations in CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)」を参照してください。

徐々にデプロイするように AWS SAM アプリケーションを設定する方法については、「」を参照してください[を使用してサーバーレスアプリケーションを徐々にデプロイする AWS SAM](automating-updates-to-serverless-apps.md)。

## AWS SAM CLI を使用したデプロイのトラブルシューティング
<a name="serverless-deploying-troubleshooting"></a>

### AWS SAM CLI エラー:「セキュリティの制約に準拠していません」
<a name="troubleshooting-security-constraints"></a>

**sam deploy --guided** の実行時に、`HelloWorldFunction may not have authorization defined, Is this okay? [y/N]` という質問のプロンプトが表示されます。このプロンプトに「**N**」(デフォルトのレスポンス) と答えた場合、以下のエラーが表示されます。

```
 
Error: Security Constraints Not Satisfied
```

このプロンプトは、デプロイしようとしているアプリケーションに、認可なしで設定された Amazon API Gateway API が存在する可能性があることを知らせています。このプロンプトに「**N**」と答えることによって、この状態は望ましくないと伝えることになります。

この問題を解決するには、以下のオプションがあります。
+ 認可を使用してアプリケーションを設定する。認可の設定については、「[AWS SAM テンプレートを使用して API アクセスを制御する](serverless-controlling-access-to-apis.md)」を参照してください。
+ この質問に「**Y**」と答えて、認可なしで設定された API Gateway API 含むアプリケーションのデプロイを許容することを示します。

## 詳細情報
<a name="serverless-sam-cli-using-invoke-learn"></a>

サーバーレスアプリケーションをデプロイする実践的な例については、*「 完全な AWS SAM ワークショップ*」の以下を参照してください。
+ [モジュール 3 - 手動でデプロイ](https://s12d.com/sam-ws-en-manual-deploy)する – を使用してサーバーレスアプリケーションを構築、パッケージ化、デプロイする方法について説明します AWS SAM CLI。
+ [Module 4 - CI/CD](https://s12d.com/sam-ws-en-cicd-deploy) – *継続的インテグレーションと継続的デリバリー (CI/CD)* パイプラインを作成することで、構築、パッケージ化、デプロイの各フェーズを自動化する方法を学びます。

# CI/CD システムとパイプラインを使用して でデプロイする AWS SAM
<a name="deploying-cicd-overview"></a>

AWS SAM は、組織が希望する CI/CD システムのパイプラインを作成するのに役立ちます。これにより、デプロイ頻度の加速、変更のリードタイムの短縮、デプロイエラーの削減など、最小限の労力で CI/CD の利点を実現できます。

AWS SAM は、コンテナイメージを構築することで、サーバーレスアプリケーションの CI/CD タスクを簡素化します。 AWS SAM が提供するイメージには、 AWS SAM CLIサポートされている多数の AWS Lambda ランタイム用の およびビルドツールが含まれています。これにより、 を使用してサーバーレスアプリケーションを簡単に構築およびパッケージ化できます AWS SAM CLI。これらのイメージは、チームが CI/CD システム用に独自のイメージを作成して管理する必要性も軽減します。 AWS SAM ビルドコンテナイメージの詳細については、「」を参照してください[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)。

複数の CI/CD システムが AWS SAM ビルドコンテナイメージをサポートしています。どの CI/CD システムを使用するかの判断は、いくつかの要因に左右されます。これには、アプリケーションが単一のランタイムを使用するのか、それとも複数のランタイムを使用するのか、またはアプリケーションがコンテナイメージ内で構築されるのか、それともホストマシン (仮想マシン (VM) またはベアメタルホスト) で直接構築されるのか、などがあります。

AWS SAM は、 のデプロイのベストプラクティスをカプセル化する複数の CI/CD AWSシステム用のデフォルトのパイプラインテンプレートのセットも提供します。これらのデフォルトパイプラインテンプレートは標準の JSON/YAML パイプライン設定形式を使用し、組み込まれたベストプラクティスは、マルチアカウントおよびマルチリージョンのデプロイを実行し、パイプラインがインフラストラクチャに意図しない変更を行えないことを実証するために役立ちます。

を使用してサーバーレスアプリケーションをデプロイ AWS SAM するには、主に 2 つのオプションがあります。1) コマンドを使用する AWS SAM CLIように既存のパイプライン設定を変更するか、2) 独自のアプリケーションの出発点として使用できる CI/CD パイプライン設定の例を生成します。

**Topics**
+ [パイプラインとは](#deploying-whatis-pipeline)
+ [がデプロイ時にローカルファイル AWS SAM をアップロードする方法](deploy-upload-local-files.md)
+ [を使用してスターター CI/CD パイプラインを生成する AWS SAM](serverless-generating-example-ci-cd.md)
+ [を使用してスターターパイプラインをカスタマイズする方法 AWS SAM](serverless-customizing-starter-pipelines.md)
+ [AWS SAM アプリケーションのデプロイを自動化する](serverless-deploying-modify-pipeline.md)
+ [AWS SAM パイプラインで OIDC 認証を使用する方法](deploying-with-oidc.md)

## パイプラインとは
<a name="deploying-whatis-pipeline"></a>

パイプラインは、アプリケーションの新しいバージョンをリリースするために実行されるステップの自動シーケンスです。を使用すると AWS SAM、、[Jenkins](https://www.jenkins.io/)、GitLab CI/CD[AWS CodePipeline](https://aws.amazon.com/codepipeline)、[GitHub Actions](https://github.com/features/actions) など、多くの一般的な CI/CD システムを使用してアプリケーションをデプロイできます。 [GitLab ](https://docs.gitlab.com/ee/ci/)

パイプラインテンプレートには、マルチアカウントおよびマルチリージョン AWS のデプロイに役立つデプロイのベストプラクティスが含まれています。 dev や production などの AWS 環境は通常、異なる AWS アカウントに存在します。これにより開発チームは、インフラストラクチャに意図しない変更を加えることなく、安全なデプロイパイプラインを設定できます。

また、独自のカスタムパイプラインテンプレートを提供して、開発チーム全体のパイプラインを標準化することもできます。

# がデプロイ時にローカルファイル AWS SAM をアップロードする方法
<a name="deploy-upload-local-files"></a>

アプリケーションを にデプロイする場合 AWS クラウド、 はまずローカルファイルを Amazon Simple Storage Service (Amazon S3) などのアクセス可能な AWS サービスにアップロード AWS CloudFormation する必要があります。これには、 AWS SAM テンプレートが参照するローカルファイルが含まれます。この要件を満たすために、`sam deploy` または `sam package` コマンドを使用する場合、 AWS SAM CLI では以下が実行されます。

1. ローカルファイルをアクセス可能な AWS サービスに自動的にアップロードします。

1. 新しいファイルパスを参照するようにアプリケーションテンプレートが自動的に更新されます。

**Topics**
+ [デモ: AWS SAM CLI を使用して Lambda 関数コードをアップロードする](#deploy-upload-local-files-demo)
+ [対応するユースケース](#deploy-upload-local-files-use)
+ [詳細情報](#deploy-upload-local-files-learn)

## デモ: AWS SAM CLI を使用して Lambda 関数コードをアップロードする
<a name="deploy-upload-local-files-demo"></a>

このデモでは、Lambda 関数の.zip パッケージタイプを使用して Hello World サンプルアプリケーションを初期化します。 AWS SAM CLI を使用して Lambda 関数コードを Amazon S3 に自動的にアップロードし、その新しいパスをアプリケーションテンプレートで参照します。

まず、`sam init` を実行してHello World アプリケーションを初期化します。

```
$ sam init
...
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
        ...
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]: ENTER

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]: ENTER

Project name [sam-app]: demo

    -----------------------
    Generating application:
    -----------------------
    Name: demo
    Runtime: python3.9
    Architectures: x86_64
    Dependency Manager: pip
    Application Template: hello-world
    Output Directory: .
    Configuration file: demo/samconfig.toml
    
...
```

Lambda 関数コードは、プロジェクトの `hello_world` のサブディレクトリにまとめられています。

```
demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests
```

 AWS SAM テンプレート内では、 `CodeUri`プロパティを使用して Lambda 関数コードへのローカルパスを参照します。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.9
      ...
```

次に、`sam build` を実行してアプリケーションを構築し、デプロイの準備をします。

```
$ sam build
Starting Build use cache
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../demo/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource
Running PythonPipBuilder:CopySource

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml
...
```

次に、アプリケーションをデプロイするために `sam deploy --guided` を実行します。

```
$ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [demo]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: n
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:
        ...
        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

File with same data already exists at demo/da3c598813f1c2151579b73ad788cac8, skipping upload

        Deploying with following values
        ===============================
        Stack name                   : demo
        Region                       : us-west-2
        Confirm changeset            : False
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================
...
Waiting for changeset to be created..
CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
...                     
-------------------------------------------------------------------------------------------------

Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f

2023-04-07 12:24:58 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
...                    
-------------------------------------------------------------------------------------------------
CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K     

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://satnon55e9.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:demo-                        
HelloWorldFunction-G14inKTmSQvK                                                                 
-------------------------------------------------------------------------------------------------
Successfully created/updated stack - demo in us-west-2
```

デプロイ時、 AWS SAM CLI により Lambda 関数コードを Amazon S3 に自動的にアップロードし、テンプレートを更新します。 CloudFormation コンソールで変更されたテンプレートは、Amazon S3 バケットパスを反映しています。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8
      Handler: app.lambda_handler
      ...
```

## 対応するユースケース
<a name="deploy-upload-local-files-use"></a>

 AWS SAM CLI は、多数のファイルタイプ、 CloudFormation リソースタイプ、 CloudFormation マクロに対してこのプロセスを自動的に促進できます。

### ファイルタイプ
<a name="deploy-upload-local-files-use-types"></a>

アプリケーションファイルと Docker イメージがサポートされています。

### CloudFormation リソースタイプ
<a name="deploy-upload-local-files-use-resources"></a>

以下は、サポートされているリソースタイプとそれらのプロパティのリストです。


| [リソース]  | プロパティ | 
| --- | --- | 
| AWS::ApiGateway::RestApi | BodyS3Location | 
| AWS::ApiGatewayV2::Api | BodyS3Location | 
| AWS::AppSync:FunctionConfiguration |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::AppSync::GraphQLSchema | DefinitionS3Location | 
| AWS::AppSync::Resolver |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::CloudFormation::ModuleVersion | ModulePackage | 
| AWS::CloudFormation::ResourceVersion | SchemaHandlerPackage | 
| AWS::ECR::Repository | RepositoryName | 
| AWS::ElasticBeanstalk::ApplicationVersion | SourceBundle | 
| AWS::Glue::Job | Command.ScriptLocation | 
| AWS::Lambda::Function |  `Code` `Code.ImageUri`  | 
| AWS::Lambda::LayerVersion | Content | 
| AWS::Serverless::Api | DefinitionUri | 
| AWS::Serverless::Function |  `CodeUri` `ImageUri`  | 
| AWS::Serverless::GraphQLApi |  `SchemaUri` `Function.CodeUri` `Resolver.CodeUri`  | 
| AWS::Serverless::HttpApi | DefinitionUri | 
| AWS::Serverless::LayerVersion | ContentUri | 
| AWS::Serverless::StateMachine | DefinitionUri | 
| AWS::StepFunctions::StateMachine | DefinitionS3Location | 

### CloudFormation マクロ
<a name="deploy-upload-local-files-use-macros"></a>

`AWS::Include` 変換マクロを使用して参照されるファイルはサポートされています。

## 詳細情報
<a name="deploy-upload-local-files-learn"></a>

`AWS::Include`トランスフォームの詳細については、AWS CloudFormation  ユーザーガイド の「[ AWS::Include transform](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html)」を参照してください。

 AWS SAM テンプレートで`AWS::Include`変換を使用する例については、*「Serverless Land*」の[「API Gateway HTTP API to SQS](https://serverlessland.com/patterns/apigw-sqs) pattern」を参照してください。

# を使用してスターター CI/CD パイプラインを生成する AWS SAM
<a name="serverless-generating-example-ci-cd"></a>

デプロイを自動化する準備ができたら、 AWS SAMのスターターパイプラインテンプレートのいずれかを使用して、使用する CI/CD システムのデプロイパイプラインを生成できます。デプロイパイプラインは、サーバーレスアプリケーションのデプロイを自動化するために設定および使用するものです。スターターパイプラインテンプレートは、サーバーレスアプリケーションのデプロイパイプラインをすばやくセットアップできるように事前設定されています。

スターターパイプラインテンプレートを使用すると、[sam pipeline init](sam-cli-command-reference-sam-pipeline-init.md) コマンドを使用して数分でパイプラインを生成できます。

スターターパイプラインテンプレートは CI/CD システムの使い慣れた JSON/YAML 構文を使用し、複数のアカウントとリージョンにまたがるアーティファクトの管理、およびアプリケーションのデプロイに必要な最小限の許可の使用などのベストプラクティスを組み込みます。 AWS SAM CLI は現在、[AWS CodePipeline](https://aws.amazon.com/codepipeline)、[Jenkins](https://www.jenkins.io/)、[GitLab CI/CD](https://docs.gitlab.com/ee/ci/)、[GitHub Actions](https://github.com/features/actions)、および [Bitbucket Pipelines](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/) 向けのスターター CI/CD パイプライン設定の生成をサポートしています。

以下は、スターターパイプライン設定を生成するために実行する必要があるおおまかなタスクです。

1. **インフラストラクチャリソースの作成** – パイプラインには、必要なアクセス許可を持つ IAM ユーザーとロール、Amazon S3 バケット、オプションで Amazon ECR リポジトリなど、特定の AWS リソースが必要です。

1. **Git リポジトリを CI/CD システムに接続する** - CI/CD システムは、どの Git リポジトリがパイプラインの実行をトリガーするのかを知る必要があります。使用している Git リポジトリと CI/CD システムの組み合わせによっては、このステップが必要ない場合があります。

1. **パイプライン設定を生成する** - このステップは、2 つのデプロイステージが含まれるスターターパイプライン設定を生成します。

1. **パイプライン設定を Git リポジトリにコミットする** - このステップは、CI/CD システムがパイプライン設定を認識しており、変更のコミット時に実行されることを確実にするために必要です。

スターターパイプライン設定を生成して Git リポジトリにコミットしたら、そのリポジトリにコード変更がコミットされるたびにパイプラインがトリガーされ、自動的に実行されます。

これらのステップの順序と各ステップの詳細は、CI/CD システムに応じて異なります。
+ を使用している場合は AWS CodePipeline、「」を参照してください[AWS CodePipeline での のスターターパイプラインの生成 AWS SAM](serverless-generating-example-ci-cd-codepipeline.md)。
+ Jenkins、GitLab CI/CD、GitHub Actions、または Bitbucket Pipelines を使用している場合は、[AWS SAM を使用して Jenkins、GitLab CI/CD、GitHub Actions、Bitbucket Pipelines のスターターパイプラインを生成する](serverless-generating-example-ci-cd-others.md)を参照してください。

# AWS CodePipeline での のスターターパイプラインの生成 AWS SAM
<a name="serverless-generating-example-ci-cd-codepipeline"></a>

のスターターパイプライン設定を生成するには AWS CodePipeline、次のタスクをこの順序で実行します。

1. インフラストラクチャリソースを作成する

1. パイプライン設定を生成する

1. パイプライン設定を Git にコミットする

1. Git リポジトリを CI/CD システムに接続する

**注記**  
以下の手順は、`sam pipeline bootstrap` と `sam pipeline init` の 2 つの AWS SAM CLI コマンドを活用します。コマンドが 2 つあるのは、管理者 (IAM ユーザーやロールなどのインフラストラクチャ AWS リソースをセットアップするためのアクセス許可が必要なユーザー) が、開発者 (個々のパイプラインをセットアップするためのアクセス許可のみを必要とするが、必要なインフラストラクチャ AWS リソースは必要ないユーザー) よりも多くのアクセス許可を持っているユースケースを処理するためです。

## ステップ 1: インフラストラクチャリソースを作成する
<a name="generating-example-step-1"></a>

を使用するパイプラインには、必要なアクセス許可を持つ IAM ユーザーやロール、Amazon S3 バケット、オプションで Amazon ECR リポジトリなど、特定の AWS リソース AWS SAM が必要です。パイプラインのデプロイステージごとに、一連のインフラストラクチャリソースが必要です。

このセットアップには、以下のコマンドを実行できます。

```
sam pipeline bootstrap
```

**注記**  
上記のコマンドは、パイプラインのデプロイステージごとに実行します。

## ステップ 2: パイプライン設定を生成する
<a name="generating-example-step-2"></a>

パイプライン設定を生成するには、以下のコマンドを実行します。

```
sam pipeline init
```

## ステップ 3: パイプライン設定を Git リポジトリにコミットする
<a name="generating-example-step-3"></a>

このステップは、CI/CD システムがパイプライン設定を認識しており、変更のコミット時に実行されることを確実にするために必要です。

## ステップ 4：Git リポジトリを CI/CD システムに接続する
<a name="generating-example-step-4"></a>

 AWS CodePipeline では、次のコマンドを実行して接続を作成できるようになりました。

```
sam deploy -t codepipeline.yaml --stack-name <pipeline-stack-name> --capabilities=CAPABILITY_IAM --region <region-X>
```

GitHub または Bitbucket を使用している場合は、上記の **sam deploy** コマンドを実行してから、*デベロッパーツールコンソールユーザーガイド*の[保留中の接続の更新](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html)トピックにある**接続を完了するには**に記載されている手順を実行して接続を確立します。さらに、 **sam deploy** コマンドの出力`CodeStarConnectionArn`から のコピーを保存します。これは、 以外のブランチ AWS CodePipeline で を使用する場合に必要になるためです`main`。

## その他ブランチの設定
<a name="configuring-other-branches"></a>

デフォルトでは、 は で`main`ブランチ AWS CodePipeline を使用します AWS SAM。`main` 以外のブランチを使用する場合は、**sam deploy** コマンドを再度実行する必要があります。使用している Git リポジトリによっては、`CodeStarConnectionArn` も提供する必要が生じる場合があることに注意してください。

```
# For GitHub and Bitbucket
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name> CodeStarConnectionArn=<codestar-connection-arn>"

# For AWS CodeCommit
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name>"
```

## 詳細情報
<a name="serverless-generating-cicd-learn"></a>

CI/CD パイプラインをセットアップする実践的な例については、* AWS SAM 「 ワークショップの完了*」の「 [で CI/CD AWS CodePipeline](https://catalog.workshops.aws/complete-aws-sam/en-US/module-4-cicd)」を参照してください。

# AWS SAM を使用して Jenkins、GitLab CI/CD、GitHub Actions、Bitbucket Pipelines のスターターパイプラインを生成する
<a name="serverless-generating-example-ci-cd-others"></a>

Jenkins、GitLab CI/CD、GitHub Actions、Bitbucket Pipelines 向けのスターターパイプライン設定を生成するには、以下のタスクをこの順序どおりに実行します。

1. インフラストラクチャリソースを作成する

1. Git リポジトリを CI/CD システムに接続する

1. 認証情報オブジェクトを作成する

1. パイプライン設定を生成する

1. パイプライン設定を Git リポジトリにコミットする

**注記**  
以下の手順は、`sam pipeline bootstrap` と `sam pipeline init` の 2 つの AWS SAM CLI コマンドを活用します。コマンドが 2 つあるのは、管理者 (IAM ユーザーやロールなどのインフラストラクチャ AWS リソースをセットアップするためのアクセス許可を必要とするユーザー) が、開発者 (個々のパイプラインをセットアップするためのアクセス許可のみを必要とするが、必要なインフラストラクチャ AWS リソースは必要ないユーザー) よりも多くのアクセス許可を持っているユースケースを処理するためです。

## ステップ 1: インフラストラクチャリソースを作成する
<a name="generating-example-step-1"></a>

を使用するパイプラインには、必要なアクセス許可を持つ IAM ユーザーやロール、Amazon S3 バケット、オプションで Amazon ECR リポジトリなど、特定の AWS リソース AWS SAM が必要です。パイプラインのデプロイステージごとに、一連のインフラストラクチャリソースが必要です。

このセットアップには、以下のコマンドを実行できます。

```
sam pipeline bootstrap
```

**注記**  
上記のコマンドは、パイプラインのデプロイステージごとに実行します。

パイプラインのデプロイステージごとにパイプラインユーザーの AWS 認証情報 (キー ID とシークレットキー) をキャプチャする必要があります。これは、以降のステップで必要になるためです。

## ステップ 2: Git リポジトリを CI/CD システムに接続する
<a name="generating-example-step-2"></a>

構築とデプロイのために CI/CD システムがアプリケーションソースコードにアクセスできるようにするには、Git リポジトリを CI/CD システムに接続する必要があります。

**注記**  
以下の組み合わせのいずれかを使用している場合は接続が自動的に行われるため、このステップを省略できます。  
GitHub Actions と GitHub リポジトリ
GitLab CI/CD と GitLab リポジトリ
Bitbucket リポジトリを持つ Bitbucket Pipelines

Git リポジトリを CI/CD システムに接続するには、以下のいずれかを実行します。
+ Jenkins を使用している場合は、「ブランチソースの追加」について [Jenkins ドキュメント](https://www.jenkins.io/doc/book/pipeline/multibranch/)を参照してください。
+ GitLab CI/CD と Git リポジトリ (GitLab 以外) を使用している場合は、「外部リポジトリの接続」について [GitLab ドキュメント](https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/)を参照してください。

## ステップ 3: 認証情報オブジェクトを作成する
<a name="generating-example-step-3"></a>

各 CI/CD システムには、CI/CD システムが Git リポジトリにアクセスするために必要な認証情報を管理するための独自の方法があります。

必要な認証情報オブジェクトを作成するには、以下のいずれかを実行します。
+ Jenkins を使用している場合は、キー ID とシークレットキーの両方を保存する単一の「認証情報」を作成します。[Building a Jenkins Pipeline with AWS SAM](https://aws.amazon.com/blogs/compute/building-a-jenkins-pipeline-with-aws-sam/) ブログの「**Configure Jenkins**」セクションにある手順に従ってください。次のステップでは「認証情報 ID」が必要になります。
+ GitLab CI/CD を使用している場合は、2 つの「保護された変数」(キー ID とシークレットキーごとに 1 つずつ) を作成します。[GitLab ドキュメント](https://docs.gitlab.com/ee/ci/variables/)にある手順に従ってください。次のステップでは 2 つの「変数キー」が必要になります。
+ GitHub Actions を使用している場合は、2 つの「暗号化された秘密」(キーとシークレットキーごとに 1 つずつ) を作成します。[GitHub ドキュメント](https://docs.github.com/en/actions/reference/encrypted-secrets)にある手順に従ってください。次のステップでは 2 つの「シークレット名」が必要になります。
+ Bitbucket Pipelines を使用している場合は、2 つの「セキュア変数」(キー ID とシークレットキーごとに 1 つずつ) を作成します。[変数とシークレット](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets)にある手順に従ってください。次のステップでは 2 つの「シークレット名」が必要になります。

## ステップ 4: パイプライン設定を生成する
<a name="generating-example-step-4"></a>

パイプライン設定を生成するには、以下のコマンドを実行します。前のステップで作成した認証情報オブジェクトを入力する必要があります。

```
sam pipeline init
```

## ステップ 5: パイプライン設定を Git リポジトリにコミットする
<a name="generating-example-step-5"></a>

このステップは、CI/CD システムがパイプライン設定を認識しており、変更のコミット時に実行されることを確実にするために必要です。

## 詳細情報
<a name="serverless-generating-other-cicd-learn"></a>

GitHub Actions を使用して CI/CD パイプラインを設定する実践的な例については、「包括的な AWS SAM ワークショップ」の「[GitHub を使用した CI/CD](https://s12d.com/sam-ws-en-gh)」を参照してください。

# を使用してスターターパイプラインをカスタマイズする方法 AWS SAM
<a name="serverless-customizing-starter-pipelines"></a>

CI/CD 管理者は、組織内のデベロッパーがパイプライン構成を作成するために使用できる、スターターパイプラインテンプレートおよび関連するガイド付きプロンプトをカスタマイズできます。

 AWS SAM CLI は、スターターテンプレートの作成時に Cookiecutter テンプレートを使用します。クッキーカッターテンプレートの詳細については、[Cookiecutter](https://cookiecutter.readthedocs.io/en/latest/README.html) を参照してください。

また、`sam pipeline init` コマンドを使用してパイプライン設定を作成するときに、 AWS SAM CLI がユーザに表示するプロンプトをカスタマイズすることもできます。ユーザプロンプトをカスタマイズするには、次の操作を行います。

1. **`questions.json` ファイルの作成** – `questions.json` ファイルはプロジェクトリポジトリのルートにある必要があります。これは、`cookiecutter.json` ファイルと同じディレクトリです。`questions.json` ファイルのスキーマを表示するには、「[questions.json.schema](https://github.com/aws/aws-sam-cli/blob/2b831b29f76ac9c4e0cbcbd68b37f8f664e136d8/samcli/lib/pipeline/init/questions.json.schema)」を参照してください。`questions.json` ファイルの例を表示するには、「[questions.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/questions.json)」を参照してください。

1. **質問キーをクッキーカッターの名前でマッピングする** – `questions.json` ファイル内の各オブジェクトには cookieCutter テンプレートの名前と一致するキーが必要です。このキーマッチングは、 AWS SAM CLI が、ユーザプロンプトのレスポンスを Cookie Cutter テンプレートにマッピングする方法です。このキーマッチングの例については、このトピックの後半の [ファイルの例](#serverless-customizing-starter-pipelines-example-files) セクション。

1. **`metadata.json` ファイルの作成** – パイプラインが `metadata.json` ファイルで持つステージ数を宣言します。ステージ数は、`sam pipeline init` コマンドに、インフラストラクチャリソースを作成するステージ数に関する情報を求めるステージ数、または `--bootstrap` オプションの場合はステージ数を指示します。`metadata.json` 2 つのステージを持つパイプラインを宣言する ファイルの例については、[metadata.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/metadata.json) を参照してください。

## プロジェクトの例
<a name="serverless-customizing-starter-pipelines-example-projects"></a>

以下に、Cookiecutter テンプレート、`questions.json` ファイル、および `metadata.json` ファイルをそれぞれ含むプロジェクトの例を示します。
+ Jenkins の例: [2 段階の Jenkins パイプラインテンプレート](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/Jenkins/two-stage-pipeline-template)
+ CodePipeline の例: [2 段階の CodePipeline パイプラインテンプレート](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/AWS-CodePipeline/two-stage-pipeline-template)

## ファイルの例
<a name="serverless-customizing-starter-pipelines-example-files"></a>

次の一連のファイルは、`questions.json` ファイルの質問が Cookiecutter テンプレートファイルのエントリにどのように関連付けられているかを示しています。これらの例はファイルスニペットであり、完全なファイルではないことに注意してください。完全なファイルの例については、このトピックの前半の [プロジェクトの例](#serverless-customizing-starter-pipelines-example-projects) セクションを参照してください。

例 **`questions.json`**:

```
{
  "questions": [{
    "key": "intro",
    "question": "\nThis template configures a pipeline that deploys a serverless application to a testing and a production stage.\n",
    "kind": "info"
  }, {
    "key": "pipeline_user_jenkins_credential_id",
    "question": "What is the Jenkins credential ID (via Jenkins plugin \"aws-credentials\") for pipeline user access key?",
    "isRequired": true
  }, {
    "key": "sam_template",
    "question": "What is the template file path?",
    "default": "template.yaml"
  }, {
    ...
```

例 **`cookiecutter.json`**:

```
{
  "outputDir": "aws-sam-pipeline",
  "pipeline_user_jenkins_credential_id": "",
  "sam_template": "",
    ...
```

例 **`Jenkinsfile`**:

```
pipeline {
  agent any
  environment {
    PIPELINE_USER_CREDENTIAL_ID = '{{cookiecutter.pipeline_user_jenkins_credential_id}}'
    SAM_TEMPLATE = '{{cookiecutter.sam_template}}'
    ...
```

# AWS SAM アプリケーションのデプロイを自動化する
<a name="serverless-deploying-modify-pipeline"></a>

では AWS SAM、 AWS SAM アプリケーションのデプロイを自動化する方法は、使用している CI/CD システムによって異なります。このため、このセクションの例では、 AWS SAM ビルドコンテナイメージでのサーバーレスアプリケーションの構築を自動化するようにさまざまな CI/CD システムを設定する方法を示しています。これらのビルドコンテナイメージにより、 を使用してサーバーレスアプリケーションを簡単に構築およびパッケージ化できます AWS SAM CLI。

既存の CI/CD パイプラインが AWS SAM を使用してサーバーレスアプリケーションをデプロイするための手順は、使用している CI/CD システムによって若干異なります。

以下のトピックでは、 AWS SAM ビルドコンテナイメージ内にサーバーレスアプリケーションを構築するように CI/CD システムを設定する例を示します。

**Topics**
+ [を使用して でデプロイ AWS CodePipeline する AWS SAM](deploying-using-codepipeline.md)
+ [Bitbucket Pipelines を使用して でデプロイする AWS SAM](deploying-using-bitbucket.md)
+ [Jenkins を使用して でデプロイする AWS SAM](deploying-using-jenkins.md)
+ [GitLab CI/CD を使用した でのデプロイ AWS SAM](deploying-using-gitlab.md)
+ [GitHub Actions を使用した でのデプロイ AWS SAM](deploying-using-github.md)

# を使用して でデプロイ AWS CodePipeline する AWS SAM
<a name="deploying-using-codepipeline"></a>

 AWS SAM アプリケーションのビルドとデプロイを自動化するように[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)パイプラインを設定するには、 CloudFormation テンプレートと`buildspec.yml`ファイルに以下を実行する行が含まれている必要があります。

1. 使用可能なイメージから必要なランタイムがあるビルドコンテナイメージを参照する。以下の例は、`public.ecr.aws/sam/build-nodejs20.x` ビルドコンテナイメージを使用します。

1. 必要な AWS SAM コマンドラインインターフェイス (CLI) コマンドを実行するようにパイプラインステージを設定します。以下の例は、**sam build** と **sam deploy** (必要なオプション付き) の 2 つの AWS SAM CLI コマンドを実行します。

この例では、 AWS SAM テンプレートファイル内のすべての関数とレイヤーを で宣言していることを前提としています`runtime: nodejs20.x`。

**CloudFormation テンプレートスニペット:**

```
  CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Environment:
        ComputeType: BUILD_GENERAL1_SMALL
        Image: public.ecr.aws/sam/build-nodejs20.x
        Type: LINUX_CONTAINER
      ...
```

**`buildspec.yml` スニペット:**

```
version: 0.2
phases:
  build:
    commands:
      - sam build
      - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

異なるランタイムに利用できる Amazon Elastic Container Registry (Amazon ECR) ビルドコンテナイメージのリストについては、「[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)」を参照してください。

# Bitbucket Pipelines を使用して でデプロイする AWS SAM
<a name="deploying-using-bitbucket"></a>

 AWS SAM アプリケーションのビルドとデプロイを自動化するように [Bitbucket Pipeline](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/) を設定するには、 `bitbucket-pipelines.yml` ファイルに以下を実行する行が含まれている必要があります。

1. 使用可能なイメージから必要なランタイムがあるビルドコンテナイメージを参照する。以下の例は、`public.ecr.aws/sam/build-nodejs20.x` ビルドコンテナイメージを使用します。

1. 必要な AWS SAM コマンドラインインターフェイス (CLI) コマンドを実行するようにパイプラインステージを設定します。以下の例は、**sam build** と **sam deploy** (必要なオプション付き) の 2 つの AWS SAM CLI コマンドを実行します。

この例では、 AWS SAM テンプレートファイル内のすべての関数とレイヤーを で宣言していることを前提としています`runtime: nodejs20.x`。

```
image: public.ecr.aws/sam/build-nodejs20.x

pipelines:
  branches:
    main: # branch name
      - step:
          name: Build and Package
          script:
            - sam build
            - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

異なるランタイムに利用できる Amazon Elastic Container Registry (Amazon ECR) ビルドコンテナイメージのリストについては、「[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)」を参照してください。

# Jenkins を使用して でデプロイする AWS SAM
<a name="deploying-using-jenkins"></a>

 AWS SAM アプリケーションのビルドとデプロイを自動化するように [Jenkins](https://www.jenkins.io/) パイプラインを設定するには、 に以下を行う行が含まれている`Jenkinsfile`必要があります。

1. 使用可能なイメージから必要なランタイムがあるビルドコンテナイメージを参照する。以下の例は、`public.ecr.aws/sam/build-nodejs20.x` ビルドコンテナイメージを使用します。

1. 必要な AWS SAM コマンドラインインターフェイス (CLI) コマンドを実行するようにパイプラインステージを設定します。以下の例は、**sam build** と **sam deploy** (必要なオプション付き) の 2 つの AWS SAM CLI コマンドを実行します。

この例では、 AWS SAM テンプレートファイル内のすべての関数とレイヤーを で宣言していることを前提としています`runtime: nodejs20.x`。

```
pipeline {
    agent { docker { image 'public.ecr.aws/sam/build-nodejs20.x' } }
    stages {
        stage('build') {
            steps {
                sh 'sam build'
                sh 'sam deploy --no-confirm-changeset --no-fail-on-empty-changeset'
            }
        }
    }
}
```

異なるランタイムに利用できる Amazon Elastic Container Registry (Amazon ECR) ビルドコンテナイメージのリストについては、「[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)」を参照してください。

# GitLab CI/CD を使用した でのデプロイ AWS SAM
<a name="deploying-using-gitlab"></a>

 AWS SAM アプリケーションのビルドとデプロイを自動化するように [GitLab](https://about.gitlab.com) パイプラインを設定するには、 `gitlab-ci.yml` ファイルに以下を実行する行が含まれている必要があります。

1. 使用可能なイメージから必要なランタイムがあるビルドコンテナイメージを参照する。以下の例は、`public.ecr.aws/sam/build-nodejs20.x` ビルドコンテナイメージを使用します。

1. 必要な AWS SAM コマンドラインインターフェイス (CLI) コマンドを実行するようにパイプラインステージを設定します。以下の例は、**sam build** と **sam deploy** (必要なオプション付き) の 2 つの AWS SAM CLI コマンドを実行します。

この例では、 AWS SAM テンプレートファイル内のすべての関数とレイヤーを で宣言していることを前提としています`runtime: nodejs20.x`。

```
image: public.ecr.aws/sam/build-nodejs20.x
deploy:
  script:
    - sam build
    - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

異なるランタイムに利用できる Amazon Elastic Container Registry (Amazon ECR) ビルドコンテナイメージのリストについては、「[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)」を参照してください。

# GitHub Actions を使用した でのデプロイ AWS SAM
<a name="deploying-using-github"></a>

 AWS SAM アプリケーションのビルドとデプロイを自動化するように [GitHub](https://github.com/) パイプラインを設定するには、まずホストに AWS SAM コマンドラインインターフェイス (CLI) をインストールする必要があります。このセットアップには、GitHub ワークフローの [GitHub Actions](https://github.com/features/actions) を使用できます。

次の GitHub ワークフローの例では、一連の GitHub Actions を使用して Ubuntu ホストを設定し、コマンドを実行して AWS SAM CLI AWS SAM アプリケーションを構築およびデプロイします。

```
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v3
      - uses: aws-actions/setup-sam@v2
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-2
      - run: sam build --use-container
      - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

異なるランタイムに利用できる Amazon Elastic Container Registry (Amazon ECR) ビルドコンテナイメージのリストについては、「[のイメージリポジトリ AWS SAM](serverless-image-repositories.md)」を参照してください。

# AWS SAM パイプラインで OIDC 認証を使用する方法
<a name="deploying-with-oidc"></a>

AWS Serverless Application Model (AWS SAM) は、Bitbucket、GitHub Actions、GitLab 継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームの OpenID Connect (OIDC) ユーザー認証をサポートしています。このサポートにより、これらのプラットフォームのいずれかから認証された CI/CD ユーザーアカウントを使用して、サーバーレスアプリケーションパイプラインを管理できます。それ以外の場合は、 AWS SAM パイプラインへのアクセスを制御するために複数の AWS Identity and Access Management (IAM) ユーザーを作成および管理する必要があります。

## AWS SAM パイプラインで OIDC をセットアップする
<a name="deploying-with-oidc-setup"></a>

`sam pipeline bootstrap` 設定プロセス中に、以下を実行して AWS SAM パイプラインで OIDC を設定します。

1. ID プロバイダーの選択を求められたら、**OIDC** を選択します。

1. 次に、サポートされている OIDC プロバイダーを選択します。

1. OIDC プロバイダーの URL を入力します (**https://** から入力します)。
**注記**  
AWS SAM は、`AWS::IAM::OIDCProvider`リソースタイプを生成するときにこの URL を参照します。

1. 次に、プロンプトに従い、選択したプラットフォームへのアクセスに必要な CI/CD プラットフォーム情報を入力します。これらの詳細はプラットフォームによって異なり、次のものが含まれる場合があります。
   + OIDC クライアント ID。
   + コードリポジトリ名または一意の識別子 (UUID)。
   + リポジトリに関連付けられたグループまたは組織名。
   + コードリポジトリが属する GitHub 組織。
   + GitHub リポジトリ名。
   + デプロイ元のブランチ。

1. AWS SAM は、入力された OIDC 設定の概要を表示します。設定の番号を入力して編集するか、Enter を押して続行します。

1. 入力した OIDC 接続をサポートするために必要なリソースの作成を確認するメッセージが表示されたら、Y を押して続行します。

AWS SAM は、パイプライン実行ロールを引き受ける指定された設定で `AWS::IAM::OIDCProvider` AWS CloudFormation リソースを生成します。この CloudFormation リソースタイプの詳細については、AWS CloudFormation ユーザーガイドの「[AWS::IAM::OIDCProvider](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html)」を参照してください。

**注記**  
ID プロバイダー (IdP) リソースが に既に存在する場合 AWS アカウント、 AWS SAM は新しいリソースを作成する代わりにそれを参照します。

## 例
<a name="deploying-with-oidc-setup-example"></a>

以下は、 AWS SAM パイプラインで OIDC を設定する例です。

```
Select a permissions provider:
    1 - IAM (default)
    2 - OpenID Connect (OIDC)
Choice (1, 2): 2
Select an OIDC provider:
    1 - GitHub Actions
    2 - GitLab
    3 - Bitbucket
Choice (1, 2, 3): 1
Enter the URL of the OIDC provider [https://token.actions.githubusercontent.com]:
Enter the OIDC client ID (sometimes called audience) [sts.amazonaws.com]:
Enter the GitHub organization that the code repository belongs to. If there is no organization enter your username instead: my-org
Enter GitHub repository name: testing
Enter the name of the branch that deployments will occur from [main]:

[3] Reference application build resources
Enter the pipeline execution role ARN if you have previously created one, or we will create one for you []:
Enter the CloudFormation execution role ARN if you have previously created one, or we will create one for you []:
Please enter the artifact bucket ARN for your Lambda function. If you do not have a bucket, we will create one for you []:
Does your application contain any IMAGE type Lambda functions? [y/N]:

[4] Summary
Below is the summary of the answers:
    1 - Account: 123456
    2 - Stage configuration name: dev
    3 - Region: us-east-1
    4 - OIDC identity provider URL: https://token.actions.githubusercontent.com
    5 - OIDC client ID: sts.amazonaws.com
    6 - GitHub organization: my-org
    7 - GitHub repository: testing
    8 - Deployment branch: main
    9 - Pipeline execution role: [to be created]
    10 - CloudFormation execution role: [to be created]
    11 - Artifacts bucket: [to be created]
    12 - ECR image repository: [skipped]
Press enter to confirm the values above, or select an item to edit the value:

This will create the following required resources for the 'dev' configuration:
    - IAM OIDC Identity Provider
    - Pipeline execution role
    - CloudFormation execution role
    - Artifact bucket
Should we proceed with the creation? [y/N]:
```

## 詳細情報
<a name="deploying-with-oidc-setup-learn-more"></a>

 AWS SAM パイプラインでの OIDC の使用の詳細については、「」を参照してください[sam pipeline bootstrap](sam-cli-command-reference-sam-pipeline-bootstrap.md)。

# を使用して sam sync に同期する方法の概要 AWS クラウド
<a name="using-sam-cli-sync"></a>

 AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) `sam sync` コマンドには、ローカルアプリケーションの変更を にすばやく同期するためのオプションが用意されています AWS クラウド。アプリケーションを開発する際に次の目的で `sam sync` を使用します。

1. ローカルの変更を自動的に検出して に同期します AWS クラウド。

1.  AWS クラウドに同期するローカル変更をカスタマイズする。

1. テストと検証のためにクラウドでアプリケーションを準備する。

`sam sync` を使用すると、テストや検証のためにローカルの変更をクラウドに同期するのにかかる時間を短縮する、迅速な開発ワークフローを作成できます。

**注記**  
`sam sync` コマンドは開発環境に推奨されます。本番環境の場合は、`sam deploy` を使用するか、または継続的インテグレーションおよびデリバリー (CI/CD) パイプラインを設定することをお勧めします。詳細については[を使用してアプリケーションとリソースをデプロイする AWS SAM](serverless-deploying.md)を参照してください。

`sam sync` コマンドは の一部です AWS SAM Accelerate。 *AWS SAM Accelerate*には、 でのサーバーレスアプリケーションの開発とテストのエクスペリエンスを高速化するために使用できるツールが用意されています AWS クラウド。

**Topics**
+ [ローカルの変更を自動的に検出して に同期する AWS クラウド](#using-sam-cli-sync-auto)
+ [に同期されるローカル変更をカスタマイズする AWS クラウド](#using-sam-cli-sync-customize)
+ [テストと検証のためにクラウドでアプリケーションを準備する](#using-sam-cli-sync-test)
+ [sam sync コマンドのオプション](#using-sam-cli-sync-options)
+ [トラブルシューティング](#using-sam-cli-sync-troubleshooting)
+ [例](#using-sam-cli-sync-examples)
+ [詳細情報](#using-sam-cli-sync-learn)

## ローカルの変更を自動的に検出して に同期する AWS クラウド
<a name="using-sam-cli-sync-auto"></a>

アプリケーションと AWS クラウドの同期を開始する `--watch` オプションを指定して `sam sync` を実行します。これは次を実行します。

1. **アプリケーションを構築する** – このプロセスは、`sam build` コマンドの使用と似ています。

1. **アプリケーションをデプロイする** – AWS SAM CLI は、デフォルト設定を使用してアプリケーションを AWS CloudFormation にデプロイします。次のデフォルト値が使用されます。

   1. AWS `.aws` ユーザーフォルダにある 認証情報と一般的な設定。

   1. アプリケーションの `samconfig.toml` ファイルにあるアプリケーションデプロイ設定。

   デフォルト値が見つからない場合、 AWS SAM CLI はその旨を通知し、同期プロセスを終了します。

1. **ローカルの変更を監視する** – AWS SAM CLI は実行を継続し、アプリケーションに対するローカルの変更を監視します。これが `--watch` オプションによって提供されるものです。

   このオプションは、デフォルトでオンになっている場合があります。デフォルト値については、アプリケーションの `samconfig.toml` ファイルを参照してください。ファイルの例を次に示します。

   ```
   ...
   [default.sync]
   [default.sync.parameters]
   watch = true
   ...
   ```

1. **へのローカル変更の同期 AWS クラウド** – ローカル変更を行うと、 はそれらの変更 AWS SAM CLIを検出し、利用可能な最も迅速な方法で に同期 AWS クラウド します。変更の種類に応じて、次のような状況が発生する可能性があります。

   1. 更新されたリソースが AWS サービス API をサポートしている場合、 AWS SAM CLIはそれを使用して変更をデプロイします。 APIs これにより、 AWS クラウド内のリソースを更新するための迅速な同期が行われます。

   1. 更新されたリソースが AWS サービス APIs をサポートしていない場合、 AWS SAM CLIは CloudFormation デプロイを実行します。これにより、 AWS クラウド内のアプリケーション全体が更新されます。迅速さは劣りますが、デプロイを手動で開始する必要がなくなります。

`sam sync` コマンドは でアプリケーションを自動的に更新するため AWS クラウド、開発環境にのみ推奨されます。`sam sync` を実行すると、次を確認するよう求められます。

```
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]: ENTER
```

## に同期されるローカル変更をカスタマイズする AWS クラウド
<a name="using-sam-cli-sync-customize"></a>

 AWS クラウドに同期するローカル変更をカスタマイズするオプションを指定します。これにより、テストと検証のためにクラウドでローカルの変更が表示されるまでにかかる時間を短縮できます。

たとえば、 AWS Lambda 関数コードなどのコード変更のみを同期する`--code`オプションを指定します。開発中、特に Lambda コードに注力している場合、これを使用することで、テストと検証のために変更をすぐにクラウドに取り込むことができます。以下に例を示します。

```
$ sam sync --code --watch
```

特定の Lambda 関数またはレイヤーのコード変更のみを同期するには、`--resource-id` オプションを使用します。以下に例を示します。

```
$ sam sync --code --resource-id HelloWorldFunction --resource-id HelloWorldLayer
```

## テストと検証のためにクラウドでアプリケーションを準備する
<a name="using-sam-cli-sync-test"></a>

`sam sync` コマンドは、 AWS クラウドでアプリケーションを更新するために利用できる最も迅速な方法を自動的に見つけます。これにより、開発とクラウドテストのワークフローが高速化されます。 AWS サービス APIs、サポートされているリソースを迅速に開発、同期、テストできます。実践的な例については、*「ワークショップの完了 AWS SAM 」の*[「モジュール 6 - AWS SAM Accelerate](https://s12d.com/sam-ws-en-accelerate)」を参照してください。

## sam sync コマンドのオプション
<a name="using-sam-cli-sync-options"></a>

`sam sync` コマンドの変更に使用できる主なオプションの一部を次に示します。すべてのオプションのリストについては、「[sam sync](sam-cli-command-reference-sam-sync.md)」を参照してください。

### 1 回限りの CloudFormation デプロイを実行する
<a name="using-sam-cli-sync-options-single-deploy"></a>

自動同期をオフにする `--no-watch` オプションを使用します。以下に例を示します。

```
$ sam sync --no-watch
```

は AWS SAM CLI1 回限りの CloudFormation デプロイを実行します。このコマンドは、`sam build` および `sam deploy` コマンドによって実行されるアクションをグループ化します。

### 初期 CloudFormation デプロイをスキップする
<a name="using-sam-cli-sync-options-skip-deploy-sync"></a>

`sam sync` を実行するたびに CloudFormation デプロイが必要かどうかをカスタマイズできます。
+ を実行するたびに CloudFormation デプロイを要求する`--no-skip-deploy-sync`には`sam sync`、 を指定します。これにより、ローカルインフラストラクチャが同期され CloudFormation、ドリフトを防ぐことができます。このオプションを使用すると、開発およびテストのワークフローにさらに時間がかかります。
+  CloudFormation デプロイ`--skip-deploy-sync`をオプションにするには、 を指定します。 AWS SAM CLI は、ローカル AWS SAM テンプレートをデプロイされた CloudFormation テンプレートと比較し、変更が検出されない場合、最初の CloudFormation デプロイをスキップします。 CloudFormation デプロイをスキップすると、ローカルの変更を に同期する時間を節約できます AWS クラウド。

  変更が検出されない場合、 AWS SAM CLI は引き続き以下のシナリオで CloudFormation デプロイを実行します。
  + 前回の CloudFormation デプロイから 7 日以上経過している場合。
  + 多数の Lambda 関数コードの変更が検出された場合、 CloudFormation デプロイをアプリケーションを更新する最も迅速な方法にします。

以下に例を示します。

```
$ sam sync --skip-deploy-sync
```

### ネストされたスタックからリソースを同期する
<a name="using-sam-cli-sync-options-nested-stack"></a>

**ネストされたスタックからリソースを同期するには**

1. `--stack-name` を使用してルートスタックを指定します。

1. 次の形式を使用して、ネストされたスタック内のリソースを識別します: `nestedStackId/resourceId`。

1. `--resource-id` を使用して、ネストされたスタックにリソースを提供します。

   以下に例を示します。

   ```
   $ sam sync --code --stack-name sam-app --resource-id myNestedStack/HelloWorldFunction
   ```

ネストしたアプリケーションの作成方法については、「[でネストされたアプリケーションを使用してコードとリソースを再利用する AWS SAM](serverless-sam-template-nested-applications.md)」を参照してください。

### 更新する特定の CloudFormation スタックを指定する
<a name="using-sam-cli-sync-options-stack-name"></a>

更新する特定の CloudFormation スタックを指定するには、 `--stack-name`オプションを指定します。以下に例を示します。

```
$ sam sync --stack-name dev-sam-app
```

### ソースフォルダにプロジェクトを構築することでビルド時間を短縮する
<a name="using-sam-cli-sync-options-source"></a>

サポートされているランタイムとビルドメソッドについては、`--build-in-source` オプションを使用してプロジェクトをソースフォルダに直接構築できます。デフォルトでは、 は一時ディレクトリに AWS SAM CLIビルドされます。これには、ソースコードとプロジェクトファイルのコピーが含まれます。を使用すると`--build-in-source` AWS SAM 、 はソースフォルダに直接CLIビルドされるため、一時ディレクトリにファイルをコピーする必要がなくなるため、ビルドプロセスが高速化されます。

サポートされているランタイムとビルドメソッドのリストについては、「` --build-in-source`」を参照してください。

### 同期を開始しないファイルとフォルダを指定する
<a name="using-sam-cli-sync-options-exclude"></a>

更新時に同期を開始しないファイルまたはフォルダを指定するには `--watch-exclude` オプションを使用します。このオプションの詳細については、「`--watch-exclude`」を参照してください。

`HelloWorldFunction` 関数に関連付けられた `package-lock.json` ファイルを除外する例を次に示します。

```
$ sam sync --watch --watch-exclude HelloWorldFunction=package-lock.json
```

このコマンドを実行すると、 AWS SAM CLIは同期プロセスを開始します。これには以下が含まれます。
+ `sam build` を実行して関数を構築し、デプロイに向けてアプリケーションを準備します。
+ アプリケーションをデプロイするには `sam deploy` を実行します。
+ アプリケーションに対する変更を監視します。

`package-lock.json` ファイルを変更しても、 は AWS SAM CLI同期を開始しません。別のファイルが更新されると、 AWS SAM CLIはその`package-lock.json`ファイルを含む同期を開始します。

子スタックの Lambda 関数を指定する例を次に示します。

```
$ sam sync --watch --watch-exclude ChildStackA/MyFunction=database.sqlite3
```

## トラブルシューティング
<a name="using-sam-cli-sync-troubleshooting"></a>

のトラブルシューティングについては AWS SAM CLI、「」を参照してください[AWS SAMCLI トラブルシューティング](sam-cli-troubleshooting.md)。

## 例
<a name="using-sam-cli-sync-examples"></a>

### sam sync を使用して Hello World アプリケーションを更新する
<a name="using-sam-cli-sync-examples-example1"></a>

この例では、サンプルの Hello World アプリケーションを初期化することから始めます。このアプリケーションの詳細については、「[チュートリアル: を使用して Hello World アプリケーションをデプロイする AWS SAM](serverless-getting-started-hello-world.md)」を参照してください。

`sam sync` を実行すると、構築とデプロイのプロセスが開始されます。

```
$ sam sync
				
The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without
performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]:
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/0663e6fe-a888-4efb-b908-e2344261e9c7) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 11:17:19 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              Resource creation Initiated
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   Resource creation Initiated
                                                                        ack
CREATE_COMPLETE                     AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  Resource creation Initiated
CREATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   Resource creation Initiated
                                                                        5f9d
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------
Stack creation succeeded. Sync infra completed.

Infra sync completed.
CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
```

デプロイが完了したら、`HelloWorldFunction` コードを変更します。はこの AWS SAM CLI変更を検出し、アプリケーションを に同期します AWS クラウド。は AWS サービス APIs AWS Lambda をサポートしているため、クイック同期が実行されます。

```
Syncing Lambda Function HelloWorldFunction...
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource
Finished syncing Lambda Function HelloWorldFunction.
```

次に、アプリケーションの AWS SAM テンプレートで API エンドポイントを変更します。`/hello` を `/helloworld` に変更します。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    ...
    Properties:
      ...
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /helloworld
            Method: get
```

Amazon API Gateway リソースは AWS サービス API をサポートしていないため、 AWS SAM CLIは自動的に CloudFormation デプロイを実行します。以下は、その出力例です。

```
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9 --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 14:41:18 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
UPDATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Requested update requires the
                                                                        ssionProd                           creation of a new physical
                                                                                                            resource; hence creating one.
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   Resource creation Initiated
                                                                        d3cd
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
SS
DELETE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
DELETE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
DELETE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
DELETE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------


Stack update succeeded. Sync infra completed.

Infra sync completed.
```

## 詳細情報
<a name="using-sam-cli-sync-learn"></a>

すべての `sam sync` オプションの説明については、「[sam sync](sam-cli-command-reference-sam-sync.md)」を参照してください。