Einführung in die Verwendung von sam sync to sync to AWS Cloud - AWS Serverless Application Model

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Einführung in die Verwendung von sam sync to sync to AWS Cloud

Der AWS Serverless Application Model Befehl Command Line Interface (AWS SAMCLI) sam sync bietet Optionen zum schnellen Synchronisieren von lokalen Anwendungsänderungen mit dem AWS Cloud. Verwenden Sie sam sync ihn bei der Entwicklung Ihrer Anwendungen für:

  1. Automatische Erkennung und Synchronisation lokaler Änderungen mit dem AWS Cloud.

  2. Passen Sie an, welche lokalen Änderungen mit dem AWS Cloud synchronisiert werden.

  3. Bereiten Sie Ihre Anwendung in der Cloud für Tests und Validierung vor.

Mit können Sie einen schnellen Entwicklungsworkflow erstellensam sync, der die Zeit verkürzt, die benötigt wird, um Ihre lokalen Änderungen zum Testen und Validieren mit der Cloud zu synchronisieren.

Anmerkung

Der sam sync Befehl wird für Entwicklungsumgebungen empfohlen. Für Produktionsumgebungen empfehlen wir, eine CI/CD-Pipeline (Continuous Integration and Delivery) zu verwenden sam deploy oder zu konfigurieren. Weitere Informationen hierzu finden Sie unter Stellen Sie Ihre Anwendung und Ressourcen bereit mit AWS SAM.

Der sam sync Befehl ist Teil von. AWS SAM Accelerate AWS SAM Acceleratebietet Tools, mit denen Sie das Entwickeln und Testen serverloser Anwendungen in der AWS Cloud beschleunigen können.

Erkennt automatisch lokale Änderungen und synchronisiert sie mit AWS Cloud

Führen Sie sam sync mit der --watch Option aus, mit der Synchronisierung Ihrer Anwendung mit dem AWS Cloud zu beginnen. Dies macht Folgendes:

  1. Erstellen Sie Ihre Anwendung — Dieser Vorgang ähnelt der Verwendung des sam build Befehls.

  2. Stellen Sie Ihre Anwendung bereit — AWS SAMCLI Der stellt Ihre Anwendung AWS CloudFormation unter Verwendung Ihrer Standardeinstellungen bereit. Die folgenden Standardwerte werden verwendet:

    1. AWS Anmeldeinformationen und allgemeine Konfigurationseinstellungen befinden sich in Ihrem .aws Benutzerordner.

    2. Die Einstellungen für die Anwendungsbereitstellung finden Sie in der samconfig.toml Datei Ihrer Anwendung.

    Wenn keine Standardwerte gefunden werden können, werden Sie darüber informiert und der Synchronisierungsvorgang AWS SAMCLI wird beendet.

  3. Achten Sie auf lokale Änderungen — AWS SAMCLI Der läuft weiter und sucht nach lokalen Änderungen an Ihrer Anwendung. Das bietet die --watch Option.

    Diese Option kann standardmäßig aktiviert sein. Standardwerte finden Sie in der samconfig.toml Datei Ihrer Anwendung. Im Folgenden sehen Sie ein Beispiel für eine -Datei:

    ... [default.sync] [default.sync.parameters] watch = true ...
  4. Lokale Änderungen mit dem synchronisieren AWS Cloud — Wenn Sie lokale Änderungen vornehmen, AWS SAMCLI erkennt und synchronisiert der diese Änderungen mit der AWS Cloud schnellsten verfügbaren Methode. Je nach Art der Änderung kann Folgendes passieren:

    1. Wenn Ihre aktualisierte Ressource AWS Service-APIs unterstützt, verwenden AWS SAMCLI sie sie, um Ihre Änderungen bereitzustellen. Dies führt zu einer schnellen Synchronisierung, um Ihre Ressource in der zu aktualisieren AWS Cloud.

    2. Wenn Ihre aktualisierte Ressource keine AWS Service-APIs unterstützt, AWS SAMCLI wird eine AWS CloudFormation Bereitstellung durchgeführt. Dadurch wird Ihre gesamte Anwendung in der aktualisiert AWS Cloud. Es ist zwar nicht so schnell, verhindert aber, dass Sie eine Bereitstellung manuell initiieren müssen.

Da der sam sync Befehl Ihre Anwendung in der automatisch aktualisiert AWS Cloud, wird er nur für Entwicklungsumgebungen empfohlen. Beim Ausführen werden Sie aufgefordertsam sync, Folgendes zu bestätigen:

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

Passen Sie an, welche lokalen Änderungen mit dem synchronisiert werden AWS Cloud

