概要
AWS Batch作成のAutoscalinggroupのテンプレートヴァージョンがデフォルトに戻ってしまう現象に遭遇しました。Batch Compute環境に起動テンプレートを書く際に、注意点があることがわかったので紹介します。
事象と解決法
先日、以下の記事に記載したようなテンプレートでAWS Batchを作成しました。
すると、AWS Batchからジョブが発行されてAutoscalinggroupが動くたびに、その「起動テンプレート」の「ヴァージョン」がデフォルトヴァージョン(1)に戻ってしまう現象に遭遇しました。つまり、例えばインスタンスタイプを変えるなどしてヴァージョン2を作成、Autoscalinggroupでヴァージョン2を選んでも、一度Autoscalingを使用すると、ヴァージョン2にした更新情報は失われ、デフォルト(1)に戻ってしまうのです。
その原因は、BatchComputeEnvironment
のLaunchTemplate
のVersion
にありました。
ここで、デフォルト以外のものを指定する必要があったのです。
BatchComputeEnvironment:
Type: 'AWS::Batch::ComputeEnvironment'
Properties:
# 略 #
ComputeResources:
# 略 #
LaunchTemplate:
LaunchTemplateName: "EC2Template_sample"
Version: $Latest
ここになにも指定していない場合、管理コンソールのBatchComputeEnvironment
詳細を確認すると起動テンプレートは「 -
」と表示されているのですが、これ実はデフォルトが適用されています。私は「 -
」とあるので、Autoscalinggroupの方で設定したヴァージョンが生きるのだと勘違いしていました。
挙動を確認するに、BatchComputeEnvironment
で指定されたテンプレートのヴァージョンが、Autoscalinggroupで指定されているテンプレートのヴァージョンを上書きする形になっているようです。指定がない場合は、デフォルトのヴァージョンで上書きされるわけです。
そもそもこのAutoscalinggroupはBatchComputeEnvironment
作成時に自動で生成されたものであるので、BatchComputeEnvironment
配下のリソースというイメージになるのだと思います。
「Autoscalinggroupは既に別の起動テンプレートを選択してしまっている!」という場合でデフォルトバージョン以外を適用したい場合は、一度BatchComputeEnvironment
から作成し直して、上記yaml例のようにテンプレートヴァージョンを指定する形を加える必要があります。ちなみに、ここはバージョン番号、$Default
、$Latest
のいずれかを選ぶ必要があります。
これにより、デフォルトのヴァージョンに戻ってしまう現象が解決しました。
以下、AWS公式ドキュメントに近しいものがあったので紹介しておきます。
これらのルールに従うと、インフラストラクチャの更新をトリガーする更新により、AMI ID が再選択されます。起動テンプレートversionの (launchTemplate)設定が$Latestまたは$Defaultに設定されている場合、launchTemplateを更新していない場合でも、インフラストラクチャの更新時に起動テンプレートの最新バージョンまたはデフォルトバージョンが評価されます。
AWS BatchとAutoscalinggroup、起動テンプレートの関連性についてはあまり記事が見当たらず、体験談ベースのようなものになってしまいました。見識・経験のある方でなにかお気付きのことがあればぜひコメントで教えてください!