De ce văd un 'nu a găsit de așteptat nod de conținut atunci când pun în aplicare această condiție în Cloudformation?

0

Problema

Vreau sa recuperez diferite resourceRecords, în funcție de dacă condiția este adevărată, altfel schimbarea șir dacă numele este altceva. Aici este exemplul meu:

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
              - "." 
        ]

Am rula cfn-scame și am văzut o eroare cu privire did not find expected node content chiar înainte de !Join comanda, direct după !If declarație. Sunt următoarele starea formula ->

!If [condition_name, value_if_true, value_if_false]

Multumesc

1

Cel mai bun răspuns

1

În YAML, fluxul de stil noduri (de exemplu, […], {…}) nu poate conține stil bloc noduri (adică tot ceea ce este structurat cu indentare). De asemenea, aveți mai multe structuri care nu au sens, de exemplu

- !Join
- ""

Aici, primul element este etichetat cu !Join dar goale, astfel încât nimic nu va fi alăturat. Același lucru este valabil pentru

- !GetAtt
- domainName

O rescriere care pare să aibă sens ar fi

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

După cum puteți vedea, am renuntat la interior {…} pentru că YAML sprijină [a: b] ca notație prescurtare pentru [{a: b}].

Dacă doriți să utilizați fluxul de stil noduri, aveți nevoie pentru a face toate cuprinse nodurile fluxului de stil:

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

Vă mulțumesc, cu toate acestea, după următorul exemplu sunt mai vezi cu aceeași problemă. De asemenea, ai spus că -GetAtt -domainName nu va face nimic, dar e obtaitning valoarea domeniului și utilizarea ca nume de înregistrare resursă. Trebuie să specificați un delimitator cu Join declarație de aceea "" este direct după ea.
i'i'i'i'i'i'i'i'i'i

@i ' i ' i ' i ' i ' i ' i ' i ' i ' i nu m-Ați înțeles. Pentru !GetAttr pentru a face ceva trebuie să fie aplicat la nodul care conține nume de valoare. În codul dvs., !GetAttr este aplicat un gol nod care este parte dintr-o secvență, și următorul element din secvență este domainName – ceea ce nu este văzut de către !GetAttr. Compara că la sugestia mea unde !GetAttr se aplică la întreaga secvență care conține domainName etc. btw, medicii sugerează aveți nevoie pentru a face !GetAttr domainName.regionalValue
flyx

În alte limbi

Această pagină este în alte limbi

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