Bu koşulu Cloudformation içinde uygularken neden 'beklenen düğüm içeriğini bulamadı' görüyorum?

0

Soru

Koşulumun doğru olup olmadığına bağlı olarak farklı kaynak kayıtları almak istiyorum, aksi takdirde ad başka bir şeyse dizeyi değiştiriyorum. İşte benim örneğim:

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

Cfn-lint'i çalıştırdım ve aşağıdakilerle ilgili bir hata görüyorum did not find expected node content hemen önce !Join komut, hemen sonra benim !If açıklama. Koşul formülünü takip ediyorum - >

!If [condition_name, value_if_true, value_if_false]

Teşekkürler

1

En iyi cevabı

1

Yaml'de akış tarzı düğümler (örn. […], {…}) blok tarzı düğümler içeremez (yani girintiyle yapılandırılmış her şey). Ayrıca, mantıklı olmayan birden fazla yapınız var, örn.

- !Join
- ""

Burada, ilk öğe ile etiketlenir !Join ama boş, bu yüzden hiçbir şey birleştirilmeyecek. Aynı şey için de geçerli

- !GetAtt
- domainName

Mantıklı görünen bir yeniden yazma şöyle olurdu

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

Gördüğünüz gibi, iç kısmını düşürdüm. {…} çünkü YAML destekliyor [a: b] kısaltma gösterimi olarak [{a: b}].

Akış stili düğümleri kullanmak istiyorsanız, içerdiği tüm düğümleri akış stili yapmanız gerekir:

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

Teşekkür ederim, ancak örneğinizi takip ettikten sonra hala aynı sorunu görüyorum. Ayrıca, - GetAtt-domainname'in hiçbir şey yapmayacağından bahsediyorsunuz, ancak alan adının değerini belirliyor ve kaynak kaydının adı olarak kullanıyor. Joın ifadesiyle bir sınırlayıcı belirtmeniz gerekir, bu nedenle "" doğrudan peşindedir.
i'i'i'i'i'i'i'i'i'i

@ i'''''''''i Benim bakış açımı yanlış anladın. İçin !GetAttr bir şey yapmak için değer adını içeren düğüme uygulanması gerekir. Kodunuzda, !GetAttr bir dizinin parçası olan boş bir düğüme uygulanır ve sıradaki bir sonraki öğe domainName – seen tarafından değil !GetAttr. Bunu önerimle karşılaştırın !GetAttr içeren tüm diziye uygulanır domainName vb. btw, dokümanlar yapmanız gerekebileceğini öne sürüyor !GetAttr domainName.regionalValue
flyx

Diğer dillerde

Bu sayfa diğer dillerde

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