Resources référence de syntaxe de section pour les CloudFormation modèles - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Resources référence de syntaxe de section pour les CloudFormation modèles

La Resources section est une section de niveau supérieur obligatoire dans un CloudFormation modèle. Il déclare les AWS ressources que vous souhaitez CloudFormation provisionner et configurer dans le cadre de votre stack.

Syntaxe

La Resources section utilise la syntaxe suivante :

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 logique (également appelé nom logique)

Dans un CloudFormation modèle, les ressources sont identifiées par leurs noms de ressources logiques. Ces noms doivent être alphanumériques (a-Za-Z0-9) et uniques dans le modèle. Les noms logiques sont utilisés pour référencer les ressources d'autres sections du modèle.

Type de ressource

Chaque ressource doit avoir un Type attribut qui définit le type de AWS ressource dont il s'agit. L'Typeattribut possède le formatAWS::ServiceName::ResourceType. Par exemple, l'Typeattribut d'un compartiment Amazon S3 estAWS::S3::Bucket.

Pour obtenir la liste complète des types de ressources pris en charge, consultez leAWS référence aux types de ressources et de propriétés.

Propriétés de ressource

Les propriétés des ressources sont des options supplémentaires que vous pouvez spécifier pour définir les détails de configuration pour le type de ressource spécifique. Certaines propriétés sont obligatoires, tandis que d'autres sont facultatives. Certaines propriétés ont des valeurs par défaut. La spécification de ces propriétés est donc facultative.

Pour plus de détails sur les propriétés prises en charge pour chaque type de ressource, consultez les rubriques dansAWS référence aux types de ressources et de propriétés.

Les valeurs de propriété peuvent être des chaînes littérales, des listes de chaînes, des booléens, des références dynamiques, des références de paramètres, des pseudo-références ou la valeur renvoyée par une fonction. Les exemples suivants vous montrent comment déclarer différents types de valeur de propriété :

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

Identifiant physique

Outre l'identifiant logique, certaines ressources possèdent également un identifiant physique, qui est le nom réellement attribué à cette ressource, tel qu'un identifiant d'EC2instance ou un nom de compartiment S3. Utilisez le physique IDs pour identifier les ressources en dehors des CloudFormation modèles, mais uniquement après leur création. Supposons, par exemple, que vous donniez à une ressource d'EC2instance un ID logique deMyEC2Instance. Lors de la CloudFormation création de l'instance, il génère et attribue CloudFormation automatiquement un identifiant physique (tel quei-1234567890abcdef0) à l'instance. Vous pouvez utiliser cet identifiant physique pour identifier l'instance et consulter ses propriétés (telles que le DNS nom) à l'aide de la EC2 console Amazon.

Pour les compartiments Amazon S3 et de nombreuses autres ressources, génère CloudFormation automatiquement un nom physique unique pour la ressource si vous ne le spécifiez pas explicitement. Ce nom physique est basé sur une combinaison du nom de la CloudFormation pile, du nom logique de la ressource spécifié dans le CloudFormation modèle et d'un identifiant unique. Par exemple, si vous avez un compartiment Amazon S3 dont le nom logique figure MyBucket dans une pile nomméeMyStack, vous CloudFormation pouvez le nommer avec le nom physique suivantMyStack-MyBucket-abcdefghijk1.

Pour les ressources qui prennent en charge les noms personnalisés, vous pouvez attribuer vos propres noms physiques pour vous aider à identifier rapidement les ressources. Par exemple, vous pouvez attribuer le nom MyPerformanceLogs à un compartiment S3 qui stocke des journaux. Pour de plus amples informations, veuillez consulter Type de nom.

Ressources de référencement

Il est souvent nécessaire de définir les propriétés d'une ressource en fonction du nom ou de la propriété d'une autre ressource. Par exemple, vous pouvez créer une EC2 instance qui utilise des groupes de EC2 sécurité ou une CloudFront distribution basée sur un compartiment S3. Toutes ces ressources peuvent être créées dans le même CloudFormation modèle.

CloudFormation fournit des fonctions intrinsèques que vous pouvez utiliser pour faire référence à d'autres ressources et à leurs propriétés. Ces fonctions vous permettent de créer des dépendances entre les ressources et de transmettre des valeurs d'une ressource à une autre.

