Présentation de l'utilisation sam sync de la synchronisation avec AWS Cloud - AWS Serverless Application Model

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.

Présentation de l'utilisation sam sync de la synchronisation avec AWS Cloud

La AWS Serverless Application Model commande Command Line Interface (AWS SAMCLI) 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 :

  1. Détectez et synchronisez automatiquement les modifications locales apportées au AWS Cloud.

  2. Personnaliser les modifications locales qui sont synchronisées avec le AWS Cloud.

  3. 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, veuillez consulter la section 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.

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 :

  1. Créer votre application : ce processus est similaire à l'utilisation de la commande sam build.

  2. Déployer votre application : la CLI  AWS SAM déploie votre application sur AWS CloudFormation en utilisant vos paramètres par défaut. Les valeurs par défaut suivantes sont utilisées :

    1. AWS les informations d'identification et les paramètres de configuration généraux se trouvent dans votre dossier .aws utilisateur.

    2. Les paramètres de déploiement de l'application se trouvent dans le fichier samconfig.toml de votre application.

    Si les valeurs par défaut sont introuvables, la CLI  AWS SAM vous en informera et quittera le processus de synchronisation.

  3. Surveiller les modifications locales : la CLI  AWS SAM continue de fonctionner 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 ...
  4. Synchroniser les modifications locales avec le AWS Cloud — Lorsque vous apportez des modifications locales, les AWS SAMCLI détecte et les synchronise 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 :

    1. Si votre ressource mise à jour prend en charge les API de AWS service, elle les AWS SAMCLI utilisera pour déployer vos modifications. Il en résulte une synchronisation rapide pour mettre à jour votre ressource dans le AWS Cloud.

    2. Si votre ressource mise à jour ne prend pas en charge les API de AWS service, elle AWS SAMCLI 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'--codeoption 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-id HelloWorldLayer

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 les API de AWS service, 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 dans The Complete AWS SAM Workshop.

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

Ils AWS SAMCLI effectueront 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. Il AWS SAMCLI 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 Cloud

    Si aucune modification n'est détectée, le AWS CloudFormation déploiement AWS SAMCLI sera tout de même effectué 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
  1. Fournissez la pile racine en utilisant --stack-name.

  2. Identifiez la ressource dans la pile imbriquée en utilisant le format suivant : nestedStackId/resourceId.

  3. Fournissez la ressource dans la pile imbriquée en utilisant --resource-id.

    Voici un exemple :

    $ sam sync --code --stack-name sam-app --resource-id myNestedStack/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-nameoption. 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, il est AWS SAM CLI compilé dans un répertoire temporaire, ce qui implique de copier le code source et les fichiers de projet. Avec--build-in-source, les AWS SAM CLI builds se trouvent directement dans votre dossier source, ce qui accélère le processus de compilation 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, le processus de synchronisation AWS SAM CLI sera lancé. 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 modifierons le package-lock.json fichier, aucune synchronisation AWS SAM CLI ne sera lancée. Lorsqu'un autre fichier est mis à jour, une synchronisation AWS SAM CLI sera lancée, 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 SAMCLI, voirRésolution des problèmes de la CLI AWS SAM.

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

Une fois le déploiement terminé, nous modifions le code HelloWorldFunction. AWS SAMCLIDétecte cette modification et synchronise notre application avec le AWS Cloud. Étant donné qu'il AWS Lambda prend en charge les API de AWS service, 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, elle effectue AWS SAMCLI 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-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.

En savoir plus

Pour obtenir une description de toutes les options sam sync, consulter sam sync.