Specifica delle risorse esistenti in fase di runtime con i tipi di parametri forniti da CloudFormation - AWS CloudFormation

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à.

Specifica delle risorse esistenti in fase di runtime con i tipi di parametri forniti da CloudFormation

Durante la creazione del modello puoi creare parametri che richiedono agli utenti di inserire identificatori di risorse AWS esistenti o parametri di Systems Manager utilizzando tipi di parametri specifici forniti da CloudFormation.

Panoramica

In CloudFormation, puoi utilizzare i parametri per personalizzare gli stack fornendo valori di input durante la creazione o l’aggiornamento degli stack. Questa funzionalità rende i modelli riutilizzabili e flessibili in diversi scenari.

I parametri sono definiti nella sezione Parameters di un modello CloudFormation. Ogni parametro ha un nome e un tipo e può avere impostazioni aggiuntive come un valore predefinito e valori consentiti. Per ulteriori informazioni, consulta Sintassi dei Parameters del modello CloudFormation.

Il tipo di parametro determina il tipo di valore di input che il parametro può accettare. Ad esempio, Number accetta solo valori numerici, mentre String accetta l’immissione di testo.

CloudFormation fornisce diversi tipi di parametri aggiuntivi che puoi utilizzare nei modelli per fare riferimento alle risorse AWS esistenti e ai parametri di Systems Manager.

Questi tipi di parametri si dividono in due categorie:

  • Tipi di parametri specifici di AWS: CloudFormation fornisce un set di tipi di parametri che aiutano a catturare valori non validi durante la creazione o l’aggiornamento di uno stack. Quando utilizzi questi tipi di parametri, chiunque utilizzi il tuo modello deve specificare valori validi dall’Account AWS e dalla regione in cui sta creando lo stack.

    Se utilizzano la Console di gestione AWS, CloudFormation fornisce un elenco precompilato di valori esistenti dal loro account e dalla loro regione. In questo modo l’utente non dovrà ricordare alcuna informazione e immetterà correttamente un nome o un ID specifico. Al contrario, deve solo selezionare i valori da un elenco a discesa. In alcuni casi è anche possibile cercare i valori per ID, nome o valore del tag Name.

  • Tipi di parametri Systems Manager: CloudFormation fornisce anche i tipi di parametri che corrispondono ai parametri esistenti nel Systems Manager Parameter Store. Quando utilizzi questi tipi di parametro, chiunque utilizzi il modello deve specificare una chiave del Parameter Store come valore del tipo di parametro Systems Manager; CloudFormation recupera quindi il valore più recente dal Parameter Store per utilizzarlo nel proprio stack. Ciò può essere utile quando è necessario aggiornare frequentemente le applicazioni con nuovi valori di proprietà, come nuovi ID Amazon Machine Image (AMI). Per ulteriori informazioni sul Parameter Store, consultare Systems Manager Parameter Store.

Una volta definiti i parametri nella sezione Parameters, puoi fare riferimento ai valori dei parametri nell’intero modello CloudFormation utilizzando la funzione Ref.

Esempio

Nel seguente esempio viene mostrato un modello che utilizza i seguenti tipi di parametro.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Per creare uno stack da questo modello devi specificare un ID del VPC, un ID di sottorete e un nome della coppia di chiavi esistenti dal tuo account. Puoi anche specificare una chiave Parameter Store esistente che faccia riferimento all’ID AMI desiderato o mantenga il valore predefinito di /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2. Questo parametro pubblico è un alias per l’ID AMI regionale per l’AMI Amazon Linux 2 più recente. Per ulteriori informazioni sui parametri pubblici, consulta Discovering public parameters in Parameter Store nella Guida per l’utente di AWS Systems Manager.

JSON

