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.
CloudFormation Resourcessyntaxe du modèle
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 section Resources 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::ResourceTypeProperties:PropertyName1: PropertyValue1...LogicalResourceName2: Type: AWS::ServiceName::ResourceTypeProperties: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 attribut Type, qui définit le type de ressource AWS
dont il s’agit. L’attribut Type a le format AWS::. Par exemple, l’attribut ServiceName::ResourceTypeType pour un compartiment Amazon S3 est AWS::S3::Bucket.
Pour obtenir la liste complète des types de ressources pris en charge, consultez la Référence des types de ressources et de propriétés AWS.
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 d’un 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, leur spécification est donc facultative.
Pour plus d’informations sur les propriétés prises en charge pour chaque type de ressource, consultez les rubriques de la Référence des types de ressources et de propriétés AWS.
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 valeurs de propriété :
JSON
"Properties" : { "String" : "A string value", "Number" :123, "LiteralList" : [ "first-value", "second-value" ], "Boolean" :true}
YAML
Properties:String:A string valueNumber:123LiteralList: -first-value-second-valueBoolean:true
ID 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' EC2 instance 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' EC2 instance 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 nom DNS) à 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 afin de vous aider à identifier rapidement les ressources. Par exemple, vous pouvez attribuer le nom MyPerformanceLogs à un compartiment S3 qui stocke des journaux. Pour plus d'informations, consultez Type de nom.
Référencement des ressources
Souvent, vous devez 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’elle renvoie dépend du type de ressource. Pour la plupart des ressources, elle renvoie le nom physique de la ressource. Cependant, pour certains types de ressources, elle peut renvoyer une valeur différente, telle qu’une adresse IP pour une ressource AWS::EC2::EIP ou un Amazon Resource Name (ARN) pour une rubrique Amazon SNS.
Les exemples suivants illustrent comment utiliser la fonction Ref dans les propriétés. Dans chacun de ces exemples, la fonction Ref renvoie le nom réel de la ressource LogicalResourceName déclarée ailleurs dans le modèle. L’exemple de syntaxe !Ref dans l’exemple YAML est simplement une façon plus concise d’écrire la fonction Ref.
JSON
"Properties" : { "PropertyName" : { "Ref" : "LogicalResourceName" } }
YAML
Properties:PropertyName1: Ref:LogicalResourceNamePropertyName2: !RefLogicalResourceName
Pour plus d’informations sur la fonction Ref, consultez Ref.
La fonction Fn::GetAtt
La fonction Ref est utile si le paramètre ou la valeur renvoyée pour une ressource correspond exactement à ce que vous voulez. Cependant, vous pouvez avoir 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 type DNS. Plusieurs ressources possèdent des attributs supplémentaires dont vous pouvez utiliser les valeurs dans le modèle. Pour obtenir ces attributs, utilisez la fonction Fn::GetAtt.
Les exemples suivants illustrent comment utiliser la fonction GetAtt dans les propriétés. La fonction Fn::GetAtt prend deux paramètres : le nom logique de la ressource et le nom de l’attribut à récupérer. L’exemple de syntaxe !GetAtt dans l’exemple YAML est simplement une façon plus concise d’écrire la fonction GetAtt.
JSON
"Properties" : { "PropertyName" : { "Fn::GetAtt" : [ "LogicalResourceName", "AttributeName" ] } }
YAML
Properties:PropertyName1: Fn::GetAtt: -LogicalResourceName-AttributeNamePropertyName2: !GetAttLogicalResourceName.AttributeName
Pour plus d’informations sur la fonction GetAtt, consultez 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.
Rubriques
Déclaration d’une seule ressource avec un nom personnalisé
Les exemples suivants déclarent une seule ressource de type AWS::S3::Bucket avec le nom logique MyBucket. La propriété BucketName 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 les autres ressources, telles qu'une EC2 instance Amazon ou un groupe Amazon EC2 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 avec 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 ressource Ec2Instance référence la ressource InstanceSecurityGroup dans le cadre de sa propriété SecurityGroupIds à l’aide de la fonction Ref. Elle 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 ressource à 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 ressource MyDistribution spécifie le nom DNS de la ressource MyBucket à l’aide de la fonction Fn::GetAtt pour obtenir l’attribut DomainName du compartiment. Vous remarquerez que la fonction Fn::GetAtt 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