CloudFormationでインポート済みリソースが表示されて詰んだ場合のTips

SRE(インフラエンジニア)チームの加藤です。
今回は時折り悩まされていたCloudFormationで既存スタックにリソースをインポートする際のエラーを先日解消できた喜びを共有します。

我々のチームではInfrastructure as Codeを実践しており、AWSリソースのコード管理にCloudFormationを使っています。
CloudFormationを利用していると作成済みのリソースをインポートする機会はあると思います。インポートの際に次のようなエラーが起こって困っていました。

  • 複数回に分けてインポートする際、インポート済みリソースが2回目以降もインポート対象に出てくる

  • インポートできないリソースを新規作成後、別のリソースをインポートしようとすると「このリソースはインポートをサポートしていません」と表示される

こうなると構築作業が進まないので詰んでしまうわけですが、どうもしばらく時間をおく、もしくは翌朝になると解消している、という事象がチームメンバーを困らせていました。
その解決策はただ画面のリロードをする、という単純なものでした。

以下、動作確認用のテンプレートを作成しました。Vpcを1つインポートするだけの単純なものです。

AWSTemplateFormatVersion: '2010-09-09'
Description: Test Template

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    DeletionPolicy: Retain
    Properties:
      CidrBlock: 172.31.0.0/16

「スタックの作成」から「既存のリソースを使用(リソースをインポート)」を選択して、テンプレートを指定、ポチポチとVpcIdなどを入力して実行、無事にVpcのインポートが完了。

初回インポート

次に先ほどのテンプレートにSubnet1を追加しました。

AWSTemplateFormatVersion: '2010-09-09'
Description: Test Template

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    DeletionPolicy: Retain
    Properties:
      CidrBlock: 172.31.0.0/16
  Subnet1:
    Type: AWS::EC2::Subnet
    DeletionPolicy: Retain
    Properties:
      CidrBlock: 172.31.0.0/20
      VpcId: !Ref Vpc

ではSubnet1もインポートします。「スタックアクション」から「スタックへのリソースのインポート」を選択して、更新したテンプレートファイルを指定、次へを押すと

2回目インポートを実行しようとするとVpcもインポート対象になっている

なんでやー
さきほどインポート済みのVpcが再出現。というわけで無事に事象は再現しました。

いつもここで困っていたのですが先日、たまたま発見した解決方法が画面のリロードでした。
え、それだけ?って、なかなかリロードしないですよね、、、構築作業中。盲点でした。そもそも画面にステートもっているの?と疑問ですが、そういう仕様なので仕方がないですね。
以上、CloudFormationでインポート済みリソースが表示されて詰んだ場合のTipsでした。

CLIを使わないの?
えぇ、そのとおりです。でも大人(銀行)の事情で使うの大変なんです。
Terraform使わないの?
えぇ、そのとおりです。でも大人(銀行)の事情で使うの大変なんです。

一緒に働くSRE(インフラエンジニア)を募集中です。
オンプレ経験のみのエンジニアさんが応募してきますが、我々はクラウドとコンテナの経験がないと厳しいかなーと思います。採用情報まとめていますのでぜひご参照のうえ、ご応募ください。