Frammenti di modello generale - AWS CloudFormation

Frammenti di modello generale

I seguenti esempi mostrano diverse funzionalità del modello CloudFormation che non sono specifiche per un servizio AWS.

Proprietà UserData codificata Base64

Questo esempio illustra l’assemblaggio di una proprietà UserData utilizzando le funzioni Fn::Base64 e Fn::Join. I riferimenti MyValue e MyName sono i parametri che devono essere definiti nella sezione Parameters del modello. La stringa letterale Hello World è solo un altro valore che questo esempio trasferisce come parte di UserData.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : [ ",", [ { "Ref" : "MyValue" }, { "Ref" : "MyName" }, "Hello World" ] ] } }

YAML

UserData: Fn::Base64: !Sub | Ref: MyValue Ref: MyName Hello World

Proprietà UserData codificata Base64 con AccessKey e SecretKey

Questo esempio illustra l’assemblaggio di una proprietà UserData utilizzando le funzioni Fn::Base64 e Fn::Join. Include le informazioni AccessKey e SecretKey. I riferimenti AccessKey e SecretKey sono i parametri che devono essere definiti nella sezione Parametri del modello.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "AccessKey" }, "SECRET_KEY=", { "Ref" : "SecretKey" } ] ] } }

YAML

UserData: Fn::Base64: !Sub | ACCESS_KEY=${AccessKey} SECRET_KEY=${SecretKey}

Sezione Parameters con un parametro di stringa letterale

Il seguente esempio illustra una dichiarazione della sezione parametri valida in cui viene dichiarato un singolo tipo di parametro String.

JSON

"Parameters" : { "UserName" : { "Type" : "String", "Default" : "nonadmin", "Description" : "Assume a vanilla user if no command-line spec provided" } }

YAML

Parameters: UserName: Type: String Default: nonadmin Description: Assume a vanilla user if no command-line spec provided

Sezione Parameters con parametro di stringa con vincolo di espressione regolare

Il seguente esempio illustra una dichiarazione della sezione parametri valida in cui viene dichiarato un singolo tipo di parametro String. Il parametro AdminUserAccount ha un valore predefinito di admin. Il valore di parametro deve avere una lunghezza minima di 1 e una massima di 16 e contiene caratteri alfabetici e numeri, ma deve iniziare con un carattere alfabetico.

JSON

"Parameters" : { "AdminUserAccount": { "Default": "admin", "NoEcho": "true", "Description" : "The admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" } }

YAML

Parameters: AdminUserAccount: Default: admin NoEcho: true Description: The admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'

Sezione Parameters con parametri numerici con vincoli MinValue e MaxValue

Il seguente esempio illustra una dichiarazione della sezione parametri valida in cui viene dichiarato un singolo tipo di parametro Number. Il parametro WebServerPort ha un valore predefinito di 80 e un valore minimo di 1 e un valore massimo di 65535.

JSON

"Parameters" : { "WebServerPort": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }

YAML

Parameters: WebServerPort: Default: 80 Description: TCP/IP port for the web server Type: Number MinValue: 1 MaxValue: 65535

Sezione Parameters con parametro numerico con vincolo AllowedValues

Il seguente esempio illustra una dichiarazione della sezione parametri valida in cui viene dichiarato un singolo tipo di parametro Number. Il parametro WebServerPort ha un valore predefinito di 80 e consente soltanto i valori di 80 e 8888.

JSON

"Parameters" : { "WebServerPortLimited": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "AllowedValues" : ["80", "8888"] } }

YAML

Parameters: WebServerPortLimited: Default: 80 Description: TCP/IP port for the web server Type: Number AllowedValues: - 80 - 8888

Sezione Parameters con un parametro letterale CommaDelimitedList

Il seguente esempio illustra una dichiarazione della sezione Parameters valida in cui viene dichiarato un singolo tipo di parametro CommaDelimitedList. La proprietà NoEcho è impostata su TRUE, che maschererà il suo valore con asterischi (*****) nell’output describe-stacks, ad eccezione delle informazioni memorizzate nelle posizioni specificate di seguito.

Importante

L’utilizzo dell’attributo NoEcho non maschera le informazioni memorizzate nei seguenti elementi:

  • Sezione dei modelli Metadata. CloudFormation non trasforma, modifica oppure omette le informazioni incluse nella sezione Metadata. Per ulteriori informazioni, vedere Metadati.

  • Sezione dei modelli Outputs. Per ulteriori informazioni, consulta Output.

  • Attributo Metadata di una definizione di risorsa. Per ulteriori informazioni, consulta Attributo Metadata.

Si consiglia vivamente di non utilizzare questi meccanismi per includere informazioni sensibili, come password o segreti.

