本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用同步sam sync到簡介 AWS 雲端
指 AWS Serverless Application Model 令行介面 (AWS SAMCLI) 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 雲端
sam sync
使用--watch
選項運行以開始將應用程序同步到 AWS 雲端. 這會執行以下操作:
-
建置您的應用程式 — 此程序類似於使用
sam build
指令。 -
部署您的應用程式 — AWS SAMCLI 將您的應用程式部署到 AWS CloudFormation 使用預設設定。會使用下列預設值:
-
AWS 在您的
.aws
使用者資料夾中找到認證和一般組態設定。 -
應用程式
samconfig.toml
檔案中的應用程式部署設定。
如果找不到預設值, AWS SAMCLI會通知您並結束同步處理程序。
-
-
注意本地變化 — AWS SAMCLI 仍在運行並監視應用程序的本地更改。這是該
--watch
選項提供的內容。依預設,此選項可能會開啟。如需預設值,請參閱應用程式的
samconfig.toml
檔案。以下是範例 檔案:... [default.sync] [default.sync.parameters] watch = true ...
-
將本機變更同步至 AWS 雲端 — 當您進行本機變更時,會 AWS 雲端 透過最快速的方法 AWS SAMCLI偵測這些變更並同步至。視變更類型而定,可能會發生下列情況:
-
如果您更新的資源支援 AWS 服務 API,則 AWS SAMCLI會使用它來部署您的變更。這會導致快速同步以更新中的資源 AWS 雲端。
-
如果您更新的資源不支援 AWS 服務 API,則 AWS SAMCLI會執行 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 雲端。這可以加快在雲中查看本地更改以進行測試和驗證所需的時間。
例如,提供僅同步程式碼變更的--code
選項,例如 AWS Lambda 函數程式碼。在開發過程中,如果您專注於 Lambda 程式碼,這樣可以快速將您的變更導入雲端以進行測試和驗證。以下是範例:
$
sam sync --code --watch
若只要同步特定 Lambda 函數或層的程式碼變更,請使用--resource-id
選項。以下是範例:
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
在雲端準備您的應用程式以進行測試和驗證
指sam sync
令會自動尋找可用於在中更新應用程式的最快方法。 AWS 雲端這可以加快您的開發和雲端測試工作流程。透過使用 AWS 服務 API,您可以快速開發、同步處理和測試支援的資源。如需實際操作範例,請參閱單元 6-完整 AWS SAM 研討會中的 AWS SAM 加速
sam 同步指令的選項
以下是您可以用來修改sam sync
指令的一些主要選項。如需所有選項的清單,請參閱sam sync。
執行一次性 AWS CloudFormation 部署
使用--no-watch
此選項可關閉自動同步。以下是範例:
$
sam sync --no-watch
AWS SAMCLI將執行一次性 AWS CloudFormation 部署。此sam deploy
指令會將sam build
和指令執行的動作群組在一起。
略過初始 AWS CloudFormation 部署
您可以自訂每次執行時sam sync
是否需要 AWS CloudFormation 部署。
-
提供
--no-skip-deploy-sync
以在每次執行時sam sync
都需要 AWS CloudFormation 部署。這可確保您的本機基礎結構同步到 AWS CloudFormation,防止漂移。使用此選項確實會為您的開發和測試工作流程增加額外的時間。 -
提供
--skip-deploy-sync
以使 AWS CloudFormation 部署可選。 AWS SAMCLI會將您的本機 AWS SAM 範本與已部署的 AWS CloudFormation 範本進行比較,如果未偵測到變更,則會略過初始 AWS CloudFormation 部署。將本機變更同步至時,略過 AWS CloudFormation 部署可以節省時間 AWS 雲端。如果未偵測到任何變更,仍 AWS SAMCLI會在下列情況下執行 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 SAMCLI,請參閱AWS SAMCLI疑難排。
範例
使用山姆同步來更新你好世界應用程序
在這個例子中,我們通過初始化示例 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-samclisourcebucket-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 SAMCLI偵測到此變更,並將我們的應用程式同步到 AWS 雲端. 由於 AWS Lambda 支援 AWS 服務 API,因此會執行快速同步。
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 SAMCLI自動執行 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-samclisourcebucket-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。