{ "Parameters": { "VpcId": { "Description": ID of an existing Virtual Private Cloud (VPC)., "Type": AWS::EC2::VPC::Id }, "PublicSubnetId": { "Description": ID of an existing public subnet within the specified VPC., "Type": AWS::EC2::Subnet::Id }, "KeyName": { "Description": Name of an existing EC2 key pair to enable SSH access to the instance., "Type": AWS::EC2::KeyPair::KeyName }, "AMIId": { "Description": Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI)., "Type": AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, "Default": /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }

YAML

Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: AWS::EC2::VPC::Id PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: AWS::EC2::Subnet::Id KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: AWS::EC2::KeyPair::KeyName AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance

Comando AWS CLI per creare lo stack

Il seguente comando create-stack crea uno stack in base al modello di esempio.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Per utilizzare un tipo di parametro che accetta un elenco di stringhe, ad esempio List<AWS::EC2::Subnet::Id>, devi evitare le virgole all’interno del ParameterValue con una doppia barra rovesciata, come illustrato nell’esempio seguente.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Considerazioni

Si consiglia vivamente di utilizzare riferimenti dinamici per limitare l’accesso a definizioni di configurazione riservate, come le credenziali di terze parti. Per ulteriori informazioni, consulta Ottenimento di valori archiviati in altri servizi utilizzando riferimenti dinamici.

Se desideri consentire agli utenti del modello di specificare valori da Account AWS diversi, non utilizzare tipi di parametri specifici di AWS. Definisci, invece, parametri di tipo String o CommaDelimitedList.

Ci sono alcune cose da tenere a mente con i tipi di parametri di Systems Manager:

  • Puoi visualizzare i valori risolti per i parametri nella scheda Parametri dello stack nella console oppure eseguendo describe-stacks o describe-change-set. Ricorda che questi valori vengono impostati quando lo stack viene creato o aggiornato, pertanto potrebbero essere diversi dai valori più recenti presenti nel Parameter Store.

  • Per gli aggiornamenti dello stack, quando utilizzi l’opzione Utilizza valore esistente (o imposti UsePreviousValue su true), significa che desideri continuare a utilizzare la stessa chiave Parameter Store, non il relativo valore. CloudFormation recupera sempre il valore più recente.

  • Se specifichi valori consentiti o altri vincoli, CloudFormation li convalida in base alle chiavi dei parametri specificate, ma non ai relativi valori. Devi convalidare i valori nel Parameter Store stesso.

  • Quando crei o aggiorni gli stack e crei un set di modifiche, CloudFormation usa i valori esistenti nel Parameter Store in quel momento. Se un parametro specificato non esiste nel Parameter Store nell’Account AWS del chiamante, CloudFormation restituisce un errore di convalida.

  • Quando esegui un set di modifiche, CloudFormation utilizza i valori specificati nel set di modifiche. Esamina questi valori prima di eseguire il set di modifiche perché potrebbero variare in Archivio parametri tra il momento in cui crei il set di modifiche e l’esecuzione dello stesso.

  • Per i parametri Parameter Store memorizzati nello stesso Account AWS, devi fornire il nome del parametro. Per i parametri Parameter Store condivisi da un altro Account AWS, devi fornire il parametro ARN completo.

Tipi di parametri specifici per AWS supportati

CloudFormation supporta i seguenti tipi specifici di AWS:

AWS::EC2::AvailabilityZone::Name

Zona di disponibilità, ad esempio us-west-2a.

AWS::EC2::Image::Id

ID dell’immagine Amazon EC2, ad esempio ami-0ff8a91507f77f867. Nota che la console CloudFormation non mostra un elenco a discesa dei valori per questo tipo di parametro.

AWS::EC2::Instance::Id

ID dell’istanza Amazon EC2, ad esempio i-1e731a32.

AWS::EC2::KeyPair::KeyName

Nome della coppia di chiavi Amazon EC2.

AWS::EC2::SecurityGroup::GroupName

Nome di un gruppo di sicurezza VPC predefinito, ad esempio my-sg-abc.

AWS::EC2::SecurityGroup::Id

ID del gruppo di sicurezza, ad esempio sg-a123fd85.

AWS::EC2::Subnet::Id

ID della sottorete, ad esempio subnet-123a351e.

AWS::EC2::Volume::Id

ID del volume Amazon EBS, ad esempio vol-3cdd3f56.

AWS::EC2::VPC::Id

ID VPC, ad esempio vpc-a123baa3.

AWS::Route53::HostedZone::Id

ID della zona ospitata Amazon Route 53, ad esempio Z23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Matrice di zone di disponibilità per una Regione, ad esempio us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Matrice di ID delle immagini Amazon EC2, ad esempio ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Nota che la console CloudFormation non mostra un elenco a discesa dei valori per questo tipo di parametro.

List<AWS::EC2::Instance::Id>

Matrice di ID delle istanze Amazon EC2, ad esempio i-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Matrice dei nomi dei gruppi di sicurezza VPC predefiniti, ad esempio my-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Matrice di ID dei gruppi di sicurezza, ad esempio sg-a123fd85, sg-b456fd85.

List<AWS::EC2::Subnet::Id>

Matrice di ID delle sottoreti, ad esempio subnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Matrice di ID dei volumi Amazon EBS, ad esempio vol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Matrice di ID VPC, ad esempio vpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Matrice di ID delle zone ospitate Amazon Route 53, ad esempio Z23YXV4OVPL04A, Z23YXV4OVPL04B.

Tipi di parametri supportati da Systems Manager

CloudFormation supporta i seguenti tipi di parametri Systems Manager:

AWS::SSM::Parameter::Name

Nome di una chiave di parametro Systems Manager. Utilizza questo tipo di parametro solo per verificare che esista un parametro richiesto. CloudFormation non recupera il valore effettivo associato al parametro.

AWS::SSM::Parameter::Value<String>

Parametro Systems Manager il cui valore è una stringa. Corrisponde al tipo di parametro String in Archivio parametri.

AWS::SSM::Parameter::Value<List<String>> oppure AWS::SSM::Parameter::Value<CommaDelimitedList>

Parametro Systems Manager il cui valore è un elenco di stringhe. Corrisponde al tipo di parametro StringList in Archivio parametri.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Parametro Systems Manager il cui valore è un tipo di parametro specifico di AWS.

L’esempio seguente specifica il tipo AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Parametro Systems Manager il cui valore è un elenco di tipi di parametri specifici di AWS.

L’esempio seguente specifica un elenco di tipi AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Tipi di parametri Systems Manager non supportati

CloudFormation non supporta i seguenti tipi di parametri Systems Manager

  • Elenchi dei tipi di parametri Systems Manager, ad esempio: List<AWS::SSM::Parameter::Value<String>>

Inoltre, CloudFormation non supporta la definizione dei parametri di modello come tipi di parametro Systems Manager SecureString. Tuttavia, puoi specificare stringhe sicure come valori dei parametri per alcune risorse. Per ulteriori informazioni, consulta Ottenimento di valori archiviati in altri servizi utilizzando riferimenti dinamici.