Utilizzo di funzioni di sostituzione dei parametri con le pipeline di CodePipeline
In una fase CodePipeline, puoi specificare le sostituzioni dei parametri per le operazioni CloudFormation. Le sostituzioni dei parametri consentono di specificare i valori dei parametri del modello che sostituiscono i valori in un file di configurazione del modello. CloudFormation fornisce funzioni che consentono di specificare valori dinamici (valori che sono sconosciuti finché non viene eseguita la pipeline).
Fn::GetArtifactAtt
La funzione Fn::GetArtifactAtt recupera il valore di un attributo da un artefatto di input, come il nome del bucket S3 in cui l’artefatto viene archiviato. Utilizza questa funzione per specificare gli attributi di un artefatto, ad esempio il nome file o il nome del bucket Amazon S3.
Quando esegui una pipeline, CodePipeline copia e scrive i file nello store degli artefatti della pipeline (un bucket S3). CodePipeline genera i nomi file nello store degli artefatti. Tali nomi file sono sconosciuti prima dell’esecuzione della pipeline.
Ad esempio, in una pipeline, potrebbe essere presente una fase di origine in cui CodePipeline copia il codice sorgente della funzione AWS Lambda nello store degli artefatti. Nella fase successiva, un modello CloudFormation crea la funzione Lambda, ma CloudFormation richiede il nome file per creare la funzione. È necessario utilizzare la funzione Fn::GetArtifactAtt per passare il nome esatto del bucket S3 e del file.
Sintassi
Usa la sintassi seguente per recuperare il valore di un attributo di un artefatto.
{ "Fn::GetArtifactAtt" : [ "artifactName", "attributeName" ] }
artifactName-
Il nome dell’artefatto di input. È necessario dichiarare questo artefatto come input per l’operazione associata.
attributeName-
Il nome dell’attributo dell’artefatto di cui vuoi recuperare il valore. Per ulteriori informazioni sull’attributo di ogni artefatto, consulta la sezione Attributi di seguito.
Esempio
Le seguenti sostituzioni di parametro specificano i parametri BucketName e ObjectKey recuperando il nome del bucket S3 e il nome file dell’artefatto LambdaFunctionSource. Questo esempio presuppone che CodePipeline abbia copiato il codice sorgente della funzione Lambda e lo abbia salvato come artefatto, ad esempio come parte di una fase di sviluppo.
{ "BucketName" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "BucketName"]}, "ObjectKey" : { "Fn::GetArtifactAtt" : ["LambdaFunctionSource", "ObjectKey"]} }
Attributi
Puoi recuperare i seguenti attributi per un artefatto.
BucketName-
Il nome del bucket S3 in cui l’artefatto viene archiviato.
ObjectKey-
Il nome del file
.zipche contiene l’artefatto generato da CodePipeline, ad esempio1ABCyZZ.zip. URL-
L’URL Amazon Simple Storage Service (Amazon S3) dell’artefatto, ad esempio
https://s3.us-west-2.amazonaws.com/artifactstorebucket-yivczw8jma0c/test/TemplateSo/1ABCyZZ.zip.
Fn::GetParam
La funzione Fn::GetParam restituisce un valore da una coppia chiave-valore in un file in formato JSON. Il file JSON deve essere incluso in un artefatto.
Utilizza questa funzione per recuperare i valori di output da uno stack CloudFormation e utilizzarli come input per un’altra operazione. Ad esempio, se specifichi un nome file di output per un’operazione CloudFormation, CodePipeline salva l’output in un file JSON e lo aggiunge al file di output .zip dell’artefatto. Utilizza la funzione Fn::GetParam per recuperare il valore di output e utilizzarlo come input per un’altra operazione.
Sintassi
Utilizza la sintassi seguente per recuperare un valore da una coppia chiave-valore.
{ "Fn::GetParam" : [ "artifactName", "JSONFileName", "keyName" ] }
artifactName-
Il nome dell’artefatto che deve essere incluso come artefatto di input per l’azione associata.
JSONFileName-
Il nome di un file JSON contenuto nell’artefatto.
keyName-
Il nome della chiave di cui vuoi recuperare il valore.
Esempi
Gli esempi seguenti illustrano come utilizzare la funzione Fn::GetParam in una sostituzione di parametro.
Sintassi
La seguente sostituzione di parametro specifica il parametro WebSiteURL recuperando il valore della chiave URL dal file stack-output.json che si trova nell’artefatto WebStackOutput.
{ "WebSiteURL" : { "Fn::GetParam" : ["WebStackOutput", "stack-output.json", "URL"]} }
CloudFormationFrammenti di modello
I seguenti frammenti di modello CloudFormation, provenienti da una pipeline CodePipeline illustrano come trasferire gli output dello stack. Questi frammenti mostrano due fasi di definizione della pipeline. La prima fase crea uno stack e ne salva gli output nel file TestOutput.json nell’artefatto StackAOutput. Questi valori sono specificate dalle proprietà OutputFileName e OutputArtifacts.
Il nome dell’artefatto di input di origine per le fasi è TemplateSource. Il nome file del modello di stack è teststackA.yaml e il nome del file di configurazione è test-configuration.json. In entrambe le fasi, questi valori sono specificati per le proprietà TemplateConfiguration e TemplatePath come mostrato di seguito:
TemplateConfiguration: TemplateSource::test-configuration.json TemplatePath: TemplateSource::teststackA.yaml
Esempio Fase di creazione dello stack A
- Name: CreateTestStackA Actions: - Name: CloudFormationCreate ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CREATE_UPDATE Capabilities: CAPABILITY_IAM OutputFileName: TestOutput.json RoleArn: !GetAtt [CFNRole, Arn] StackName: StackA TemplateConfiguration: TemplateSource::test-configuration.json TemplatePath: TemplateSource::teststackA.yaml InputArtifacts: - Name: TemplateSource OutputArtifacts: - Name: StackAOutput RunOrder: '1'
In una fase seguente, lo stack B utilizza gli output dello stack A. Nella proprietà ParameterOverrides, l’esempio utilizza la funzione Fn::GetParam per specificare il parametro StackBInputParam. Il valore risultante è il valore associato alla chiave StackAOutputName.
Esempio Fase di creazione dello stack B
- Name: CreateTestStackB Actions: - Name: CloudFormationCreate ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CREATE_UPDATE Capabilities: CAPABILITY_IAM RoleArn: !GetAtt [CFNRole, Arn] StackName: StackB TemplateConfiguration: TemplateSource::test-configuration.json TemplatePath: TemplateSource::teststackB.yaml ParameterOverrides: | { "StackBInputParam" : { "Fn::GetParam" : ["StackAOutput", "TestOutput.json", "StackAOutputName"]} } InputArtifacts: - Name: TemplateSource - Name: StackAOutput RunOrder: '1'
Consulta anche
Le risorse correlate seguenti possono rivelarsi utili durante l’utilizzo di questi parametri.
-
Per ulteriori informazioni sui parametri delle operazioni CloudFormation in CodePipeline, consulta CloudFormation deploy action configuration reference nella Guida per l’utente di AWS CodePipeline.
-
Per i valori del modello di esempio per provider di operazioni, ad esempio per il campo
Ownero i campiconfiguration, consulta il Riferimento per la struttura delle operazioni nella Guida per l’utente di AWS CodePipeline. -
Per scaricare modelli di stack di pipeline di esempio in formato YAML o JSON, consulta Tutorial: Create a pipeline with CloudFormation nella Guida per l’utente di AWS CodePipeline.