🤯

AWS CDKで意図せずEC2インスタンスが再作成されちゃう問題

2024/02/21に公開

AWS CDKで管理しているEC2インスタンスがあるのですが、EC2インスタンスに全く関係のないリソースの変更を行った時に、インスタンスが再作成されちゃう問題に遭遇しました。diffにはまったくでなかったし、deploy前の警告も出ませんでした。再作成されるときもあれば、されないときもあります。なんでだろなー怖いなーと思ってたら、まさかの原因が…

原因:AIMを明確に指定していないから

例えば、以下のようなコードでEC2インスタンスを作成していたとします。

const bastionEc2 = new ec2.Instance(this, "SandBoxBastionHost", {
  vpc,
  vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
  instanceType: ec2.InstanceType.of(
    ec2.InstanceClass.T3,
    ec2.InstanceSize.MICRO,
  ),
  machineImage: new ec2.AmazonLinuxImage({
    generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2023,
  }),
  securityGroup: bastionSg,
  keyPair: ec2.KeyPair.fromKeyPairName(this, "KeyPair", cfnKeyPair.keyName),
});

この machineImage を指定するところで ec2.AmazonLinuxGeneration.AMAZON_LINUX_2023 としています。これはAmazon Linux 2023なのは変わらないのですが、日々AmazonがバージョンアップをしているためAMIが変わるんですね。最近EC2をさわる機会がなかったので、まったく意識してませんでした。

たまたまCDKのスタックをデプロイした時に、AMIが更新されているとEC2インスタンスが新しいAMIで再作成される…というオチでした…。

実際の運用では、自前のAMIを作ってID指定したりすると思うので、遭遇する人は少ないかもしれませんが、ハマった人が抜け出せる確率を少しでも上げるために書き残しておきます。

ムーザルちゃんねる

Discussion