Introduzione all'uso sam sync con cui sincronizzare Cloud AWS - AWS Serverless Application Model

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Introduzione all'uso sam sync con cui sincronizzare Cloud AWS

L'interfaccia AWS Serverless Application Model a riga di comando (AWS SAM CLIsam syncil comando) fornisce opzioni per sincronizzare rapidamente le modifiche dell'applicazione locale con Cloud AWS. sam syncUtilizzatelo quando sviluppate le vostre applicazioni per:

  1. Rileva e sincronizza automaticamente le modifiche locali su Cloud AWS.

  2. Personalizza le modifiche locali sincronizzate con. Cloud AWS

  3. Prepara la tua applicazione nel cloud per il test e la convalida.

Consam sync, puoi creare un flusso di lavoro di sviluppo rapido che riduce il tempo necessario per sincronizzare le modifiche locali nel cloud per test e convalida.

Nota

Il sam sync comando è consigliato per gli ambienti di sviluppo. Per gli ambienti di produzione, si consiglia di utilizzare sam deploy o configurare una pipeline di integrazione e distribuzione continue (CI/CD). Per ulteriori informazioni, consulta Implementa la tua applicazione e le tue risorse con AWS SAM.

Il sam sync comando fa parte di AWS SAM Accelerate. AWS SAM Acceleratefornisce strumenti che è possibile utilizzare per velocizzare l'esperienza di sviluppo e test di applicazioni serverless in. Cloud AWS

Rileva e sincronizza automaticamente le modifiche locali al Cloud AWS

Esegui sam sync con l'--watchopzione per iniziare a sincronizzare l' Cloud AWS applicazione con. Questo esegue le seguenti operazioni:

  1. Crea la tua applicazione: questo processo è simile all'utilizzo del sam build comando.

  2. Implementa la tua applicazione: The AWS SAM CLI distribuisce l'applicazione AWS CloudFormation utilizzando le impostazioni predefinite. Vengono utilizzati i seguenti valori predefiniti:

    1. AWS credenziali e impostazioni di configurazione generali presenti nella cartella .aws utente.

    2. impostazioni di distribuzione dell'applicazione disponibili nel samconfig.toml file dell'applicazione.

    Se non è possibile trovare i valori predefiniti, AWS SAM CLI ti informerà e chiuderà il processo di sincronizzazione.

  3. Attenzione alle modifiche locali — The AWS SAM CLI rimane in esecuzione e controlla le modifiche locali all'applicazione. Questo è ciò che offre l'--watchopzione.

    Questa opzione può essere attivata per impostazione predefinita. Per i valori predefiniti, consultate il samconfig.toml file dell'applicazione. Di seguito è riportato un esempio del file .

    ... [default.sync] [default.sync.parameters] watch = true ...
  4. Sincronizza le modifiche locali con Cloud AWS: quando apporti modifiche locali, AWS SAM CLI rileva e sincronizza tali modifiche con Cloud AWS il metodo più rapido disponibile. A seconda del tipo di modifica, può verificarsi quanto segue:

    1. Se la risorsa aggiornata supporta il AWS servizioAPIs, il AWS SAM CLI lo utilizzerà per distribuire le modifiche. Ciò si traduce in una sincronizzazione rapida per aggiornare la risorsa in. Cloud AWS

    2. Se la risorsa aggiornata non supporta il AWS servizioAPIs, il AWS SAM CLI eseguirà una AWS CloudFormation distribuzione. Questo aggiorna l'intera applicazione in Cloud AWS. Sebbene non sia altrettanto rapido, evita di dover avviare manualmente una distribuzione.

Poiché il sam sync comando aggiorna automaticamente l'applicazione in Cloud AWS, è consigliato solo per gli ambienti di sviluppo. Quando eseguisam sync, ti verrà chiesto di confermare:

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

Personalizza le modifiche locali da sincronizzare con Cloud AWS

Fornisci opzioni per personalizzare le modifiche locali sincronizzate con. Cloud AWS Ciò può velocizzare il tempo necessario per visualizzare le modifiche locali nel cloud per i test e la convalida.

Ad esempio, offri la --code possibilità di sincronizzare solo le modifiche al codice, come il codice di AWS Lambda funzione. Durante lo sviluppo, se ti concentri specificamente sul codice Lambda, le modifiche verranno trasferite rapidamente nel cloud per il test e la convalida. Di seguito è riportato un esempio:

$ sam sync --code --watch

Per sincronizzare solo le modifiche al codice per una funzione o un layer Lambda specifico, utilizzate l'--resource-idopzione. Di seguito è riportato un esempio:

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

Prepara la tua applicazione nel cloud per il test e la convalida

Il sam sync comando trova automaticamente il metodo più rapido disponibile per aggiornare l'applicazione in. Cloud AWS Ciò può velocizzare i flussi di lavoro di sviluppo e test sul cloud. Utilizzando il AWS servizioAPIs, puoi sviluppare, sincronizzare e testare rapidamente le risorse supportate. Per un esempio pratico, consulta il Modulo 6 - AWS SAM Accelerare in The Complete Workshop. AWS SAM

Opzioni per il comando sam sync

Di seguito sono riportate alcune delle opzioni principali che è possibile utilizzare per modificare il sam sync comando. Per un elenco di tutte le opzioni, vederesam sync.

Eseguire una distribuzione una tantum AWS CloudFormation

Usa l'--no-watchopzione per disattivare la sincronizzazione automatica. Di seguito è riportato un esempio:

$ sam sync --no-watch

