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.
Argomenti
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 . 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./aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
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-nameMyStack\ --template-bodyfile://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
UsePreviousValuesu 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
Stringin Archivio parametri. AWS::SSM::Parameter::Value<List<String>>oppureAWS::SSM::Parameter::Value<CommaDelimitedList>-
Parametro Systems Manager il cui valore è un elenco di stringhe. Corrisponde al tipo di parametro
StringListin 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.