📝

OpsWorks のチュートリアルで IAM ロールのエラーが発生したので解決してみた

2022/03/13に公開

OpsWorks の サンプルスタックの使用開始 というチュートリアルで、以下のエラーが発生したので、解決方法を紹介します。

An IAM role is required to create a stack

結論

原因: OpsWorks のサービスロールがなかったこと
解決策: OpsWorks のサービスロールを作成する

原因

エラーメッセージからして、IAM ロール関連であることは分かりましたが、チュートリアルには以下のように記載されていました。

通常は、最初のスタックの作成時に標準サービスロールを作成し、そのロールを以降のすべてのスタックに使用できます。

上記より、最初にスタックを作成する際に、OpsWorks のサービスロールが自動生成されるという認識でした。

しかし、スタックを作成しようとすると、以下の時点でエラーになりました。

IAM ロール一覧を確認したところ、確かに OpsWorks のサービスロールがなかったので、これが原因でした。

解決方法

IAM コンソールで OpsWorks のサービスロールを作成することで解決しました。
以下に作成手順を記載します。

IAM ポリシー作成

まずは IAM ポリシーを作成します。
ポリシーに必要な権限は、チュートリアルの手順 に記載されているので、こちらを使用します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "ec2:*",
        "ecs:*",
        "elasticloadbalancing:*",
        "iam:GetRolePolicy",
        "iam:ListInstanceProfiles",
        "iam:ListRoles",
        "iam:ListUsers",
        "rds:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "ec2.amazonaws.com"
        }
      }
    }
  ]
}

サービスロール作成

続いて、OpsWorks のサービスロールを作成します。
IAM ロールの作成において、ユースケースから OpsWorks を選択します。

ポリシーには、先ほど作成した IAM ポリシーをアタッチします。

再度スタックを作成してみる

サービスロールの作成後、再度 OpsWorks コンソールからスタックを作成してみます。
すると、エラーは発生せず、スタックの作成画面が表示されました。

スタック作成後に、スタックの設定を確認すると、作成した IAM ロールが使用されていることも確認できました。

まとめ

今回は、OpsWorks のチュートリアルで An IAM role is required to create a stack というエラーが発生したので、解決方法を紹介しました。
参考になれば幸いです。

Discussion