Einführung in die Verwendung sam sync zum Synchronisieren 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 sam sync zum Synchronisieren AWS Cloud

Die AWS Serverless Application Model Befehlszeilenschnittstelle (AWS SAM CLIDer sam sync Befehl) 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 — Die AWS SAM CLI 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, AWS SAM CLI wird Sie informieren und den Synchronisierungsvorgang beenden.

  3. Achten Sie auf lokale Änderungen — Die AWS SAM CLI 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. Synchronisieren Sie lokale Änderungen mit dem AWS Cloud — Wenn Sie lokale Änderungen vornehmen, AWS SAM CLI erkennt und synchronisiert diese Änderungen mit der AWS Cloud schnellsten verfügbaren Methode. Je nach Art der Änderung kann Folgendes passieren:

    1. Wenn Ihre aktualisierte Ressource den AWS Dienst unterstütztAPIs, AWS SAM CLI wird es verwenden, 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 den AWS Dienst nicht unterstütztAPIs, AWS SAM CLI führt eine AWS CloudFormation Bereitstellung durch. 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. Durch die Nutzung des 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

Das AWS SAM CLI 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 AWS SAM CLI vergleicht 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 wird, AWS SAM CLI führt 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 ist der AWS SAM CLI baut in einem temporären Verzeichnis auf, was das Kopieren von Quellcode und Projektdateien beinhaltet. Mit--build-in-source, dem AWS SAM CLI erstellt direkt in Ihrem Quellordner, wodurch der Erstellungsprozess beschleunigt wird, 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, wird AWS SAM CLI initiiert den Synchronisierungsvorgang. 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 initiiert keine Synchronisation. Wenn eine andere Datei aktualisiert wird, AWS SAM CLI initiiert eine Synchronisation, 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

Zur Fehlerbehebung bei AWS SAM CLI, finden Sie unter AWS SAMCLIProblembehandlung.

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: Stellen Sie eine Hello World-Anwendung bereit mit AWS SAM.

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

Sobald die Bereitstellung abgeschlossen ist, ändern wir den HelloWorldFunction Code. Der AWS SAM CLI erkennt diese Änderung und synchronisiert unsere Anwendung mit dem AWS Cloud. Da der AWS Service AWS Lambda unterstützt wirdAPIs, 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-Ressource den AWS Service nicht unterstütztAPI, AWS SAM CLI führt 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-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.

Weitere Informationen

Eine Beschreibung aller sam sync Optionen finden Sie untersam sync.