Stellen Sie Optionen bereit, um anzupassen, welche lokalen Änderungen mit dem AWS Cloud synchronisiert werden. Dies kann die Zeit verkürzen, die benötigt wird, um Ihre lokalen Änderungen zum Testen und Validieren in der Cloud zu sehen.

Bieten Sie beispielsweise die --code Option an, nur Codeänderungen wie AWS Lambda Funktionscode zu synchronisieren. Wenn Sie sich während der Entwicklung speziell auf Lambda-Code konzentrieren, werden Ihre Änderungen schnell in die Cloud übertragen, um sie zu testen und zu validieren. Im Folgenden wird ein Beispiel gezeigt:

$ sam sync --code --watch

Verwenden Sie die --resource-id Option, um nur Codeänderungen für eine bestimmte Lambda-Funktion oder -Layer zu synchronisieren. Im Folgenden wird ein Beispiel gezeigt:

$ sam sync --code --resource-id HelloWorldFunction --resource-id HelloWorldLayer

Bereiten Sie Ihre Anwendung in der Cloud für Tests und Validierung vor

Der sam sync Befehl findet automatisch die schnellste verfügbare Methode zum Aktualisieren Ihrer Anwendung in der AWS Cloud. Dies kann Ihre Entwicklungs- und Cloud-Test-Workflows beschleunigen. Mithilfe von AWS Service-APIs können Sie unterstützte Ressourcen schnell entwickeln, synchronisieren und testen. Ein praktisches Beispiel finden Sie in Modul 6 — AWS SAM Accelerate in The Complete AWS SAM Workshop.

Optionen für den Befehl sam sync

Im Folgenden sind einige der wichtigsten Optionen aufgeführt, mit denen Sie den sam sync Befehl ändern können. Eine Liste aller Optionen finden Sie untersam sync.

Führen Sie eine einmalige AWS CloudFormation Bereitstellung durch

Verwenden Sie die --no-watch Option, um die automatische Synchronisierung auszuschalten. Im Folgenden wird ein Beispiel gezeigt:

$ sam sync --no-watch

Der AWS SAMCLI führt eine einmalige AWS CloudFormation Bereitstellung durch. Dieser Befehl gruppiert die Aktionen, die mit den sam deploy Befehlen sam build und ausgeführt werden.

Überspringen Sie die erste AWS CloudFormation Bereitstellung

Sie können anpassen, ob bei jeder Ausführung eine AWS CloudFormation Bereitstellung erforderlich sam sync ist.

  • Geben Sie --no-skip-deploy-sync an, dass bei jeder Ausführung eine AWS CloudFormation Bereitstellung erforderlich sam sync ist. Dadurch wird sichergestellt, dass Ihre lokale Infrastruktur synchronisiert ist AWS CloudFormation, sodass Abweichungen vermieden werden. Die Verwendung dieser Option verlängert Ihren Entwicklungs- und Test-Workflow um zusätzliche Zeit.

  • Geben Sie --skip-deploy-sync an, dass die AWS CloudFormation Bereitstellung optional ist. Das vergleicht AWS SAMCLI Ihre lokale AWS SAM Vorlage mit Ihrer bereitgestellten AWS CloudFormation Vorlage und überspringt die erste AWS CloudFormation Bereitstellung, wenn keine Änderung festgestellt wird. Wenn Sie die AWS CloudFormation Bereitstellung überspringen, können Sie Zeit sparen, wenn Sie lokale Änderungen mit dem synchronisieren. AWS Cloud

    Wenn keine Änderung festgestellt AWS SAMCLI wird, führt der in den folgenden Szenarien dennoch eine AWS CloudFormation Bereitstellung durch:

    • Wenn seit Ihrer letzten AWS CloudFormation Bereitstellung 7 Tage oder mehr vergangen sind.

    • Wenn eine große Anzahl von Änderungen am Lambda-Funktionscode erkannt wird, ist die AWS CloudFormation Bereitstellung die schnellste Methode, um Ihre Anwendung zu aktualisieren.

Im Folgenden wird ein Beispiel gezeigt:

$ sam sync --skip-deploy-sync

Synchronisieren Sie eine Ressource aus einem verschachtelten Stack

Um eine Ressource aus einem verschachtelten Stapel zu synchronisieren
  1. Stellen Sie den Root-Stack bereit mit--stack-name.

  2. Identifizieren Sie die Ressource im verschachtelten Stapel im folgenden Format:nestedStackId/resourceId.

  3. Stellen Sie die Ressource im verschachtelten Stapel bereit mit. --resource-id

    Im Folgenden wird ein Beispiel gezeigt:

    $ sam sync --code --stack-name sam-app --resource-id myNestedStack/HelloWorldFunction

