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 della sincronizzazione con Cloud AWS
Il AWS Serverless Application Model comando Command Line Interface (AWS SAMCLI) sam sync
fornisce opzioni per sincronizzare rapidamente le modifiche dell'applicazione locale con. Cloud AWSsam sync
Utilizzatelo quando sviluppate le vostre applicazioni per:
-
Rileva e sincronizza automaticamente le modifiche locali su Cloud AWS.
-
Personalizza le modifiche locali sincronizzate con. Cloud AWS
-
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
Argomenti
Rileva e sincronizza automaticamente le modifiche locali al Cloud AWS
Esegui sam sync
con l'--watch
opzione per iniziare a sincronizzare l' Cloud AWS applicazione con. Questa operazione esegue le seguenti operazioni:
-
Crea la tua applicazione: questo processo è simile all'utilizzo del
sam build
comando. -
Distribuisci l'applicazione: AWS SAMCLI distribuisce l'applicazione AWS CloudFormation utilizzando le impostazioni predefinite. Vengono utilizzati i seguenti valori predefiniti:
-
AWS credenziali e impostazioni di configurazione generali presenti nella cartella
.aws
utente. -
impostazioni di distribuzione dell'applicazione disponibili nel
samconfig.toml
file dell'applicazione.
Se non riesci a trovare i valori predefiniti, ti AWS SAMCLI informerà e chiuderà il processo di sincronizzazione.
-
-
Controlla le modifiche locali: AWS SAMCLI rimane in esecuzione e controlla le modifiche locali all'applicazione. Questo è ciò che offre l'
--watch
opzione.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 ...
-
Sincronizza le modifiche locali con Cloud AWS: quando apporti modifiche locali, AWS SAMCLI rileva e sincronizza tali modifiche Cloud AWS tramite il metodo più rapido disponibile. A seconda del tipo di modifica, può verificarsi quanto segue:
-
Se la risorsa aggiornata supporta le API di AWS servizio, la AWS SAMCLI utilizzeranno per distribuire le modifiche. Ciò si traduce in una sincronizzazione rapida per aggiornare la risorsa in. Cloud AWS
-
Se la risorsa aggiornata non supporta le API di AWS servizio, AWS SAMCLI 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-id
opzione. Di seguito è riportato un esempio:
$
sam sync --code --resource-id
HelloWorldFunction
--resource-idHelloWorldLayer
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 le API AWS di servizio, puoi sviluppare, sincronizzare e testare rapidamente le risorse supportate. Per un esempio pratico, consulta il Modulo 6 - AWS SAM Accelerare
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-watch
opzione per disattivare la sincronizzazione automatica. Di seguito è riportato un esempio:
$
sam sync --no-watch
AWS SAMCLIEseguirà una distribuzione una tantum. AWS CloudFormation 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 voltasam 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. AWS SAMCLIConfronterà 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 AWSSe non viene rilevata alcuna modifica, AWS SAMCLI 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
-
Fornisci lo stack principale utilizzando.
--stack-name
-
Identifica la risorsa nello stack annidato utilizzando il seguente formato:.
nestedStackId/resourceId
-
Fornisci la risorsa nello stack nidificato utilizzando.
--resource-id
Di seguito è riportato un esempio:
$
sam sync --code --stack-name
sam-app
--resource-idmyNestedStack/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-name
opzione. Di seguito è riportato un esempio:
$
sam sync --stack-name
dev-sam-app
Accelera i tempi di compilazione creando il tuo progetto nella cartella dei sorgenti
Per i runtime e i metodi di compilazione supportati, puoi utilizzare l'--build-in-source
opzione per creare il tuo progetto direttamente nella cartella di origine. Per impostazione predefinita, AWS SAM CLI le build si trovano in una directory temporanea, che prevede la copia del codice sorgente e dei file di progetto. Con--build-in-source
, AWS SAM CLI le build vengono create 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-exclude
opzione 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, 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 avvieranno una sincronizzazione. Quando un altro file viene aggiornato, 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 il problema AWS SAMCLI, vedere. 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-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.
Una volta completata la distribuzione, modifichiamo il HelloWorldFunction
codice. AWS SAMCLIRileva questa modifica e sincronizza la nostra applicazione con. Cloud AWS Poiché AWS Lambda supporta le API AWS di servizio, 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 endpoint API nel modello dell' AWS SAM 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 l'API del AWS servizio, esegue AWS SAMCLI 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-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.
Ulteriori informazioni
Per una descrizione di tutte le sam sync
opzioni, vedisam sync.