Importante

Anziché incorporare informazioni sensibili direttamente nei modelli CloudFormation, si consiglia di utilizzare parametri dinamici nel modello stack per fare riferimento alle informazioni riservate archiviate e gestite al di fuori di CloudFormation, ad esempio nell’archivio parametri di AWS Systems Manager o in Gestione dei segreti AWS.

Per ulteriori informazioni, consulta la best practice Non incorporare le credenziali nei modelli.

JSON

"Parameters" : { "UserRoles" : { "Type" : "CommaDelimitedList", "Default" : "guest,newhire", "NoEcho" : "TRUE" } }

YAML

Parameters: UserRoles: Type: CommaDelimitedList Default: "guest,newhire" NoEcho: true

Sezione Parameters con valore di parametro basato su uno pseudo parametro

L’esempio seguente mostra i comandi dei dati utente EC2 che utilizzano gli pseudo parametri AWS::StackName e AWS::Region. Per ulteriori informazioni sugli pseudo parametri, consulta Ottenimento di valori AWS usando pseudo parametri.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServerGroup ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }

YAML

UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}

Sezione Mapping con tre mappature

L’esempio seguente mostra una dichiarazione di sezione di Mapping valida che contiene tre mappature. La mappa, quando abbinata a una chiave di mappatura Stop, SlowDown oppure Go, fornisce i valori RGB assegnati all’attributo corrispondente RGBColor.

JSON

"Mappings" : { "LightColor" : { "Stop" : { "Description" : "red", "RGBColor" : "RED 255 GREEN 0 BLUE 0" }, "SlowDown" : { "Description" : "yellow", "RGBColor" : "RED 255 GREEN 255 BLUE 0" }, "Go" : { "Description" : "green", "RGBColor" : "RED 0 GREEN 128 BLUE 0" } } }

YAML

Mappings: LightColor: Stop: Description: red RGBColor: "RED 255 GREEN 0 BLUE 0" SlowDown: Description: yellow RGBColor: "RED 255 GREEN 255 BLUE 0" Go: Description: green RGBColor: "RED 0 GREEN 128 BLUE 0"

Description basata sulla stringa letterale

L’esempio seguente mostra una dichiarazione della sezione Description valida in cui il valore si basa su una stringa letterale. Questo frammento può essere per modelli, parametri, risorse, proprietà o output.

JSON

"Description" : "Replace this value"

YAML

Description: "Replace this value"

Sezione Outputs con un output di stringa letterale

Questo esempio illustra un’assegnazione di output basata su una stringa letterale.

JSON

"Outputs" : { "MyPhone" : { "Value" : "Please call 555-5555", "Description" : "A random message for aws cloudformation describe-stacks" } }

YAML

Outputs: MyPhone: Value: Please call 555-5555 Description: A random message for aws cloudformation describe-stacks

Sezione Outputs con un output di riferimento della risorsa e un output di pseudo riferimento

Questo esempio illustra una sezione Outputs con due assegnazioni di output. Una si basa su una risorsa e l’altra si basa su uno pseudoriferimento.

JSON

"Outputs" : { "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } }, "StackName" : { "Value" : { "Ref" : "AWS::StackName" } } }

YAML

Outputs: SNSTopic: Value: !Ref MyNotificationTopic StackName: Value: !Ref AWS::StackName

Sezione Outputs con un output basato su una funzione, una stringa letterale, un riferimento e uno pseudo parametro

Questo esempio illustra una sezione output con un’assegnazione di output. La funzione Join viene utilizzata per concatenare il valore, utilizzando un segno di percentuale come delimitatore.

JSON

"Outputs" : { "MyOutput" : { "Value" : { "Fn::Join" : [ "%", [ "A-string", {"Ref" : "AWS::StackName" } ] ] } } }

YAML

Outputs: MyOutput: Value: !Join [ %, [ 'A-string', !Ref 'AWS::StackName' ]]

Versione del modello

Il seguente frammento illustra una dichiarazione di sezione della AWSTemplateFormatVersion valida.

JSON

"AWSTemplateFormatVersion" : "2010-09-09"

YAML

AWSTemplateFormatVersion: '2010-09-09'

Proprietà AWSTags

Questo esempio illustra una proprietà AWS Tags. Devi specificare questa proprietà all’interno della sezione proprietà di una risorsa. Quando la risorsa viene creata, verrà contrassegnata con i tag dichiarati.

JSON

"Tags" : [ { "Key" : "keyname1", "Value" : "value1" }, { "Key" : "keyname2", "Value" : "value2" } ]

YAML

Tags: - Key: "keyname1" Value: "value1" - Key: "keyname2" Value: "value2"