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á.
Introdução ao uso sam sync para sincronizar com Nuvem AWS
A interface de linha de AWS Serverless Application Model comando (AWS SAM CLIO sam sync
comando) fornece opções para sincronizar rapidamente as alterações do aplicativo local com Nuvem AWS o. Use sam sync
ao desenvolver seus aplicativos para:
-
Detecte e sincronize automaticamente as alterações locais com Nuvem AWS o.
-
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 a aplicação e os recursos com o AWS SAM.
O sam sync
comando faz parte do AWS SAM Accelerate. AWS SAM Acceleratefornece 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:
-
AWS credenciais e configurações gerais encontradas na sua pasta de
.aws
usuário. -
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, o AWS SAM CLI informará você e sairá do processo de sincronização.
-
-
Fique atento às mudanças 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 ...
-
Sincronizar alterações locais com o Nuvem AWS — Quando você faz alterações locais, o AWS SAM CLI detecta e sincroniza essas alterações com o método Nuvem AWS mais rápido disponível. Dependendo do tipo de alteração, o seguinte pode ocorrer:
-
Se seu recurso atualizado oferecer suporte AWS ao serviçoAPIs, o AWS SAM CLI o usará 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 ao AWS serviçoAPIs, o 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 sam sync
comando 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 --code
opção de sincronizar somente alterações de código, como código de AWS Lambda função. 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 o AWS serviçoAPIs, você pode desenvolver, sincronizar e testar rapidamente os recursos suportados. Para ver um exemplo prático, consulte o Módulo 6 - AWS SAM Acelere
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 única AWS CloudFormation
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 AWS CloudFormation implantação única. Esse comando agrupa as ações executadas pelos comandos sam build
e sam deploy
.
Ignore a implantação inicial AWS CloudFormation
Você pode personalizar se uma AWS CloudFormation implantação é necessária sempre que sam sync
for executada.
-
--no-skip-deploy-sync
Forneça a exigência de uma AWS CloudFormation implantação sempre quesam sync
for executada. Isso garante que sua infraestrutura local seja sincronizada 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 AWS CloudFormation a implantação opcional. O AWS SAM CLI comparará seu AWS SAM modelo local com o AWS CloudFormation modelo implantado e ignorará a AWS CloudFormation implantação inicial se uma alteração não for detectada. Ignorar a AWS CloudFormation implantação pode economizar seu tempo ao sincronizar alterações locais com o. Nuvem AWSSe nenhuma alteração for detectada, o AWS SAM CLI ainda realizará uma AWS CloudFormation implantação nos seguintes cenários:
-
Se já passaram 7 dias ou mais desde sua última AWS CloudFormation implantação.
-
Se um grande número de alterações no código da função Lambda for detectado, a AWS CloudFormation implantação 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 Reutilizar código e recursos usando aplicações aninhadas no AWS SAM.
Especifique uma AWS CloudFormation pilha específica para atualizar
Para especificar uma AWS CloudFormation pilha específica a ser atualizada, forneça a --stack-name
opção. 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 constrói em um diretório temporário, 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 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 é 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 package-lock.json
arquivo, o AWS SAM CLI não iniciará uma sincronização. Quando outro arquivo é atualizado, o AWS SAM CLI iniciará uma sincronização, que incluirá o package-lock.json
arquivo.
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 o problema 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: implante um aplicativo Hello World com AWS SAM.
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-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.
Quando a implantação estiver concluída, modificamos o código HelloWorldFunction
. O AWS SAM CLI detecta essa alteração e sincroniza nosso aplicativo com o. Nuvem AWS Como o AWS serviço de AWS Lambda suporteAPIs, 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 API endpoint no AWS SAM modelo 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 oferece suporte ao AWS serviçoAPI, o AWS SAM CLI executa automaticamente uma AWS CloudFormation implantação. 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-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.
Saiba mais
Para obter uma descrição de todas as opções sam sync
, consulte sam sync.