As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usar o sam sync
O comando Interface da Linha de Comando (AWS SAM CLI) sam sync
do AWS Serverless Application Model fornece opções para sincronizar rapidamente as alterações do aplicativo local com o Nuvem AWS. Use sam sync
ao desenvolver seus aplicativos para:
-
Detecte e sincronize automaticamente as alterações locais com o Nuvem AWS.
-
Personalize quais alterações locais são sincronizadas com o Nuvem AWS.
-
Prepare seu aplicativo na nuvem para testes e validação.
Com sam sync
, você pode criar um fluxo de trabalho de desenvolvimento rápido que reduz o tempo necessário para sincronizar suas alterações locais com a nuvem para testes e validação.
nota
O comando sam sync
é recomendado para ambientes de desenvolvimento. Para ambientes de produção, recomendamos usar sam deploy
ou configurar um pipeline de integração e entrega contínuas (CI/CD). Para saber mais, consulte Implantar aplicativos sem servidor.
O comando sam sync
faz parte do AWS SAMAccelerate. AWS SAMAccelerate fornece ferramentas que você pode usar para acelerar a experiência de desenvolvimento e teste de aplicativos sem servidor no Nuvem AWS.
Tópicos
Detecte e sincronize automaticamente as alterações locais no Nuvem AWS
Execute sam sync
com a opção --watch
de começar a sincronizar seu aplicativo com Nuvem AWS. Isso faz o seguinte:
-
Crie seu aplicativo — Esse processo é semelhante ao uso do comando
sam build
. -
Implante seu aplicativo — O AWS SAM CLI implanta seu aplicativo AWS CloudFormation usando suas configurações padrão. Os seguintes valores padrão são usados:
-
Credenciais e configurações gerais AWS encontradas na sua paste de usuário do
.aws
. -
Configurações de implantação do aplicativo encontradas no arquivo do seu aplicativo
samconfig.toml
.
Se os valores padrão não puderem ser encontrados, AWS SAM CLI informará você e sairão do processo de sincronização.
-
-
Observe as alterações locais — O AWS SAM CLI permanece em execução e observa as alterações locais em seu aplicativo. Isso é o que a opção
--watch
oferece.Esta opção pode ser ativada por padrão. Para valores padrão, consulte o arquivo
samconfig.toml
do seu aplicativo. O seguinte é um arquivo de exemplo:... [default.sync] [default.sync.parameters] watch = true ...
-
Sincronize alterações locais com Nuvem AWS — Quando você faz alterações locais, AWS SAM CLI detecta e sincroniza essas alterações no Nuvem AWS usando o método mais rápido disponível. Dependendo do tipo de alteração, o seguinte pode ocorrer:
-
Se seu recurso atualizado for compatível com APIs de serviço AWS, AWS SAM CLI usará isso para implantar suas alterações. Isso resulta em uma sincronização rápida para atualizar seu recurso no Nuvem AWS.
-
Se seu recurso atualizado não oferecer suporte a APIs de serviço AWS, AWS SAM CLI realizará uma AWS CloudFormation implantação. Isso atualiza todo o seu aplicativo no Nuvem AWS. Embora não seja tão rápido, ele evita que você precise iniciar manualmente uma implantação.
-
Como o comando sam sync
atualiza automaticamente seu aplicativo no Nuvem AWS, ele é recomendado somente para ambientes de desenvolvimento. Ao executar sam sync
, você deverá confirmar:
**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
Personalize quais alterações locais são sincronizadas com o Nuvem AWS
Forneça opções para personalizar quais alterações locais são sincronizadas com o Nuvem AWS. Isso pode acelerar o tempo necessário para ver suas alterações locais na nuvem para testes e validação.
Por exemplo, forneça a opção --code
para sincronizar somente alterações de código, como código de função do AWS Lambda. Durante o desenvolvimento, se você se concentrar especificamente no código Lambda, isso colocará suas alterações na nuvem rapidamente para teste e validação. Veja um exemplo a seguir:
$
sam sync --code --watch
Para sincronizar somente alterações de código para uma função ou camada específica do Lambda, use a opção --resource-id
. Veja um exemplo a seguir:
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
Prepare seu aplicativo na nuvem para testes e validação
O comando sam sync
encontra automaticamente o método mais rápido disponível para atualizar seu aplicativo no Nuvem AWS. Isso pode acelerar seus fluxos de trabalho de desenvolvimento e testes na nuvem. Ao utilizar as APIs de serviço AWS, você pode desenvolver, sincronizar e testar rapidamente os recursos compatíveis. Para ver um exemplo prático, consulte o Módulo 6 - AWS SAM Acelerar
Opções para o comando sam sync
A seguir estão algumas das principais opções que você pode usar para modificar o comando sam sync
. Para obter uma lista de todas as opções, consulte sam sync.
Execute uma implantação AWS CloudFormation única
Use a opção --no-watch
para desativar a sincronização automática. Veja um exemplo a seguir:
$
sam sync --no-watch
O AWS SAM CLI realizará uma implantação AWS CloudFormation única. Esse comando agrupa as ações executadas pelos comandos sam build
e sam deploy
.
Ignore a implantação inicial do AWS CloudFormation
Você pode personalizar se uma implantação AWS CloudFormation será necessária sempre que sam sync
for executada.
-
Forneça
--no-skip-deploy-sync
para exigir uma AWS CloudFormation implantação sempre quesam sync
for executado. Isso garante que sua infraestrutura local seja sincronizada com AWS CloudFormation, evitando desvios. Usar essa opção adiciona mais tempo ao seu fluxo de trabalho de desenvolvimento e teste. -
Forneça
--skip-deploy-sync
para tornar a implantação AWS CloudFormation opcional. O AWS SAM CLI comparará seu AWS SAM modelo local com o modelo AWS CloudFormation implantado e ignorará a implantação AWS CloudFormation inicial se uma alteração não for detectada. Ignorar a implantação AWS CloudFormation pode economizar seu tempo ao sincronizar alterações locais com o Nuvem AWS.Se nenhuma alteração for detectada, o AWS SAM CLI ainda realizará uma implantação AWS CloudFormation nos seguintes cenários:
-
Se já passaram 7 dias ou mais desde sua última implantação AWS CloudFormation.
-
Se um grande número de alterações no código da função do Lambda for detectado, a implantação AWS CloudFormation será o método mais rápido para atualizar seu aplicativo.
-
Veja um exemplo a seguir:
$
sam sync --skip-deploy-sync
Sincronizar um recurso a partir de uma pilha aninhada
Para sincronizar um recurso a partir de uma pilha aninhada
-
Forneça a pilha raiz usando
--stack-name
. -
Identifique o recurso na pilha aninhada usando o seguinte formato:
.nestedStackId/resourceId
-
Forneça o recurso na pilha aninhada usando
--resource-id
.Veja um exemplo a seguir:
$
sam sync --code --stack-name
sam-app
--resource-idmyNestedStack/HelloWorldFunction
Para mais informações sobre a criação de aplicativos aninhados, consulte Como usar aplicativos aninhados.
Especifique uma pilha AWS CloudFormation específica para atualizar
Para especificar uma pilha AWS CloudFormation específica a ser atualizada, forneça a opção --stack-name
. Veja um exemplo a seguir:
$
sam sync --stack-name
dev-sam-app
Acelere os tempos de compilação criando seu projeto na pasta de origem
Para runtimes e métodos de compilação compatíveis, você pode usar a opção --build-in-source
de criar seu projeto diretamente na pasta de origem. Por padrão, o AWS SAM CLI compila em um diretório temporário, o que envolve a cópia do código-fonte e dos arquivos do projeto. Com --build-in-source
, o AWS SAM CLI compila diretamente na sua pasta de origem, o que acelera o processo de compilação ao eliminar a necessidade de copiar arquivos para um diretório temporário.
Para ver uma lista de runtimes compatíveis, consulte
--build-in-source
.
Especifique arquivos e pastas que não iniciarão uma sincronização
Use a opção --watch-exclude
para especificar qualquer arquivo ou pasta que não iniciará uma sincronização quando atualizado. Para obter mais informações sobre essa opção, consulte --watch-exclude
.
Veja a seguir um exemplo que exclui o arquivo associado package-lock.json
à nossa função HelloWorldFunction
:
$
sam sync --watch --watch-exclude
HelloWorldFunction=package-lock.json
Quando esse comando for executado, o AWS SAM CLI iniciará o processo de sincronização. Essa transmissão inclui o seguinte:
-
Execute
sam build
para criar suas funções e preparar seu aplicativo para a implantação. -
Execute
sam deploy
para implantar seu aplicativo. -
Fique atento às alterações em seu aplicativo.
Quando modificamos o arquivo package-lock.json
, o AWS SAM CLI não iniciará uma sincronização. Quando outro arquivo for atualizado, o AWS SAM CLI iniciará uma sincronização, que incluirá o arquivo package-lock.json
.
Veja a seguir um exemplo de especificação de uma função do Lambda de uma pilha filho:
$
sam sync --watch --watch-exclude
ChildStackA/MyFunction=database.sqlite3
Solução de problemas
Para solucionar problemas do AWS SAM CLI, consulte AWS SAM CLI solução de problemas.
Exemplos
Usando o sam sync para atualizar o aplicativo Hello World
Neste exemplo, começamos inicializando a amostra do aplicativo Hello World. Para saber mais sobre este aplicativo, consulte Tutorial: Implantando um aplicativo Hello World.
Executar sam sync
inicia o processo de criação e implantação.
$
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.
Quando a implantação estiver concluída, modificamos o código HelloWorldFunction
. AWS SAM CLI detecta essa alteração e sincroniza nosso aplicativo com o Nuvem AWS. Como AWS Lambda é compatível com APIs de serviço AWS, uma sincronização rápida é executada.
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.
Em seguida, modificamos nosso endpoint de API no modelo AWS SAM do aplicativo. Nós mudamos /hello
para /helloworld
.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: ... Properties: ... Events: HelloWorld: Type: Api Properties: Path:
/helloworld
Method: get
Como o recurso Amazon API Gateway não é compatível com a API de serviço AWS, AWS SAM CLI executa automaticamente uma implantação AWS CloudFormation. Veja a seguir um exemplo de saída:
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.
Saiba mais
Para obter uma descrição de todas as opções sam sync
, consulte sam sync.