Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Introducción al uso sam sync sincronizar con Nube de AWS
La interfaz de línea de AWS Serverless Application Model comandos (AWS SAM CLI) sam sync
el comando) proporciona opciones para sincronizar rápidamente los cambios de la aplicación local con el Nube de AWS. Utiliza sam sync
al desarrollar sus aplicaciones para:
-
Detecta y sincroniza automáticamente los cambios locales en Nube de AWS.
-
Personalizar los cambios locales que se sincronizan con la Nube de AWS.
-
Preparar tu aplicación en la nube para probarla y validarla.
Con sam sync
, puede crear un flujo de trabajo de desarrollo rápido que reduzca el tiempo necesario para sincronizar los cambios locales con la nube para realizar pruebas y validaciones.
nota
Se recomienda usar el comando sam sync
para entornos de desarrollo. Para los entornos de producción, recomendamos usar sam deploy
o configurar una canalización de integración y entrega continuas (CI/CD). Para obtener más información, consulte Implementa tu aplicación y tus recursos con AWS SAM.
El sam sync
comando forma parte de AWS SAM Accelerate. AWS SAM Accelerateproporciona herramientas que puede utilizar para acelerar la experiencia de desarrollo y prueba de aplicaciones sin servidor en. Nube de AWS
Temas
Detecte y sincronice automáticamente los cambios locales en el Nube de AWS
Ejecute sam sync
con la opción --watch
para comenzar a sincronizar tu aplicación con la Nube de AWS. Esto hace lo siguiente:
-
Crear tu aplicación: este proceso es similar a usar el comando
sam build
. -
Implemente su aplicación: la AWS SAM CLI despliega la aplicación AWS CloudFormation utilizando la configuración predeterminada. Se usan los siguientes valores predeterminados:
-
AWS las credenciales y los ajustes de configuración generales que se encuentran en la carpeta
.aws
de usuario. -
La configuración de implementación de la aplicación se encuentra en el archivo
samconfig.toml
de la aplicación.
Si no se encuentran los valores predeterminados, el AWS SAM CLI le informará y saldrá del proceso de sincronización.
-
-
Esté atento a los cambios locales: los AWS SAM CLI sigue ejecutándose y vigila los cambios locales en la aplicación. Esto es lo que ofrece la opción
--watch
.Esta opción puede que esté activada de forma predeterminada. Para ver los valores predeterminados, consulta el archivo
samconfig.toml
de tu aplicación. A continuación se muestra un ejemplo de un archivo:... [default.sync] [default.sync.parameters] watch = true ...
-
Sincronice los cambios locales con el Nube de AWS: cuando realiza cambios locales, el AWS SAM CLI detecta y sincroniza esos cambios Nube de AWS mediante el método más rápido disponible. Según el tipo de cambio, puede ocurrir lo siguiente:
-
Si su recurso actualizado es compatible con el AWS servicioAPIs, el AWS SAM CLI lo usará para implementar los cambios. Esto da como resultado una sincronización rápida para actualizar el recurso en la Nube de AWS.
-
Si el recurso actualizado no es compatible con el AWS servicioAPIs, el AWS SAM CLI realizará una AWS CloudFormation implementación. Esto actualiza toda la aplicación en la Nube de AWS. Si bien no es tan rápido, evita que tenga que iniciar una implementación manualmente.
-
Dado que el sam sync
comando actualiza automáticamente la aplicación en el Nube de AWS, solo se recomienda su uso en entornos de desarrollo. Cuando ejecuta sam sync
, se le pedirá que confirme:
**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
Personalice los cambios locales que se sincronizan con el Nube de AWS
Proporcionar opciones para personalizar los cambios locales que se sincronizan con la Nube de AWS. Esto puede acelerar el tiempo que se tarda en ver los cambios locales en la nube para probarlos y validarlos.
Por ejemplo, ofrezca la --code
opción de sincronizar solo los cambios de código, como el código de AWS Lambda función. Durante el desarrollo, si se centra específicamente en el código Lambda, sus cambios llegarán rápidamente a la nube para probarlos y validarlos. A continuación, se muestra un ejemplo:
$
sam sync --code --watch
Para sincronizar solo los cambios de código de una función o capa de Lambda específica, utiliza la opción --resource-id
. A continuación, se muestra un ejemplo:
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
Preparar tu aplicación en la nube para probarla y validarla.
El comando sam sync
busca automáticamente el método más rápido disponible para actualizar la aplicación en la Nube de AWS. Esto puede acelerar sus flujos de trabajo de desarrollo y pruebas en la nube. Al utilizar el AWS servicioAPIs, puede desarrollar, sincronizar y probar rápidamente los recursos compatibles. Para ver un ejemplo práctico, consulte el Módulo 6: AWS SAM Accelerate
Opciones para el comando de sincronización sam
Las siguientes son algunas de las opciones principales que puede utilizar para modificar el comando sam sync
. Para obtener una lista de todas las opciones, consulta sam sync.
Realice un despliegue único AWS CloudFormation
Usa la opción --no-watch
para desactivar la sincronización automática. A continuación, se muestra un ejemplo:
$
sam sync --no-watch
El AWS SAM CLI realizará un AWS CloudFormation despliegue único. Este comando agrupa las acciones realizadas por los comandos sam build
y sam deploy
.
Omita el AWS CloudFormation despliegue inicial
Puede personalizar si se requiere una AWS CloudFormation implementación cada vez que sam sync
se ejecute.
-
Asegúrese
--no-skip-deploy-sync
de requerir una AWS CloudFormation implementación cada vezsam sync
que se ejecute. Esto garantiza que su infraestructura local esté sincronizada AWS CloudFormation, lo que evita desviaciones. El uso de esta opción añade tiempo adicional a su flujo de trabajo de desarrollo y pruebas. -
Proporcione esta opción
--skip-deploy-sync
para que la AWS CloudFormation implementación sea opcional. El AWS SAM CLI comparará la AWS SAM plantilla local con la AWS CloudFormation plantilla desplegada y se saltará la AWS CloudFormation implementación inicial si no se detecta ningún cambio. Omitir la AWS CloudFormation implementación puede ahorrarle tiempo a la hora de sincronizar los cambios locales con la. Nube de AWSSi no se detecta ningún cambio, el AWS SAM CLI seguirá realizando un AWS CloudFormation despliegue en los siguientes escenarios:
-
Si han pasado 7 días o más desde la última AWS CloudFormation implementación.
-
Si se detecta una gran cantidad de cambios en el código de la función Lambda, la AWS CloudFormation implementación es el método más rápido para actualizar la aplicación.
-
A continuación, se muestra un ejemplo:
$
sam sync --skip-deploy-sync
Sincronice un recurso de una pila anidada
Para sincronizar un recurso de una pila anidada
-
Proporciona la pila raíz utilizando
--stack-name
. -
Identifique el recurso en la pila anidada con el siguiente formato:
.nestedStackId/resourceId
-
Proporciona el recurso en la pila anidada usando
--resource-id
.A continuación, se muestra un ejemplo:
$
sam sync --code --stack-name
sam-app
--resource-idmyNestedStack/HelloWorldFunction
Para obtener más información sobre cómo crear aplicaciones anidadas, consulta Reutilice el código y los recursos mediante aplicaciones anidadas en AWS SAM.
Especifique una AWS CloudFormation pila específica para actualizarla
Para especificar una AWS CloudFormation pila específica para actualizarla, proporciona la --stack-name
opción. A continuación, se muestra un ejemplo:
$
sam sync --stack-name
dev-sam-app
Acelere los tiempos de compilación al compilar el proyecto en la carpeta de origen
Para consultar los tiempos de ejecución y los métodos de compilación compatibles, puedes usar la opción de --build-in-source
para compilar el proyecto directamente en la carpeta de origen. De forma predeterminada, el AWS SAM CLI se crea en un directorio temporal, lo que implica copiar el código fuente y los archivos del proyecto. Con--build-in-source
, el AWS SAM CLI crea directamente en la carpeta de origen, lo que acelera el proceso de compilación al eliminar la necesidad de copiar los archivos a un directorio temporal.
Para obtener una lista de tiempos de ejecución y métodos de compilación compatibles, consulta
--build-in-source
.
Especificar archivos y carpetas que no iniciarán una sincronización
Utiliza la opción --watch-exclude
para especificar cualquier archivo o carpeta que no iniciará una sincronización cuando se actualice. Para obtener más información acerca de esta opción, consulta --watch-exclude
.
El siguiente es un ejemplo que excluye el archivo package-lock.json
asociado a nuestra función de HelloWorldFunction
:
$
sam sync --watch --watch-exclude
HelloWorldFunction=package-lock.json
Cuando se ejecuta este comando, el AWS SAM CLI iniciará el proceso de sincronización. Esta incluye lo siguiente:
-
Ejecute
sam build
para crear las funciones y preparar la aplicación para la implementación. -
Ejecute
sam deploy
para implementar la aplicación. -
Esté atento a los cambios en la aplicación.
Cuando modifiquemos el package-lock.json
archivo, el AWS SAM CLI no iniciará una sincronización. Cuando se actualiza otro archivo, el AWS SAM CLI iniciará una sincronización, que incluirá el package-lock.json
archivo.
El siguiente es un ejemplo de cómo especificar una función de Lambda de una pila secundaria:
$
sam sync --watch --watch-exclude
ChildStackA/MyFunction=database.sqlite3
Resolución de problemas
Para solucionar los problemas de AWS SAM CLI, consulte Solución de problemas para AWS SAM CLI.
Ejemplos
Uso de sam sync para actualizar la aplicación Hello World
En este ejemplo, empezamos inicializando la aplicación de muestra Hello World. Para obtener más información sobre esta aplicación, consulta Tutorial: Implemente una aplicación Hello World con AWS SAM.
Ejecutar sam sync
inicia el proceso de creación e implementación.
$
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.
Una vez completada la implementación, modificamos el código HelloWorldFunction
. El AWS SAM CLI detecta este cambio y sincroniza nuestra aplicación con. Nube de AWS Como AWS Lambda es compatible con APIs el AWS servicio, se realiza una sincronización rápida.
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.
A continuación, modificamos nuestro API punto final en la AWS SAM plantilla de la aplicación. Cambiamos /hello
por /helloworld
.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: ... Properties: ... Events: HelloWorld: Type: Api Properties: Path:
/helloworld
Method: get
Como el recurso de Amazon API Gateway no es compatible con el AWS servicioAPI, AWS SAM CLI realiza automáticamente un AWS CloudFormation despliegue. El siguiente es un ejemplo de output:
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.
Más información
Para ver una descripción de las opciones de sam sync
, consulta sam sync.