La AWS SAM CLI eseguirà una AWS CloudFormation distribuzione una tantum. Questo comando raggruppa le azioni eseguite dai sam deploy comandi sam build and.

Salta la distribuzione iniziale AWS CloudFormation

È possibile personalizzare se è necessaria una AWS CloudFormation distribuzione ogni volta sam sync che viene eseguita.

  • Provvedere --no-skip-deploy-sync a richiedere una AWS CloudFormation distribuzione ogni volta sam sync che viene eseguita. Ciò garantisce la sincronizzazione dell'infrastruttura locale con AWS CloudFormation, prevenendo eventuali deviazioni. L'utilizzo di questa opzione aggiunge ulteriore tempo al flusso di lavoro di sviluppo e test.

  • Fornisci --skip-deploy-sync per rendere facoltativa AWS CloudFormation la distribuzione. Il AWS SAM CLI confronterà il AWS SAM modello locale con il AWS CloudFormation modello distribuito e salterà la AWS CloudFormation distribuzione iniziale se non viene rilevata una modifica. Saltare la AWS CloudFormation distribuzione può farti risparmiare tempo durante la sincronizzazione delle modifiche locali con. Cloud AWS

    Se non viene rilevata alcuna modifica, AWS SAM CLI eseguirà comunque una AWS CloudFormation distribuzione nei seguenti scenari:

    • Se sono trascorsi almeno 7 giorni dall'ultima AWS CloudFormation distribuzione.

    • Se viene rilevato un gran numero di modifiche al codice della funzione Lambda, la AWS CloudFormation distribuzione è il metodo più rapido per aggiornare l'applicazione.

Di seguito è riportato un esempio:

$ sam sync --skip-deploy-sync

Sincronizza una risorsa da uno stack annidato

Per sincronizzare una risorsa da uno stack annidato
  1. Fornisci lo stack principale utilizzando. --stack-name

  2. Identifica la risorsa nello stack annidato utilizzando il seguente formato:. nestedStackId/resourceId

  3. Fornisci la risorsa nello stack nidificato utilizzando. --resource-id

    Di seguito è riportato un esempio:

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

Per ulteriori informazioni sulla creazione di applicazioni annidate, vedere. Riutilizza codice e risorse utilizzando applicazioni annidate in AWS SAM

Specificare uno AWS CloudFormation stack specifico da aggiornare

Per specificare uno AWS CloudFormation stack specifico da aggiornare, fornisci l'--stack-nameopzione. Di seguito è riportato un esempio:

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

Accelera i tempi di compilazione creando il progetto nella cartella dei sorgenti

Per i runtime e i metodi di compilazione supportati, puoi utilizzare l'--build-in-sourceopzione per creare il tuo progetto direttamente nella cartella di origine. Per impostazione predefinita, il AWS SAM CLI viene creato in una directory temporanea, che prevede la copia del codice sorgente e dei file di progetto. Con, il --build-in-source AWS SAM CLI viene creato direttamente nella cartella di origine, il che accelera il processo di compilazione eliminando la necessità di copiare i file in una directory temporanea.

Per un elenco dei runtime e dei metodi di compilazione supportati, consulta. --build-in-source

Specificate i file e le cartelle che non avvieranno una sincronizzazione

Usa l'--watch-excludeopzione per specificare qualsiasi file o cartella che non avvierà una sincronizzazione una volta aggiornato. Per ulteriori informazioni su questa opzione, consulta --watch-exclude.

Di seguito è riportato un esempio che esclude il package-lock.json file associato alla nostra HelloWorldFunction funzione:

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

Quando viene eseguito questo comando, il AWS SAM CLI avvierà il processo di sincronizzazione. Questo include gli output seguenti:

  • Esegui sam build per creare le tue funzioni e preparare l'applicazione per la distribuzione.

  • Esegui sam deploy per distribuire la tua applicazione.

  • Controlla le modifiche alla tua applicazione.

Quando modifichiamo il package-lock.json file, AWS SAM CLI non avvierà una sincronizzazione. Quando viene aggiornato un altro file, AWS SAM CLI avvierà una sincronizzazione, che includerà il package-lock.json file.

Di seguito è riportato un esempio di specificazione di una funzione Lambda di uno stack secondario:

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

Risoluzione dei problemi

Per risolvere i problemi relativi a AWS SAM CLI, consulta AWS SAMCLIrisoluzione dei problemi.

Esempi

Utilizzo di sam sync per aggiornare l'applicazione Hello World

In questo esempio, iniziamo inizializzando l'applicazione Hello World di esempio. Per ulteriori informazioni su questa applicazione, consulta. Tutorial: Implementa un'applicazione Hello World con AWS SAM

L'esecuzione sam sync avvia il processo di creazione e distribuzione.

$ 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 volta completata la distribuzione, modifichiamo il HelloWorldFunction codice. La AWS SAM CLI rileva questa modifica e sincronizza la nostra applicazione con. Cloud AWS Poiché AWS Lambda supporta il AWS servizioAPIs, viene eseguita una sincronizzazione rapida.

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.

Successivamente, modifichiamo il nostro API endpoint nel AWS SAM modello dell'applicazione. Passiamo /hello a. /helloworld

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

Poiché la risorsa Amazon API Gateway non supporta il AWS servizioAPI, AWS SAM CLI esegue automaticamente una AWS CloudFormation distribuzione. Di seguito è riportato un esempio di 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.

Ulteriori informazioni

Per una descrizione di tutte le sam sync opzioni, consultasam sync.