J'ai
Parameters
Zookeeper1SubnetParam:
Description: Subnet where Zookeeper 1 should run
Type: AWS::EC2::Subnet::Id
Zookeeper1AZ:
Description: Availability Zone of the Subnet
Type: AWS::EC2::AvailabilityZone::Name
À partir de là, je crée un ENI (qui nécessite un sous-réseau) et un EBS Volume (qui nécessite une zone de disponibilité).
Voici l'ENI:
Zookeeper1IPResource:
Properties:
Description: Zookeeper1-IP
GroupSet:
- Fn::GetAtt:
- ZookeeperSecurityGroup
- GroupId
PrivateIpAddress:
Ref: Zookeeper1IPParam
SubnetId:
Ref: Zookeeper1SubnetParam
Type: AWS::EC2::NetworkInterface
Et voici l'EBS:
Zookeeper1EBSVolume:
Properties:
AvailabilityZone:
Ref: Zookeeper1AZ
Size: 8
VolumeType: gp2
Type: AWS::EC2::Volume
Je trouve cela très mauvais pour l'expérience utilisateur, de demander également en tant que paramètre pour une zone de disponibilité, car il peut être déduit du sous-réseau sélectionné
Maintenant, la question à un million de dollars, comment puis-je obtenir la zone de disponibilité du sous-réseau dans CloudFormation? Autant que je sache, je ne peux pas utiliser GetAtt for AZ sur mon ENI.
Toute solution bienvenue!
Pour répondre à votre question,vous ne pouvez pasextraire la zone de disponibilité du sous-réseau.
Mais si vous avez le contrôle total du modèle ou des ressources fournissant le paramètre à votre modèle, il existe des solutions de contournement
Si vous avez le contrôle sur la source pour vous fournir le paramètre Subnet
, vous pouvez également renvoyer le Availability Zone
à partir de cette source en tant que Outputs
et le fournir dans votre modèle en tant que paramètre permettant de créer ENI et EBS.
En outre, vous pouvez également créer le sous-réseau dans le même modèle que vous créerez l’ENI et l’EBS et utiliserez le { "Fn::GetAtt" : [ "mySubnet", "AvailabilityZone" ] }
.
Question (désolé, mon représentant ne me permet pas encore de commenter)
Avez-vous des valeurs ou des ressources dynamiques à créer qui dépendent des zones de disponibilité? Si oui, vous pouvez créer Mappages et si cela ne suffit pas, vous pouvez ajouter Conditions dans votre modèle.