Weitere Informationen zum Erstellen verschachtelter Anwendungen finden Sie unter. Verwenden Sie Code und Ressourcen mithilfe verschachtelter Anwendungen in AWS SAM

Geben Sie einen bestimmten AWS CloudFormation Stack an, der aktualisiert werden soll

Um einen bestimmten AWS CloudFormation Stack für die Aktualisierung anzugeben, geben Sie die --stack-name Option an. Im Folgenden wird ein Beispiel gezeigt:

$ sam sync --stack-name dev-sam-app

Beschleunigen Sie die Build-Zeiten, indem Sie Ihr Projekt im Quellordner erstellen

Für unterstützte Laufzeiten und Build-Methoden können Sie die --build-in-source Option verwenden, um Ihr Projekt direkt im Quellordner zu erstellen. Standardmäßig werden die AWS SAM CLI Builds in einem temporären Verzeichnis gespeichert, was das Kopieren von Quellcode und Projektdateien beinhaltet. Damit befinden --build-in-source sich die AWS SAM CLI Builds direkt in Ihrem Quellordner, was den Build-Prozess beschleunigt, da keine Dateien mehr in ein temporäres Verzeichnis kopiert werden müssen.

Eine Liste der unterstützten Laufzeiten und Build-Methoden finden Sie unter --build-in-source.

Geben Sie Dateien und Ordner an, die keine Synchronisierung initiieren

Verwenden Sie die --watch-exclude Option, um Dateien oder Ordner anzugeben, die oder die bei der Aktualisierung keine Synchronisierung initiieren. Weitere Informationen zu dieser Option finden Sie unter --watch-exclude.

Im Folgenden finden Sie ein Beispiel, das die mit unserer HelloWorldFunction Funktion verknüpfte package-lock.json Datei ausschließt:

$ sam sync --watch --watch-exclude HelloWorldFunction=package-lock.json

Wenn dieser Befehl ausgeführt wird, AWS SAM CLI wird der Synchronisierungsvorgang initiiert. Diese umfasst die folgenden Funktionen:

  • Führen Sie sam build das Programm aus, um Ihre Funktionen zu erstellen und Ihre Anwendung für die Bereitstellung vorzubereiten.

  • Führen Sie sam deploy den Befehl aus, um Ihre Anwendung bereitzustellen.

  • Achten Sie auf Änderungen an Ihrer Anwendung.

Wenn wir die package-lock.json Datei ändern, AWS SAM CLI wird keine Synchronisierung initiiert. Wenn eine andere Datei aktualisiert wird, AWS SAM CLI wird eine Synchronisierung initiiert, die die package-lock.json Datei einschließt.

Das Folgende ist ein Beispiel für die Angabe einer Lambda-Funktion eines untergeordneten Stacks:

$ sam sync --watch --watch-exclude ChildStackA/MyFunction=database.sqlite3

Fehlerbehebung

Informationen zur Problembehandlung bei finden Sie unterAWS SAMCLIProblembehandlung. AWS SAMCLI

Beispiele

Verwenden von Sam Sync zur Aktualisierung der Hello World-Anwendung

In diesem Beispiel beginnen wir mit der Initialisierung der Hello World-Beispielanwendung. Weitere Informationen zu dieser Anwendung finden Sie unterTutorial: Eine Hello World-Anwendung bereitstellen.

Mit der Ausführung sam sync wird der Build- und Bereitstellungsprozess gestartet.

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

Sobald die Bereitstellung abgeschlossen ist, ändern wir den HelloWorldFunction Code. Der AWS SAMCLI erkennt diese Änderung und synchronisiert unsere Anwendung mit dem AWS Cloud. Da AWS Service-APIs AWS Lambda unterstützt werden, wird eine schnelle Synchronisierung durchgeführt.

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.

Als Nächstes ändern wir unseren API-Endpunkt in der AWS SAM Vorlage der Anwendung. Wir wechseln /hello zu/helloworld.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: ... Properties: ... Events: HelloWorld: Type: Api Properties: Path: /helloworld Method: get

Da die Amazon API Gateway Gateway-Ressource die AWS Service-API nicht unterstützt, führt sie AWS SAMCLI automatisch eine AWS CloudFormation Bereitstellung durch. Im Folgenden finden Sie ein Beispiel für eine Ausgabe:

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.

Weitere Informationen

Eine Beschreibung aller sam sync Optionen finden Sie untersam sync.