

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

# を使用して 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)」を参照してください。