概要
AWSが提供するECSのAMIバージョンami-06c98c6fe6f20c437
(2.0.20191031 x86_64 ECS HVM GP2)、ami-0064e711cbc7a825e
(2.0.20191024.3 x86_64 HVM gp2) において、cloud-initスクリプト内に日本語が含まれるとインスタンスが正常に起動しない不具合が見つかってます。
再現の検証は行ってませんが、最新のAmazon Linux 2 AMI
イメージでも同様の現象が発生するとAWSより回答が得られました。
現象
AWSのリソースはTerraformで管理しており、スケールアウト時は常に最新のイメージを取得する仕組みを作ってました。
data "aws_ami" "this" {
most_recent = true
filter {
name = "architecture"
values = ["x86_64"]
}
filter {
name = "name"
values = ["amzn2-ami-ecs-hvm-*"]
}
owners = ["amazon"]
}
先日スケールアウトを実施したところ、AMIがami-06c98c6fe6f20c437
(2.0.20191031 x86_64 ECS HVM GP2) に更新されていたのですが、このバージョンを利用するとコンテナインスタンスにSSHで接続できない、ECSクラスタに正しくマッピングされず、defaultクラスタが作成されるといった障害が起きました。
原因を調べたところ、userdata経由でcloud-initを実行していたのですが、スクリプト内に日本語が含まれると正しくインスタンスが起動しない問題と判明。
システムログでも対象AMIでエンコーディングに関するエラーが出ていました。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 429-431: ordinal not in range(128)
問題のcloud-init。
#cloud-config
repo_update: true
...
# 日本語のコメントがあるとインスタンスが正常に起動しない
ちなみにシステムログはマネージメントコンソールだとEC2のInstance Settings
から確認することができます。
サポートに問い合わせたところ、Amazon ECS-optimized AMI
、Amazon Linux 2 AMI
のいずれも同様の現象が再現され、cloud-initの挙動に関する不具合と回答を得られました。
AMIが改修されるまでの間は、一時的な回避策として日本語のコメントを外すか、不具合の起きないami-057631c6a4834e06d
(2.0.20191014 x86_64 ECS HVM GP2)を利用するのが良さそうです。