La fonction Ref

La Ref fonction est couramment utilisée pour récupérer une propriété d'identification des ressources définies dans le même CloudFormation modèle. Ce qu'il renvoie dépend du type de ressource. Pour la plupart des ressources, il renvoie le nom physique de la ressource. Toutefois, pour certains types de ressources, il peut renvoyer une valeur différente, telle qu'une adresse IP pour une AWS::EC2::EIP ressource ou un nom de ressource Amazon (ARN) pour un SNS sujet Amazon.

Les exemples suivants montrent comment utiliser la Ref fonction dans les propriétés. Dans chacun de ces exemples, la Ref fonction renverra le nom réel de la LogicalResourceName ressource déclarée ailleurs dans le modèle. L'exemple de !Ref syntaxe présenté dans YAML cet exemple n'est qu'une manière plus courte d'écrire la Ref fonction.

JSON

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

YAML

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

Pour des informations plus détaillées sur la Ref fonction, voir Fonction Ref.

La fonction Fn::GetAtt

La Ref fonction est utile si le paramètre ou la valeur renvoyé pour une ressource correspond exactement à ce que vous souhaitez. Cependant, il se peut que vous ayez besoin d'autres attributs d'une ressource. Par exemple, si vous souhaitez créer une CloudFront distribution avec une origine S3, vous devez spécifier l'emplacement du compartiment à l'aide d'une adresse de DNS type -style. Plusieurs ressources possèdent des attributs supplémentaires dont vous pouvez utiliser les valeurs dans le modèle. Pour obtenir ces attributs, vous devez utiliser la Fn::GetAtt fonction.

Les exemples suivants montrent comment utiliser la GetAtt fonction dans les propriétés. La Fn::GetAtt fonction prend deux paramètres, le nom logique de la ressource et le nom de l'attribut à récupérer. L'exemple de !GetAtt syntaxe présenté dans YAML cet exemple n'est qu'une manière plus courte d'écrire la GetAtt fonction.

JSON

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

YAML

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

Pour des informations plus détaillées sur la GetAtt fonction, voir Fn : : GetAtt.

Exemples

Les exemples suivants montrent comment déclarer des ressources et comment les CloudFormation modèles peuvent faire référence à d'autres ressources définies dans le même modèle et dans AWS des ressources existantes.

Déclarer une ressource unique avec un nom personnalisé

L'exemple suivant déclare une ressource unique de type AWS::S3::Bucket portant le nom logiqueMyBucket. La BucketName propriété est définie sur amzn-s3-demo-bucket, qui doit être remplacé par le nom souhaité pour votre compartiment S3.

Si vous utilisez cette déclaration de ressource pour créer une pile, vous CloudFormation créerez un compartiment Amazon S3 avec les paramètres par défaut. Pour d'autres ressources, telles qu'une EC2 instance Amazon ou un groupe Auto Scaling, des CloudFormation informations supplémentaires sont nécessaires.

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

Référencement d'autres ressources à l'aide de la fonction Ref

Les exemples suivants présentent une déclaration de ressource qui définit une EC2 instance et un groupe de sécurité. La Ec2Instance ressource fait référence à la InstanceSecurityGroup ressource dans le cadre de sa SecurityGroupIds propriété à l'aide de la Ref fonction. Il inclut également un groupe de sécurité existant (sg-12a4c434) qui n'est pas déclaré dans le modèle. Les chaînes littérales permettent de faire référence à des ressources AWS existantes.

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

Référencement des attributs de ressources à l'aide de la fonction Fn::GetAtt

Les exemples suivants présentent une déclaration de ressource qui définit une ressource CloudFront de distribution et un compartiment S3. La MyDistribution ressource spécifie le DNS nom de la MyBucket ressource à l'aide de la Fn::GetAtt fonction pour obtenir l'DomainNameattribut du compartiment. Vous remarquerez que la Fn::GetAtt fonction répertorie ses deux paramètres dans un tableau. Pour les fonctions qui acceptent plusieurs paramètres, un tableau permet de spécifier ces derniers.

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