🐕

CDK で ECSで EC2(ASG) リソース使用時の単体テストで発生したエラーとその解決方法

2023/06/09に公開

CDK を使って ECS リソースのユニットテストを行う際に遭遇したエラーとその解決方法について記載します。

まず、エラーの内容ですが、テスト実行時に以下のエラーメッセージが出力されました。

The provided launch template does not expose its user data

このエラーは、ECS の AsgAutoScalingGroup の起動テンプレート( LaunchTemplate )に UserData が指定されていなかったことが原因でした。

以下に、エラーが再現するコード例です。

const asgLaunchTemplate = new ec2.LaunchTemplate(this, 'ASG-LaunchTemplate', {
    instanceType: new ec2.InstanceType('t3.medium'),
    machineImage: ecs.EcsOptimizedImage.amazonLinux2(),
});

このコードは UserData が指定されていないためエラーが発生します。修正するには UserData の値を指定する必要があります。

const asgLaunchTemplate = new ec2.LaunchTemplate(this, 'ASG-LaunchTemplate', {
    instanceType: new ec2.InstanceType('t3.medium'),
    machineImage: ecs.EcsOptimizedImage.amazonLinux2(),
    userData: ec2.UserData.forLinux(), // 追加
});

これにより、エラーは解決しました。

AWS CDK の公式ドキュメント内でも AsgCapacityProvider 引数に LaunchTemplate を使用する場合には、LaunchTemplate に userData を指定する必要があると記載されていました。

To use LaunchTemplate with AsgCapacityProvider, make sure to specify the userData in the LaunchTemplate:

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs-readme.html#clusters

参考

https://github.com/aws/aws-cdk/issues/20870
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs-readme.html

Discussion