CFn) !ImportValueでのクロススタック参照はやっぱり密結合っぽくなる(CFn内部の参照エラーで片方を変更できなくなることがある)

以下の続き

SSMパラメータを介したスタック間リソース参照は、参照元のリソースを削除することができた(疎結合)。で、!ImportValueでのいわゆるクロススタック参照だとできなかった気がするので検証してみた。

vpc.yaml, subnet.yamlを以下のようにする

#vpc.yaml
Resources:
...
Outputs:
  VpcId:
    Value: !Ref Vpc
    Export: # 渡す値をExportで出力する
      Name: VpcId
#subnet.yaml
Resources:
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !ImportValue VpcId
...

この状態(update-stack済み)で、vpc.yamlのOutputs:のコメントアウトを試みる。SSMパラメータを利用したスタック間参照ではこれ(サブネットからVPCID用に参照されてるリソースの削除)はできた。

やってみるとエラーになる

Export VpcId cannot be deleted as it is in use by cf-subnet-stack

やっぱり、!ImportValueでのクロススタック参照は参照元のOutputsは削除できなくなる。サブネット自体はVPCIDとしてVPCのそれを掴んでいるわけではないので(値が入ってるだけ)、あくまでCFn上内での整合性的なエラーとして発生している。

確認できてすっきりした。しばらくSSMパラメータでのスタック間リソース参照を試してみようと思う。