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

Resources

La Resources sezione è una sezione obbligatoria di primo livello in un CloudFormation modello. Dichiara le AWS risorse che desideri CloudFormation fornire e configurare come parte del tuo stack.

Sintassi

La Resources sezione utilizza la seguente sintassi:

JSON

"Resources" : { "LogicalResourceName1" : { "Type" : "AWS::ServiceName::ResourceType", "Properties" : { "PropertyName1" : "PropertyValue1", ... } }, "LogicalResourceName2" : { "Type" : "AWS::ServiceName::ResourceType", "Properties" : { "PropertyName1" : "PropertyValue1", ... } } }

YAML

Resources: LogicalResourceName1: Type: AWS::ServiceName::ResourceType Properties: PropertyName1: PropertyValue1 ... LogicalResourceName2: Type: AWS::ServiceName::ResourceType Properties: PropertyName1: PropertyValue1 ...

ID logico (chiamato anche nome logico)

All'interno di un CloudFormation modello, le risorse sono identificate dai rispettivi nomi di risorse logiche. Questi nomi devono essere alfanumerici (a-zA-Z0-9) e univoci all'interno del modello. I nomi logici vengono utilizzati per fare riferimento a risorse provenienti da altre sezioni del modello.

Tipo di risorsa

Ogni risorsa deve avere un Type attributo che definisce il tipo di AWS risorsa. L'Typeattributo ha il formatoAWS::ServiceName::ResourceType. Ad esempio, l'Typeattributo per un bucket Amazon S3 è. AWS::S3::Bucket

Per l'elenco completo dei tipi di risorse supportati, consulta la. AWS riferimento ai tipi di risorse e proprietà

Proprietà delle risorse

Le proprietà delle risorse sono opzioni aggiuntive che è possibile specificare per definire i dettagli di configurazione per il tipo di risorsa specifico. Alcune proprietà sono obbligatorie, mentre altre sono opzionali. Alcune proprietà hanno valori predefiniti, pertanto la specificazione di tali proprietà è facoltativa.

Per informazioni dettagliate sulle proprietà supportate per ogni tipo di risorsa, vedere gli argomenti inAWS riferimento ai tipi di risorse e proprietà.

I valori delle proprietà possono essere stringhe letterali, elenchi di stringhe, valori booleani, riferimenti dinamici, riferimenti a parametri, pseudo riferimenti o valori restituiti da una funzione. Gli esempi seguenti mostrano come dichiarare diversi tipi di valori di proprietà:

JSON

"Properties" : { "String" : "A string value", "Number" : 123, "LiteralList" : [ "first-value", "second-value" ], "Boolean" : true }

YAML

Properties: String: A string value Number: 123 LiteralList: - first-value - second-value Boolean: true

ID fisico

Oltre all'ID logico, alcune risorse hanno anche un ID fisico, che è il nome effettivamente assegnato a quella risorsa, ad esempio un ID di EC2 istanza o un nome di bucket S3. Usa quello fisico IDs per identificare le risorse al di fuori dei CloudFormation modelli, ma solo dopo che le risorse sono state create. Ad esempio, supponete di assegnare a una risorsa di EC2 istanza un ID logico diMyEC2Instance. Quando CloudFormation crea l'istanza, genera e assegna CloudFormation automaticamente un ID fisico (ad esempioi-1234567890abcdef0) all'istanza. Puoi utilizzare questo ID fisico per identificare l'istanza e visualizzarne le proprietà (come il DNS nome) utilizzando la EC2 console Amazon.

Per i bucket Amazon S3 e molte altre risorse, genera CloudFormation automaticamente un nome fisico univoco per la risorsa se non ne specifichi uno esplicitamente. Questo nome fisico si basa su una combinazione del nome dello CloudFormation stack, del nome logico della risorsa specificato nel CloudFormation modello e di un ID univoco. Ad esempio, se hai un bucket Amazon S3 con il nome logico MyBucket in uno stack denominatoMyStack, CloudFormation potresti denominare il bucket con il seguente nome fisico. MyStack-MyBucket-abcdefghijk1

Per le risorse che supportano nomi personalizzati, puoi assegnare i tuoi nomi fisici per aiutarti a identificare rapidamente le risorse. Ad esempio, puoi denominare un bucket S3 che memorizza i log con il nome MyPerformanceLogs. Per ulteriori informazioni, consulta Tipo di nome.

Risorse di riferimento

Spesso è necessario impostare le proprietà di una risorsa in base al nome o alla proprietà di un'altra risorsa. Ad esempio, potresti creare un'EC2istanza che utilizza gruppi EC2 di sicurezza o una CloudFront distribuzione supportata da un bucket S3. Tutte queste risorse possono essere create nello stesso CloudFormation modello.

CloudFormation fornisce funzioni intrinseche che è possibile utilizzare per fare riferimento ad altre risorse e alle relative proprietà. Queste funzioni consentono di creare dipendenze tra le risorse e di passare valori da una risorsa all'altra.

La funzione Ref

La Ref funzione viene comunemente utilizzata per recuperare una proprietà identificativa delle risorse definite all'interno dello stesso CloudFormation modello. Ciò che restituisce dipende dal tipo di risorsa. Per la maggior parte delle risorse, restituisce il nome fisico della risorsa. Tuttavia, per alcuni tipi di risorse, potrebbe restituire un valore diverso, ad esempio un indirizzo IP per una AWS::EC2::EIP risorsa o un Amazon Resource Name (ARN) per un SNS argomento Amazon.

