0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エディタは真っ赤。なのにデプロイは通った話【AWS / CloudFormation】

0
Posted at

はじめに

CloudFormation のテンプレート(YAML)を書いていたら、エディタが !Ref やら何やらを真っ赤なエラーにしてきました。16個くらい赤線。「これは絶対デプロイ通らないやつだ…」と覚悟して aws cloudformation deploy

通りました🎉 え、あの赤は何だったの?

エディタの赤線に、まんまとビビらされました😅

エディタが赤いのにデプロイは通った。この食い違いの正体と、「何を見れば確認できるのか」を残します。

環境

  • AWS CloudFormation(YAML テンプレート)
  • エディタ:VS Code / Cursor + YAML 拡張(redhat.vscode-yaml)
  • 検証ツール:cfn-lint
  • リージョン:ap-northeast-1

起きたこと

エディタが赤くしてきたのは、たとえばこんな所でした。

  • !Ref / !GetAtt に「Unresolved tag」
  • アベイラビリティゾーンの指定に「Incorrect type. Expected "string".」
  • UserData のブロック全体に「Expected "string".」

該当箇所はこんな普通の書き方です(AZ を自動取得する定番):

PublicSubnet:
  Type: AWS::EC2::Subnet
  Properties:
    VpcId: !Ref StudyVpc
    AvailabilityZone: !Select [0, !GetAZs ""]   # ← ここが赤くなる

UserData もよく赤くなります(最後は文字列ですが、関数で組み立てるため):

UserData:
  Fn::Base64:
    Fn::Sub: |
      #!/bin/bash
      echo "hello"

どちらも「型が違う」「知らないタグ」と怒られる。でもそのままデプロイは成功しました。

原因

赤を出していたのは、汎用の YAML 拡張です。これは「普通の YAML」を見るツールで、CloudFormation 独自の書き方を知りません。

赤くなる箇所 エディタの言い分 実際は
!Ref / !GetAtt 知らないタグ CloudFormation の短縮形
!Select [0, !GetAZs ""] 文字列のはずが関数で変 デプロイ時に AZ 名へ解決される
UserData 文字列のはず Fn::Base64 / Fn::Sub で組み立てられる

エディタは「関数を実行する前の生の中身」を見て型違いと判定しているだけ。AWS はデプロイ時にこれらを解決するので、今回のテンプレートでは問題ありませんでした

確認のしかた(cfn-lint を優先する)

CloudFormation テンプレートの確認では、エディタの色より cfn-lint を優先して見るのが安全です。

cfn-lint template.yaml
  • E(エラー)が無い → テンプレート上の問題は少なく、デプロイ前の判断材料になる。
    • ただし IAM 権限・既存リソース・リージョン差・クォータ・パラメータ値などで、デプロイ自体は失敗することがあります(cfn-lint はそこまでは保証しません)。
  • W(警告) → 危険な書き方や改善点を教える助言。内容は必ず確認する。
    • 例:パスワードのベタ書きを指摘する W2501 など、警告でも無視しない方がよいものがあります。

短縮タグ(!Ref 等)の誤検知だけなら、エディタ設定で減らせます。settings.json

"yaml.customTags": [
  "!Ref scalar",
  "!GetAtt scalar",
  "!Sub scalar",
  "!Select sequence",
  "!GetAZs scalar"
]

ただし UserData のような複雑な所は赤が残ることもあります。

学び

  • 「エディタの色」と「CloudFormation として有効か」は別物。 赤い=間違い、ではない。
  • テンプレートの確認は cfn-lint を優先(E はデプロイ前の判断材料、W は内容を確認)。
  • ただし cfn-lint が緑でも、実行時の AWS 側の理由でデプロイが失敗することはある。最後は実際の結果も見る。
  • ツールには得意・不得意がある。「何が何を確認できるのか」を見極めるのが大事。

おわりに

赤線に身構えた瞬間こそ、cfn-lint をひと回し——という小さなメモです😅 「エディタは真っ赤だけど大丈夫…?」と不安になった人の参考になれば嬉しいです🙌

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?