3 votes

Paramètres spécifiques AWS et Erreur de liste de chaînes d'EC2 SecurityGroupIds

J'ai un problème plutôt ennuyeux que je suis incapable de résoudre et je ferai de mon mieux pour expliquer.

L'exemple ci-dessous fonctionne, dans lequel je suis capable de référencer un paramètre et d'assigner les groupes de sécurité à mon instance via la propriété SecurityGroupIds :

"Parameters" : {
      "pDefaultSg" : {
        "Description" : "AWS2 VPC groupes de sécurité par défaut",
        "Type" : "List",
        "Default" : "sg-245xxxxx,sg-275xxxxx,sg-235xxxxx" 
      }
    }

    "Resources" : {
      "ec2Instance" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
        "SecurityGroupIds" : { "Ref" : "pDefaultSg" } 
      }
}

Le problème commence lorsque je veux également ajouter une deuxième valeur à la propriété SecurityGroupIds en faisant référence à une ressource de groupe de sécurité instanciée dans le même modèle :

"Resources" : {
    "ec2Instance" : { ...
        "SecurityGroupIds" : [ { "Ref" : "pDefaultSg" }, { "Fn::GetAtt" : "sgDb", "GroupId" } ],
    ....  

    "sgDb" : {
        "Type" : "AWS::EC2::SecurityGroup",
        "Properties" : { ...

Je ne parviens alors pas à éviter l'erreur suivante qui provoque le rollback de la pile Cloudformation :

La valeur de la propriété SecurityGroupIds doit être de type Liste de Chaînes

Je serais vraiment reconnaissant pour tout conseil.

Merci beaucoup

1voto

georgealton Points 621

Le problème est que lorsque pDefaultSg est accédé via la fonction intrinsèque Ref, il renvoie une liste, donc votre propriété SecurityGroupIds ressemble à

[["sg-245xxxxx","sg-275xxxxx","sg-235xxxxx"],"sg-1234DB"]

La solution est de changer votre propriété SecurityGroupIds en utilisant Fn::Join pour la liste pDefaultSg en une chaîne séparée par des virgules suivie de sgDb:

"SecurityGroupIds": [ 
  {"Fn::Join": 
    [",", 
      {"Ref": "pDefaultSg"}
    ]
  }, 
  { "Fn::GetAtt" : ["sgDb", "GroupId"] } 
]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X