Gli esempi seguenti mostrano come utilizzare la Ref funzione nelle proprietà. In ognuno di questi esempi, la Ref funzione restituirà il nome effettivo della LogicalResourceName risorsa dichiarata altrove nel modello. L'esempio di !Ref sintassi dell'YAMLesempio è solo un modo più breve per scrivere la Ref funzione.

JSON

"Properties" : { "PropertyName" : { "Ref" : "LogicalResourceName" } }

YAML

Properties: PropertyName1: Ref: LogicalResourceName PropertyName2: !Ref LogicalResourceName

Per informazioni più dettagliate sulla Ref funzione, vedere Funzione Ref.

La funzione Fn::GetAtt

La Ref funzione è utile se il parametro o il valore restituito per una risorsa è esattamente quello desiderato. Tuttavia, potrebbero essere necessari altri attributi di una risorsa. Ad esempio, se desideri creare una CloudFront distribuzione con un'origine S3, devi specificare la posizione del bucket utilizzando un indirizzo in DNS stile. Una serie di risorse dispongono di attributi aggiuntivi i cui valori possono essere utilizzati nel modello. Per ottenere questi attributi, si utilizza la funzione. Fn::GetAtt

Gli esempi seguenti mostrano come utilizzare la GetAtt funzione nelle proprietà. La Fn::GetAtt funzione accetta due parametri, il nome logico della risorsa e il nome dell'attributo da recuperare. L'esempio di !GetAtt sintassi dell'YAMLesempio è solo un modo più breve per scrivere la GetAtt funzione.

JSON

"Properties" : { "PropertyName" : { "Fn::GetAtt" : [ "LogicalResourceName", "AttributeName" ] } }

YAML

Properties: PropertyName1: Fn::GetAtt: - LogicalResourceName - AttributeName PropertyName2: !GetAtt LogicalResourceName.AttributeName

Per informazioni più dettagliate sulla GetAtt funzione, vedere Fn::. GetAtt

Esempi

Gli esempi seguenti illustrano come dichiarare le risorse e come i CloudFormation modelli possono fare riferimento ad altre risorse definite nello stesso modello e alle risorse esistenti. AWS

Dichiarazione di una singola risorsa con un nome personalizzato

L'esempio seguente dichiara una singola risorsa di tipo AWS::S3::Bucket con il nome logico. MyBucket La BucketName proprietà è impostata su amzn-s3-demo-bucket, che deve essere sostituito con il nome desiderato per il bucket S3.

Se utilizzi questa dichiarazione di risorse per creare uno stack, CloudFormation creerà un bucket Amazon S3 con impostazioni predefinite. Per altre risorse, come un'EC2istanza Amazon o un gruppo Auto Scaling, sono CloudFormation necessarie ulteriori informazioni.

JSON

{ "Resources": { "MyBucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket" } } } }

YAML

Resources: MyBucket: Type: 'AWS::S3::Bucket' Properties: BucketName: amzn-s3-demo-bucket

Fare riferimento ad altre risorse con la funzione Ref

Gli esempi seguenti mostrano una dichiarazione di risorse che definisce un'EC2istanza e un gruppo di sicurezza. La Ec2Instance risorsa fa riferimento alla InstanceSecurityGroup risorsa come parte della sua SecurityGroupIds proprietà utilizzando la Ref funzione. Include anche un gruppo di sicurezza esistente (sg-12a4c434) che non è dichiarato nel modello. Utilizza stringhe letterali per fare riferimento alle risorse AWS esistenti.

JSON

{ "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroupIds": [ { "Ref": "InstanceSecurityGroup" }, "sg-12a4c434" ], "KeyName": "MyKey", "ImageId": "ami-1234567890abcdef0" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } } } }

YAML

Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: SecurityGroupIds: - !Ref InstanceSecurityGroup - sg-12a4c434 KeyName: MyKey ImageId: ami-1234567890abcdef0 InstanceSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0

Riferimento agli attributi delle risorse utilizzando la funzione Fn::GetAtt

Gli esempi seguenti mostrano una dichiarazione di risorsa che definisce una risorsa di CloudFront distribuzione e un bucket S3. La MyDistribution risorsa specifica il DNS nome della MyBucket risorsa utilizzando la Fn::GetAtt funzione per ottenere l'attributo del bucket. DomainName Noterai che la Fn::GetAtt funzione elenca i suoi due parametri in un array. Per le funzioni che richiedono più parametri, puoi utilizzare un array per specificare i parametri.

JSON

{ "Resources": { "MyBucket": { "Type": "AWS::S3::Bucket" }, "MyDistribution": { "Type": "AWS::CloudFront::Distribution", "Properties": { "DistributionConfig": { "Origins": [ { "DomainName": { "Fn::GetAtt": [ "MyBucket", "DomainName" ] }, "Id": "MyS3Origin", "S3OriginConfig": {} } ], "Enabled": "true", "DefaultCacheBehavior": { "TargetOriginId": "MyS3Origin", "ForwardedValues": { "QueryString": "false" }, "ViewerProtocolPolicy": "allow-all" } } } } } }

YAML

Resources: MyBucket: Type: 'AWS::S3::Bucket' MyDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: !GetAtt - MyBucket - DomainName Id: MyS3Origin S3OriginConfig: {} Enabled: 'true' DefaultCacheBehavior: TargetOriginId: MyS3Origin ForwardedValues: QueryString: 'false' ViewerProtocolPolicy: allow-all