Lorsque je crée un modèle dans AWS CloudFormation, je souhaite référencer une ressource dans une autre pile CloudFormation.
Résolution
Pour référencer une ressource dans une autre pile CloudFormation, vous devez d’abord créer des références entre piles. La résolution suivante fournit un exemple d’une méthode permettant de créer une référence entre piles. L’exemple de pile NetworkStack crée les ressources liées au réseau et les exportations nommées ${AWS::StackName}-SecurityGroupID et ${AWS::StackName}-SubnetID. Après la création de la pile, CloudFormation remplace ${AWS::StackName} par NetworkStack. Les noms d’exportation finaux sont NetworkStack-SecurityGroupID et NetworkStack-SubnetID.
Création d’une pile pour exporter les valeurs de sortie
Procédez comme suit :
- Créez une pile CloudFormation, puis utilisez le modèle SampleNetworkCrossStack.
Remarque : Vous devez déclarer le champ Exporter dans la section Sorties du modèle.
- Nommez la pile NetworkStack.
Remarque : NetworkStack exporte les valeurs du sous-réseau et du groupe de sécurité.
Utilisation d’un sous-réseau et d’un groupe de sécurité importés pour créer une instance Amazon EC2
Les propriétés d'instance Amazon Elastic Compute Cloud (Amazon EC2), telles que SubnetId et SecurityGroupId, utilisent les valeurs de la pile d'exportation. Pour importer les valeurs, utilisez la fonction intrinsèque Fn::ImportValue.
Remarque : La pile d'importation et d'exportation doit se trouver dans la même région AWS et sur le même compte AWS. De plus, les noms de valeurs exportés doivent être propres à votre région et à votre compte.
Pour créer l'instance EC2, procédez comme suit :
- Ouvrez la console CloudFormation.
- Choisissez Créer une pile, puis choisissez Modèle de conception.
- Choisissez l'onglet Paramètres de l'éditeur de code, puis choisissez Modèle.
- Pour utiliser les valeurs de la pile d'exportation afin de créer l'instance, entrez le modèle suivant dans l'éditeur de code :
Important : Définissez la pile de ressources NetworkStack comme valeur pour NetworkStackParameter. La valeur NetworkStack remplace le nom de pile dans les fonctions Fn::ImportValue correspondantes.
{ "Parameters": {
"NetworkStackParameter": {
"Type": "String"
}
},
"Resources": {
"WebServerInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"ImageId": "ami-a1b23456",
"NetworkInterfaces": [
{
"GroupSet": [
{
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SecurityGroupID"
}
}
],
"AssociatePublicIpAddress": "true",
"DeviceIndex": "0",
"DeleteOnTermination": "true",
"SubnetId": {
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SubnetID"
}
}
}
]
}
}
}
}
Remarque : Remplacez t2.micro par votre type d'instance et ami-a1b23456 par votre identifiant Amazon Machine Image (AMI).
- Choisissez Créer une pile (icône en forme de nuage avec flèche vers le haut), puis choisissez Suivant.
- Dans le champ Nom de la pile, saisissez le nom de la pile.
- Dans les Paramètres, saisissez le nom de la pile réseau que vous souhaitez utiliser pour la création de références entre piles, comme NetworkStack.
- Choisissez Suivant, puis à nouveau Suivant.
- Choisissez Créer.
- Une fois que l'état de la pile est passé à CREATE_COMPLETE, ouvrez la console Amazon EC2.
- Dans le volet de navigation, sélectionnez Instances, puis choisissez l’instance que vous avez créée.
- Choisissez l’onglet de Description, puis vérifiez que le groupe de sécurité et le sous-réseau sont configurés.
Important : Lorsqu'une autre pile importe la pile source ou les valeurs d'exportation de la pile source, vous ne pouvez pas supprimer ces valeurs. Pour mettre à jour les valeurs d'exportation de la pile source, remplacez d'abord manuellement les valeurs des piles qui importent les valeurs d'exportation de la pile source. Vous pourrez ensuite mettre à jour les valeurs d’exportation de la pile source.
Pour répertorier toutes les piles qui importent une valeur de sortie exportée, exécutez la commande list-imports. Pour répertorier toutes les exportations d’une région AWS, utilisez la console CloudFormation ou exécutez la commande list-exports. Le nom d’exportation doit être unique pour le compte dans la région.
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Informations connexes
Comment utiliser les paramètres dans AWS Systems Manager Parameter Store pour partager les valeurs entre les piles CloudFormation ?
Modèles AWS CloudFormation
AWS::EC2::Instance
Se référer aux sorties de ressources dans une autre pile CloudFormation