いつものようにAutoScalingグループを作って、試験的にASGの台数を0にしてインスタンス削除後、ASGの指定台数を1にしてデプロイしたら、まさかの失敗。いつもやってることがなぜできない?といろいろ調べたことの顛末。
Status Reason: INstance became unhealthy while waiting for instance to be in InService State.
Termination Reason:Client InternalError: Client error on launch.
いろいろ調べたところ、このインスタンスのEBSはKMSキーで暗号化をかけていた。この暗号化があると、AutoScalingがKMSキーで暗号化されたボリュームのアクセス権限を持っていないため、AutoScalingが発動できずにエラーが出るとのことだった。
編集画面で、AutoScalingサービスが復号化できるように権限を追加する。以下は追加箇所のみ。既存のキーポリシーはそのままに、JSONブロック内の末尾に以下を追記する。
「111111111111」はAWSアカウントIDに置き換える。
{
"Sid": "Allow service-linked role use of the customer managed key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
]
},
"Action": [
"kms:CreateGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
キーポリシーを保存したら、再度ASGで台数を0に指定後、台数を1にしてデプロイが正常にされるか確認する。
ログを見ると、PreInserviceとなり、AutoScalingが動き出していることがわかる。
しばらく待つとSuccessfulとなり、正常に完了したことがわかる。
なんてことないけど、ものすごいハマった記憶。KMSでEBSを暗号化するときはお気を付けて。