翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
の使用の概要 sam sync 同期する AWS クラウド
AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) sam sync
コマンドには、ローカルアプリケーションの変更を にすばやく同期するためのオプションが用意されています AWS クラウド。アプリケーションを開発する際に次の目的で sam sync
を使用します。
-
ローカルの変更を自動的に検出して に同期します AWS クラウド。
-
AWS クラウドに同期するローカル変更をカスタマイズする。
-
テストと検証のためにクラウドでアプリケーションを準備する。
sam sync
を使用すると、テストや検証のためにローカルの変更をクラウドに同期するのにかかる時間を短縮する、迅速な開発ワークフローを作成できます。
注記
sam sync
コマンドは開発環境に推奨されます。本番環境の場合は、sam deploy
を使用するか、または継続的インテグレーションおよびデリバリー (CI/CD) パイプラインを設定することをお勧めします。詳細については、「AWS SAM を使用してアプリケーションとリソースをデプロイする」を参照してください。
sam sync
コマンドは の一部です。 AWS SAM Accelerate. AWS SAM Accelerate には、 でサーバーレスアプリケーションを開発およびテストするエクスペリエンスを高速化するために使用できるツールが用意されています AWS クラウド。
トピック
ローカルの変更を自動的に検出して に同期する AWS クラウド
アプリケーションと AWS クラウドの同期を開始する --watch
オプションを指定して sam sync
を実行します。これは次を実行します。
-
アプリケーションを構築する – このプロセスは、
sam build
コマンドの使用と似ています。 -
アプリケーションをデプロイする – AWS SAM CLI は、デフォルト設定 AWS CloudFormation を使用してアプリケーションを にデプロイします。次のデフォルト値が使用されます。
-
AWS
.aws
ユーザーフォルダにある認証情報と一般的な設定。 -
アプリケーションの
samconfig.toml
ファイルにあるアプリケーションデプロイ設定。
デフォルト値が見つからない場合は、 AWS SAM CLI が通知し、同期プロセスを終了します。
-
-
ローカルの変更を監視する – AWS SAM CLI は実行中のままで、アプリケーションに対するローカルの変更を監視します。これが
--watch
オプションによって提供されるものです。このオプションは、デフォルトでオンになっている場合があります。デフォルト値については、アプリケーションの
samconfig.toml
ファイルを参照してください。ファイルの例を次に示します。... [default.sync] [default.sync.parameters] watch = true ...
-
へのローカル変更の同期 AWS クラウド — ローカル変更を行うと、 AWS SAM CLI は、これらの変更を検出し AWS クラウド 、利用可能な最も迅速な方法で に同期します。変更の種類に応じて、次のような状況が発生する可能性があります。
-
更新されたリソースが AWS サービス をサポートしている場合APIs、 AWS SAM CLI は、変更をデプロイするために使用します。これにより、 AWS クラウド内のリソースを更新するための迅速な同期が行われます。
-
更新されたリソースが AWS サービス をサポートしていない場合はAPIs、 AWS SAM CLI は AWS 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 クラウド
AWS クラウドに同期するローカル変更をカスタマイズするオプションを指定します。これにより、テストと検証のためにクラウドでローカルの変更が表示されるまでにかかる時間を短縮できます。
例えば、 AWS Lambda 関数コードなどのコード変更のみを同期する--code
オプションを指定します。開発中、特に Lambda コードに注力している場合、これを使用することで、テストと検証のために変更をすぐにクラウドに取り込むことができます。以下に例を示します。
$
sam sync --code --watch
特定の Lambda 関数またはレイヤーのコード変更のみを同期するには、--resource-id
オプションを使用します。以下に例を示します。
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
テストと検証のためにクラウドでアプリケーションを準備する
sam sync
コマンドは、 AWS クラウドでアプリケーションを更新するために利用できる最も迅速な方法を自動的に見つけます。これにより、開発とクラウドテストのワークフローが高速化されます。 AWS サービスを使用することでAPIs、サポートされているリソースを迅速に開発、同期、テストできます。実践的な例については、「The Complete AWS SAM Workshop」の「モジュール 6 - AWS SAM Accelerate
sam sync コマンドのオプション
sam sync
コマンドの変更に使用できる主なオプションの一部を次に示します。すべてのオプションのリストについては、「sam sync」を参照してください。
1 回限りの AWS CloudFormation デプロイを実行する
自動同期をオフにする --no-watch
オプションを使用します。以下に例を示します。
$
sam sync --no-watch
の AWS SAM CLI は 1 回限りの AWS CloudFormation デプロイを実行します。このコマンドは、sam build
および sam deploy
コマンドによって実行されるアクションをグループ化します。
初期 AWS CloudFormation デプロイをスキップする
sam sync
実行のたびに AWS CloudFormation デプロイが必要かどうかをカスタマイズできます。
-
sam sync
を実行するたびに AWS CloudFormation デプロイを要求する--no-skip-deploy-sync
を指定します。これにより、ローカルインフラストラクチャが に同期され AWS CloudFormation、ドリフトを防ぐことができます。このオプションを使用すると、開発およびテストのワークフローにさらに時間がかかります。 -
を指定
--skip-deploy-sync
して AWS CloudFormation デプロイをオプションにします。の AWS SAM CLI は、ローカル AWS SAM テンプレートをデプロイされた AWS CloudFormation テンプレートと比較し、変更が検出されない場合、最初の AWS CloudFormation デプロイをスキップします。 AWS CloudFormation デプロイをスキップすると、ローカルの変更を に同期する際の時間を短縮できます AWS クラウド。変更が検出されない場合、 AWS SAM CLI は引き続き、以下のシナリオで AWS CloudFormation デプロイを実行します。
-
前回の AWS CloudFormation デプロイから 7 日以上経過している場合。
-
多数の Lambda 関数コードの変更が検出された場合、 AWS CloudFormation デプロイをアプリケーションを更新する最も迅速な方法にします。
-
以下に例を示します。
$
sam sync --skip-deploy-sync
ネストされたスタックからリソースを同期する
ネストされたスタックからリソースを同期するには
-
--stack-name
を使用してルートスタックを指定します。 -
次の形式を使用して、ネストされたスタック内のリソースを識別します:
。nestedStackId/resourceId
-
--resource-id
を使用して、ネストされたスタックにリソースを提供します。以下に例を示します。
$
sam sync --code --stack-name
sam-app
--resource-idmyNestedStack/HelloWorldFunction
ネストしたアプリケーションの作成方法については、「AWS SAM 内で、ネストされたアプリケーションを使用して、コードとリソースを再使用する」を参照してください。
更新する特定の AWS CloudFormation スタックを指定する
更新する特定の AWS CloudFormation スタックを指定するには、 --stack-name
オプションを指定します。以下に例を示します。
$
sam sync --stack-name
dev-sam-app
ソースフォルダにプロジェクトを構築することでビルド時間を短縮する
サポートされているランタイムとビルドメソッドについては、--build-in-source
オプションを使用してプロジェクトをソースフォルダに直接構築できます。デフォルトでは、 AWS SAM CLI は、ソースコードとプロジェクトファイルのコピーを含む一時ディレクトリに構築されます。では--build-in-source
、 AWS SAM CLI はソースフォルダに直接ビルドします。これにより、ファイルを一時ディレクトリにコピーする必要がなくなるため、ビルドプロセスが高速化されます。
サポートされているランタイムとビルドメソッドのリストについては、「
--build-in-source
」を参照してください。
同期を開始しないファイルとフォルダを指定する
更新時に同期を開始しないファイルまたはフォルダを指定するには --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
トラブルシューティング
をトラブルシューティングするには AWS SAM CLI「AWS SAMCLI トラブルシューティング」を参照してください。
例
sam sync を使用して Hello World アプリケーションを更新する
この例では、サンプルの Hello World アプリケーションを初期化することから始めます。このアプリケーションの詳細については、「チュートリアル: で Hello World アプリケーションをデプロイする AWS SAM」を参照してください。
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-samcliamzn-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 サービス AWS Lambda をサポートしているためAPIs、クイック同期が実行されます。
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 は AWS 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-samcliamzn-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.
詳細
すべての sam sync
オプションの説明については、「sam sync」を参照してください。