すでにご紹介したとおり、EC2のローンチ設定をバージョン管理できるLaunchTemplateがリリースされています。
LaunchTemplateを4つ40バージョンほど書いてみて、出てきた設定を行う上での注意点をご紹介します。
LaunchTemplateの制約事項
LaunchTemplateで基本的な内容を管理する場合には特に問題はないのですが、Advanced detailsを設定した場合にいくつかの制約が発生します。
IAM instance profile
画面上にはe.g. arn:aws:iam::123456789012:role/MyRoleName と表示されているのですが、この表示に合わせて入力しても動作しません。
実際にはロールでは無く、インスタンスプロファイルを指定する必要があります。
ロール ARNではなくインスタンスプロファイル ARN指定する必要があるため
arn:aws:iam::123456789012:instance-profile/MyRoleNameを入力してください。
Shutdown behavior
スポットインスタンスの場合、InstanceInitiatedShutdownBehavior の値が、内部的に[terminate]に固定されています。
このためShutdown behaviorの設定が[Don't include in launch template]になっていないLaunchTemplateを使ってスポットインスタンスを起動しようとした場合、エラーが発生してスポットインスタンスを起動することが出来ません。
User data
インスタンスのUserDataにはマルチバイト文字を含める事が可能ですが、LaunchTemplateのUserDataにはマルチバイト文字を含める事ができません。
このため、既存のUserDataをLaunchTemplate化する際には、日本語によるコメント行などを削除する必要があります。
まとめ
LaunchTemplateはキーペアの設定ミスなどを防止し、インスタンス自動構築などを助ける便利な機能ですが今はまだ1つのLaunchTemplateをオンデマンドインスタンス、スポットインスタンス、AutoScalingグループで使い回すにはコンフリクトする項目があります。
今回の注意点については機能要望としてAWSにも連絡していますので、より使いやすく統一化されることに期待したいと思います。