Carica artefatti locali in un bucket S3 con la AWS CLI
Puoi utilizzare il comando AWS CLI per caricare artefatti locali a cui si fa riferimento in un modello CloudFormation su un bucket Amazon S3. Gli artefatti locali sono file a cui fai riferimento nel tuo modello. Invece di caricare manualmente i file in un bucket S3 e aggiungere la posizione al modello, puoi specificare artefatti locali nel modello e utilizzare il comando package per caricarli in modo rapido.
Un artefatto locale è un percorso a un file o a una cartella che il comando package carica in Amazon S3. Ad esempio, un artefatto potrebbe essere un percorso locale al codice sorgente della funzione AWS Lambda o un file OpenAPI della REST API Gateway Amazon API.
Quando utilizzi il comando package:
-
Se specifichi un file, il comando lo carica direttamente nel bucket S3.
-
Se specifichi una cartella, il comando crea un file
.zipper la cartella e carica tale file.zip. -
Se non specifichi un percorso, il comando crea un file
.zipper la directory di lavoro e lo carica.
È possibile specificare un percorso assoluto o relativo, in cui il percorso è relativo alla posizione del modello.
Dopo aver caricato gli artefatti, il comando restituisce una copia del modello, sostituendo i riferimenti ad artefatti locali con la posizione S3 in cui il comando ha caricato gli artefatti. Puoi quindi utilizzare il modello restituito per creare o aggiornare uno stack.
Nota
Puoi utilizzare artefatti locali solo per le proprietà di risorsa supportate dal comando package. Per ulteriori informazioni su questo comando e per un elenco di proprietà di risorsa supportate, consulta la documentazione package in AWS CLI Command Reference.
Prerequisiti
Prima di iniziare, devi disporre di un bucket Amazon S3 esistente.
Inserisci in un pacchetto e implementa un modello con artefatti locali
Il seguente modello specifica l'artefatto locale per il codice sorgente della funzione Lambda. Il codice sorgente è memorizzato nella cartella /home/user/code/lambdafunction.
Modello originale
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Resources": {
"MyFunction": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "index.handler",
"Runtime": "nodejs18.x",
"CodeUri": "/home/user/code/lambdafunction"
}
}
}
}
Il comando package seguente crea e carica un file .zip della cartella del codice sorgente della funzione nella radice del bucket specificato.
aws cloudformation package \ --s3-bucketamzn-s3-demo-bucket\ --template/path_to_template/template.json\ --output-template-filepackaged-template.json\ --output json
Il comando genera un nuovo modello nel percorso specificato da --output-template-file. Sostituisce il riferimento all’artefatto con la posizione di Amazon S3, come di seguito. Il nome del file .zip viene rinominato utilizzando il checksum MD5 del contenuto della cartella, anziché il nome della cartella stessa.
Modello risultante
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Resources": {
"MyFunction": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "index.handler",
"Runtime": "nodejs18.x",
"CodeUri": "s3://amzn-s3-demo-bucket/md5 checksum"
}
}
}
}
Dopo aver impacchettato gli artefatti del modello, distribuisci il modello elaborato utilizzando il comando deploy.
aws cloudformation deploy \ --template-filepackaged-template.json\ --stack-namestack-name
Quando distribuisci modelli di dimensioni superiori a 51.200 byte, usa il comando deploy con l’opzione --s3-bucketper caricare il modello su S3, come nell’esempio seguente.
aws cloudformation deploy \ --template-filepackaged-template.json\ --stack-namestack-name\ --s3-bucketamzn-s3-demo-bucket
Nota
Per un altro esempio sull’utilizzo del comando package per caricare artefatti locali, vedi Dividi un modello in pezzi riutilizzabili usando stack nidificati.