Pourquoi suis-je en voyant "n'a pas trouver prévu contenu du nœud' lors de la mise en œuvre de cette condition dans Cloudformation?

0

La question

Je veux récupérer les différentes resourceRecords, selon que ma condition est vraie, sinon la modification de la chaîne si le nom est quelque chose d'autre. Voici mon exemple:

myDNSresource:
    Type: AWS::Route53::RecordSet
    Condition: devEnv
    Properties:
      HostedZoneName: {"Fn::ImportValue": !Sub "${stackName}-${AWS::Region}-dnsZone"}
      Name: !Join [".", [!Ref hostname, {"Fn::ImportValue": !Sub "${stackname}-${AWS::Region}-dnsZone"}]]
      Type: CNAME
      TTL: 130
      ResourceRecords:
        - !If [conditionIsTrue, !Join [".", [{"Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"}]],
            - !Join
            - ""
            - - !GetAtt
              - domainName
              - regionalValue
              - "." 
        ]

J'ai couru cfn-les peluches et la je vois un message d'erreur concernant did not find expected node content juste avant la !Join commande, directement après mon !If l'énoncé. Je suis à la suite de la condition de la formule ->

!If [condition_name, value_if_true, value_if_false]

Merci

1

La meilleure réponse

1

En YAML, le débit de style nœuds (c'est à dire […], {…}) ne peut pas contenir de style blocs de nœuds (c'est à dire tout ce qui est structuré avec indentation). Aussi, vous disposez de plusieurs structures qui ne font pas sens, par exemple

- !Join
- ""

Ici, le premier élément est taggés avec !Join mais vides, donc rien ne sera plus rejoint. En va de même pour

- !GetAtt
- domainName

Une réécriture qui semble de bon sens serait

- !If
  - conditionIsTrue
  - !Join [".", ["Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"]]
  - !Join
    - ""
    - !GetAtt
      - domainName
      - regionalValue
      - "." 

Comme vous pouvez le voir, j'ai abandonné l'intérieur {…} parce que YAML prend en charge [a: b] comme notation abrégée pour [{a: b}].

Si vous souhaitez utiliser le flux de style nœuds, vous avez besoin de faire tous les noeuds contenus de flux style:

- !If [
    conditionIsTrue, 
    !Join [
      ".",
      ["Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"]
    ],
    !Join ["", !GetAtt [domainName, regionalValue, "."]]
  ]
2021-11-22 18:44:14

Merci, cependant, après avoir suivi votre exemple, je vois toujours le même problème. Aussi, vous mentionnez que -GetAtt -nom de domaine ne sera pas faire quelque chose cependant, c'est obtaitning la valeur du nom de domaine et le nom de l'enregistrement de ressource. Vous devez spécifier un séparateur avec le Join c'est pourquoi "" est directement après.
i'i'i'i'i'i'i'i'i'i

@i i i i i i i i i i Vous avez mal compris mon point. Pour !GetAttr pour faire quelque chose, il doit être appliqué au nœud qui contient le nom de la valeur. Dans votre code, !GetAttr est appliquée à un nœud vide qui fait partie d'une séquence, et l'article suivant dans la séquence est domainName – ce qui n'est pas vu par !GetAttr. Comparez cela à ma suggestion où !GetAttr est appliqué à l'ensemble de la séquence contenant domainName etc. btw, les médecins suggèrent que vous deviez faire !GetAttr domainName.regionalValue
flyx

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................