Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Initiation à l'utilisation sam sync pour synchroniser avec AWS Cloud
L'interface AWS Serverless Application Model de ligne de commande (AWS SAM CLI) sam sync
fournit des options permettant de synchroniser rapidement les modifications apportées aux applications locales avec AWS Cloud. Utiliser sam sync
lors du développement de vos applications pour :
-
Détectez et synchronisez automatiquement les modifications locales apportées au AWS Cloud.
-
Personnaliser les modifications locales qui sont synchronisées avec le AWS Cloud.
-
Préparer votre application dans le cloud pour les tests et la validation.
Avec sam sync
, vous pouvez créer un flux de travail de développement rapide qui réduit le temps nécessaire à la synchronisation de vos modifications locales avec le cloud pour les tester et les valider.
Note
La commande sam sync
est recommandée pour les environnements de développement. Pour les environnements de production, nous vous recommandons d'utiliser sam deploy
ou de configurer un pipeline d'intégration et de livraison continues (CI/CD). Pour en savoir plus, consultez Déployez votre application et vos ressources avec AWS SAM.
La sam sync
commande fait partie de AWS SAM Accelerate. AWS SAM Acceleratefournit des outils que vous pouvez utiliser pour accélérer l'expérience de développement et de test d'applications sans serveur dans le AWS Cloud.
Rubriques
Détectez et synchronisez automatiquement les modifications locales apportées au AWS Cloud
Exécutez sam sync
avec l'option --watch
pour commencer à synchroniser votre application avec le AWS Cloud. Cela effectue les opérations suivantes :
-
Créer votre application : ce processus est similaire à l'utilisation de la commande
sam build
. -
Déployez votre application — Le AWS SAM CLI déploie votre application à l' AWS CloudFormation aide de vos paramètres par défaut. Les valeurs par défaut suivantes sont utilisées :
-
AWS les informations d'identification et les paramètres de configuration généraux se trouvent dans votre dossier
.aws
utilisateur. -
Les paramètres de déploiement de l'application se trouvent dans le fichier
samconfig.toml
de votre application.
Si aucune valeur par défaut ne peut être trouvée, AWS SAM CLI vous informera et quittera le processus de synchronisation.
-
-
Surveillez les changements locaux — Le AWS SAM CLI reste en cours d'exécution et surveille les modifications locales apportées à votre application. C'est ce que permet l'option
--watch
.Cette option peut être activée par défaut. Pour les valeurs par défaut, consultez le fichier
samconfig.toml
de votre application. Voici un exemple de fichier de :... [default.sync] [default.sync.parameters] watch = true ...
-
Synchroniser les modifications locales avec AWS Cloud — Lorsque vous apportez des modifications locales, AWS SAM CLI détecte et synchronise ces modifications AWS Cloud par le biais de la méthode la plus rapide disponible. Selon le type de modification, les éléments suivants peuvent se produire :
-
Si votre ressource mise à jour prend en charge le AWS service APIs, AWS SAM CLI l'utilisera pour déployer vos modifications. Il en résulte une synchronisation rapide pour mettre à jour votre ressource dans le AWS Cloud.
-
Si votre ressource mise à jour ne prend pas en charge le AWS service APIs, AWS SAM CLI effectuera un AWS CloudFormation déploiement. Cela met à jour l'intégralité de votre application dans le AWS Cloud. Bien que cela ne soit pas aussi rapide, cela vous évite d'avoir à lancer manuellement un déploiement.
-
Étant donné que la sam sync
commande met automatiquement à jour votre application dans le AWS Cloud, elle est recommandée uniquement pour les environnements de développement. Lorsque vous exécutez sam sync
, il vous sera demandé de confirmer :
**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
Personnalisez les modifications locales qui sont synchronisées avec AWS Cloud
Fournissez des options pour personnaliser les modifications locales synchronisées avec le AWS Cloud. Cela peut accélérer le temps nécessaire pour que vos modifications locales soient visibles dans le cloud en vue d'être testées et validées.
Par exemple, offrez l'--code
option permettant de synchroniser uniquement les modifications de code, telles que le code de AWS Lambda fonction. Pendant le développement, si vous vous concentrez spécifiquement sur le code Lambda, vos modifications seront rapidement transférées dans le cloud pour les tester et les valider. Voici un exemple :
$
sam sync --code --watch
Pour synchroniser uniquement les modifications de code pour une fonction ou une couche Lambda spécifique, utilisez l'option --resource-id
. Voici un exemple :
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
Préparer votre application dans le cloud pour les tests et la validation
La commande sam sync
trouve automatiquement la méthode la plus rapide disponible pour mettre à jour votre application dans le AWS Cloud. Cela peut accélérer vos flux de travail de développement et de test dans le cloud. En utilisant le AWS service APIs, vous pouvez développer, synchroniser et tester rapidement les ressources prises en charge. Pour un exemple pratique, voir le module 6 - AWS SAM Accélérer
Options pour la commande sam sync
Voici quelques-unes des principales options que vous pouvez utiliser pour modifier la commande sam sync
. Pour obtenir la liste de toutes les options, consultez sam sync.
Effectuez un AWS CloudFormation déploiement ponctuel
Utilisez l'option --no-watch
pour désactiver la synchronisation automatique. Voici un exemple :
$
sam sync --no-watch
Le AWS SAM CLI effectuera un AWS CloudFormation déploiement unique. Cette commande regroupe les actions effectuées par les commandes sam build
et sam deploy
.
Ignorer le AWS CloudFormation déploiement initial
Vous pouvez déterminer si un AWS CloudFormation déploiement est requis à sam sync
chaque exécution.
-
Indiquez
--no-skip-deploy-sync
d'exiger un AWS CloudFormation déploiement àsam sync
chaque exécution. Cela garantit que votre infrastructure locale est synchronisée avec AWS CloudFormation, évitant ainsi toute dérive. L'utilisation de cette option ajoute du temps à votre flux de travail de développement et de test. -
Indiquez
--skip-deploy-sync
pour rendre AWS CloudFormation le déploiement facultatif. Le AWS SAM CLI comparera votre AWS SAM modèle local avec votre AWS CloudFormation modèle déployé et ignorera le AWS CloudFormation déploiement initial si aucune modification n'est détectée. Le fait de sauter AWS CloudFormation le déploiement peut vous faire gagner du temps lors de la synchronisation des modifications locales apportées au. AWS CloudSi aucun changement n'est détecté, AWS SAM CLI effectuera toujours un AWS CloudFormation déploiement dans les scénarios suivants :
-
Si 7 jours ou plus se sont écoulés depuis votre dernier AWS CloudFormation déploiement.
-
Si un grand nombre de modifications du code de fonction Lambda sont détectées, le AWS CloudFormation déploiement est la méthode la plus rapide pour mettre à jour votre application.
-
Voici un exemple :
$
sam sync --skip-deploy-sync
Synchroniser une ressource à partir d'une pile imbriquée
Pour synchroniser une ressource à partir d'une pile imbriquée
-
Fournissez la pile racine en utilisant
--stack-name
. -
Identifiez la ressource dans la pile imbriquée en utilisant le format suivant :
.nestedStackId/resourceId
-
Fournissez la ressource dans la pile imbriquée en utilisant
--resource-id
.Voici un exemple :
$
sam sync --code --stack-name
sam-app
--resource-idmyNestedStack/HelloWorldFunction
Pour plus d'informations sur la création des applications imbriquées, consultez Réutilisez le code et les ressources à l'aide d'applications imbriquées dans AWS SAM.
Spécifiez une AWS CloudFormation pile spécifique à mettre à jour
Pour spécifier une AWS CloudFormation pile spécifique à mettre à jour, indiquez l'--stack-name
option. Voici un exemple :
$
sam sync --stack-name
dev-sam-app
Accélérez les temps de création en créant votre projet dans le dossier source
Pour les systèmes d'exécution et les méthodes de création pris en charge, vous pouvez utiliser l'option --build-in-source
permettant de créer votre projet directement dans le dossier source. Par défaut, le AWS SAM CLI se construit dans un répertoire temporaire, ce qui implique de copier le code source et les fichiers de projet. Avec--build-in-source
, le AWS SAM CLI se construit directement dans votre dossier source, ce qui accélère le processus de génération en supprimant le besoin de copier des fichiers dans un répertoire temporaire.
Pour obtenir une liste des systèmes d’exécution ainsi que des méthodes de création pris en charge, consultez
--build-in-source
.
Spécifiez les fichiers et les dossiers qui ne lanceront pas une synchronisation
Utilisez l’option --watch-exclude
pour spécifier tout fichier ou dossier qui ne lancera pas une synchronisation lors de la mise à jour. Pour plus d’informations sur cette option, consultez --watch-exclude
.
Voici un exemple qui exclut le fichier package-lock.json
associé à notre fonction HelloWorldFunction
:
$
sam sync --watch --watch-exclude
HelloWorldFunction=package-lock.json
Lorsque cette commande est exécutée, AWS SAM CLI lancera le processus de synchronisation. Cela inclut les éléments suivants :
-
exécutez
sam build
pour créer vos fonctions et préparer votre application pour le déploiement. -
exécutez
sam deploy
pour déployer votre application. -
surveillez les changements apportées à votre application.
Lorsque nous modifions le package-lock.json
fichier, AWS SAM CLI ne lancera pas de synchronisation. Lorsqu'un autre fichier est mis à jour, AWS SAM CLI lancera une synchronisation, qui inclura le package-lock.json
fichier.
Voici un exemple de spécification de fonction Lambda d’une pile enfant :
$
sam sync --watch --watch-exclude
ChildStackA/MyFunction=database.sqlite3
Résolution des problèmes
Pour résoudre le problème AWS SAM CLI, voir AWS SAM CLI Résolution des problèmes de la .
Exemples
Utiliser sam sync pour mettre à jour l'application Hello World
Dans cet exemple, nous commençons par initialiser l'exemple d'application Hello World. Pour en savoir plus sur cette application, consultez Tutoriel : Déployer une application Hello World avec AWS SAM.
L'exécution de la commande sam sync
lance le processus de création et de déploiement.
$
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.
Une fois le déploiement terminé, nous modifions le code HelloWorldFunction
. Le AWS SAM CLI détecte cette modification et synchronise notre application avec le AWS Cloud. Étant donné que AWS le service est AWS Lambda compatible APIs, une synchronisation rapide est effectuée.
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.
Ensuite, nous modifions notre point de terminaison d'API dans le AWS SAM modèle de l'application. Nous modifions /hello
pour /helloworld
.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: ... Properties: ... Events: HelloWorld: Type: Api Properties: Path:
/helloworld
Method: get
Étant donné que la ressource Amazon API Gateway ne prend pas en charge l'API du AWS service, le AWS SAM CLI effectue automatiquement un AWS CloudFormation déploiement. Voici un exemple de résultat :
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.
En savoir plus
Pour obtenir une description de toutes les options sam sync
, consulter sam sync.