Je sais qu'il est possible via l'utilisation de Conditions de créer conditionnellement (quoi d'autre?) Des ressources.
J'essaie cependant de trouver un moyen de créer conditionnellement des propriétés de ressources;
dans mon cas, je crée plusieurs EC2
instances dans un sous-réseau avec affectation IP publique par défaut = false
.
Parfois, cependant, à des fins de débogage, je souhaite que mes instances obtiennent des adresses IP publiques.
Maintenant, je dois commenter les propriétés SG/Subnet et NetworkInterfaces
ci-dessous (celles-ci ne vont pas ensemble)
myEC2:
Type: AWS::EC2::Instance
Metadata:
Comment: My EC2 Instance
AWS::CloudFormation::Init:
config:
commands:
01_provision:
command:
!Sub |
sed -i "s/somestring/${somevar}/" /some/path/
CreationPolicy:
ResourceSignal:
Timeout: PT4M
Properties:
ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
InstanceType: "t2.2xlarge"
# SubnetId: !Ref SBNDemo1
# SecurityGroupIds: [!Ref SGInternalDemo]
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
GroupSet:
- Ref: "SGInternalDemo"
SubnetId:
Ref: "SBNDemo1"
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash -xe
# Start cfn-init
/usr/local/bin/cfn-init -s ${AWS::StackId} -r myEC2 --region ${AWS::Region} || echo 'Failed to run cfn-init'
# All done so signal success
/usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource myEC2 --region ${AWS::Region}
Aucune suggestion?
Peut-être que je me méprends, mais cela ressemble à un cas d'utilisation de paramètre plutôt qu'à un cas d'utilisation de condition. Je dis cela parce que vous ne dites pas dans quelles conditions vous souhaitez une adresse IP publique. Juste "parfois à des fins de débogage" Comment le modèle pourrait-il savoir que vous déboguez? Vous devez le dire avec un paramètre.
consultez les documents https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html
Vous pouvez donc avoir un paramètre ip public et un paramètre id de sous-réseau et transmettre ce que vous aimez lors de la création de la pile.
Une façon dont les conditions pourraient être utiles est de créer un paramètre de débogage qui permuterait l'IP et le sous-réseau public/privé. C'est à ça que tu pensais?
Pour utiliser des conditions sur les propriétés, utilisez la fonction IF
Je suggère de configurer votre sous-réseau public pour fournir une adresse IP publique au lancement, et bien sûr de vous assurer que votre sous-réseau privé ne le fait pas. Ensuite, passez simplement le sous-réseau en tant que paramètre.
https://docs.aws.Amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip