【トラブル】【AWS】EMRで Auto Scaling が FAILED する

■ はじめに

連日、EMRのトラブル対応。

今回は、 Auto Scaling が FAILED する問題について、
メモしておく。

目次

【0】今回、勉強になったこと
【1】トラブル概要
【2】エラー内容
 1)[Hardware]タブの「Cluster Scaling Policy」欄
 2)イベントログ([Events]タブ)
 3)AWSコマンド「aws emr describe-cluster」出力結果
【3】確認した事
【4】原因
【5】解決案

【0】今回、勉強になったこと

* エラーメッセージの情報が少なくても、AWS CLIなどにより
 情報を得られる場合がある
 => 今回の場合、AWSコマンド「aws emr describe-cluster」により
  原因を絞り込むことができた

AWSコマンド「aws emr describe-cluster」

* クラスターステータスの表示

https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html

【1】トラブル概要

EMR の [Hardware]タブの「Cluster Scaling Policy」欄 を見たら
「Auto Scaling」項目が「Status FAILED」になっていた。
(本来は「Status ATTACHED」になるのが期待値)

補足:AWSコマンド「aws emr describe-cluster」

* エラーになっているのは分かるが、とにかく、情報がないので
 そんなときの情報を集める方法として、
 AWSコマンド「aws emr describe-cluster」を記載しておく

https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html

$ aws emr describe-cluster --cluster-id j-XXXXXXX --region us-west-1

# => 出力結果例は、
# 後述『3)AWSコマンド「aws emr describe-cluster」出力結果』を参照

【2】エラー内容

「1)[Hardware]タブの「Cluster Scaling Policy」欄」
「2)イベントログ([Events]タブ)」
は、情報としては、ほとんど役に立たない。

「3)AWSコマンド「aws emr describe-cluster」出力結果」
から、どうにか解決案を模索していく。

1)[Hardware]タブの「Cluster Scaling Policy」欄

Auto Scaling
Status FAILED

2)イベントログ([Events]タブ)

Severity

WARING

Event description

The Auto Scaling policy for instance group ig-xxxxx
in Amazon EMR cluster j-xxxx (<your Cluster name>)
could not attach and failed at 2022-05-14 XX:XX:XX UTC.

3)AWSコマンド「aws emr describe-cluster」出力結果

...
 "AutoScalingPolicy": {
    "Status": {
      "State": "FAILED",
      "StateChangeReason": {
        "Code": "PROVISON FAILURE",
        "Message": "Failed to provision the AutoScaling policy; Unable to assume IAM role; arn:aws:iam:xxx:role:<your IAM policy for auto scaling>"
      }
    }
  },
...

メッセージ部分抜粋

Failed to provision the AutoScaling policy;
[訳] AutoScalingポリシーのプロビジョンに失敗した

Unable to assume IAM role;
arn:aws:iam:xxx:role:<your IAM policy for auto scaling>
[訳] IAMロールを受け入れることができないため
 => これで、IAMロールの問題ということに絞ることができた

【3】確認した事

「Failed to provision the AutoScaling policy; Unable to assume IAM role」で
ググった際にでてきた

https://stackoverflow.com/questions/47166208/failed-to-provision-the-autoscaling-policy-emr-instance-group-doesnt-exist

の解決方法「visibleToAllUsers=True」は、確認済
(しっかり「True」になっていたので、別問題)
~~~~~~~
For me, this was because cluster wasn't marked "visibleToAllUsers"; I had to issue a

aws emr modify-instance-attributes --cluster-id BLAH --visible-to-all-users

change first.
~~~~~~~

 そもそも、エラーメッセージが、
「EMRインスタンスグループが存在しない」だから
完全に別問題。(勉強にはなったが)
~~~~~~~
Failed to provision the AutoScaling policy:
EMR instance group doesn't exist:
Failed to find Cluster j-3SGZHX7D2DM98.
~~~~~~~

【4】原因

* EMR に紐づけている Auto Scaling 用のロールの「Trust relationships」
 で、「application-autoscaling.amazonaws.com」が付与されていなかったため
 => 以下、「修正前」を参照。

修正前

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Princial": {
        "Service": [
          "elasticmapreduce.amazon.com"
          ★ここの部分のサービスが不足しているため★
        ]
      },
      "Action": "sts:AssumeRole"

    }
  ]
}

【5】解決案

* 「application-autoscaling.amazonaws.com」を付与
 => 以下、「修正後」を参照。
 => 付与したロールで再実行したら
  「Status ATTACHED」になっていることを確認

修正後

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Princial": {
        "Service": [
          "application-autoscaling.amazonaws.com", <= ★ここを追加★
          "elasticmapreduce.amazon.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

関連記事

Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
Amazon EMR ~ Auto scaling ~
https://dk521123.hatenablog.com/entry/2022/05/16/115229
Amazon EMR に関するトラブル
https://dk521123.hatenablog.com/entry/2020/08/05/144724