Usar o sam sync - AWS Serverless Application Model

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:

  1. Detecte e sincronize automaticamente as alterações locais com o Nuvem AWS.

  2. Personalize quais alterações locais são sincronizadas com o Nuvem AWS.

  3. 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.

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:

  1. Crie seu aplicativo — Esse processo é semelhante ao uso do comando sam build.

  2. 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:

    1. Credenciais e configurações gerais AWS encontradas na sua paste de usuário do .aws.

    2. 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.

  3. 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 ...
  4. 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:

    1. 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.

    2. 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-id HelloWorldLayer

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 no Workshop AWS SAMcompleto.

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 que sam 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
  1. Forneça a pilha raiz usando --stack-name.

  2. Identifique o recurso na pilha aninhada usando o seguinte formato: nestedStackId/resourceId.

  3. Forneça o recurso na pilha aninhada usando --resource-id.

    Veja um exemplo a seguir:

    $ sam sync --code --stack-name sam-app --resource-id myNestedStack/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.