📝

今から始める Elastic Beanstalk 入門 #7

に公開

今から始める Elastic Beanstalk 入門シリーズの 7 回目です。
各回については以下のリンクからご覧ください。

  1. 今から始める Elastic Beanstalk 入門 #1
  2. 今から始める Elastic Beanstalk 入門 #2
  3. 今から始める Elastic Beanstalk 入門 #3
  4. 今から始める Elastic Beanstalk 入門 #4
  5. 今から始める Elastic Beanstalk 入門 #5
  6. 今から始める Elastic Beanstalk 入門 #6

前回はワーカー環境について紹介しました。
今回はトラブルシューティングについて紹介します。

一般的なトラブルシューティング

Troubleshooting your Elastic Beanstalk environment - AWS Elastic Beanstalk
Elastic Beanstalk の一般的なトラブルシューティングについては上記ドキュメントにまとまっています。
大別すると以下の方法が紹介されています。

  • AWSSupport-TroubleshootElasticBeanstalk ランブックを実行する方法
  • 環境のイベントやログを確認する方法

今回は 1 つ目の AWSSupport-TroubleshootElasticBeanstalk ランブックを実行する方法を試してみましょう。

問題のある環境の準備

AWSSupport-TroubleshootElasticBeanstalk ランブックを実行するにあたり、意図的に問題のある環境を作成します。
今回は Systems Manager Parameter Store からパラメータの取得に失敗するように設定します。

まずはパラメータストアで適当なパラメータを作成します。

次に以下の IAM ポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "ssm:GetParameter",
            "Resource": "*"
        }
    ]
}

上記 IAM ポリシーによってパラメータの取得を明示的に拒否します。
上記 IAM ポリシーを Elastic Beanstalk の EC2 インスタンスプロファイルの IAM ロールにアタッチします。
デフォルトでは対象の IAM ロール名は「aws-elasticbeanstalk-ec2-role」です。
Managing Elastic Beanstalk instance profiles - AWS Elastic Beanstalk

Previously Elastic Beanstalk created a default EC2 instance profile named aws-elasticbeanstalk-ec2-role the first time an AWS account created an environment. This instance profile included default managed policies. If your account already has this instance profile, it will remain available for you to assign to your environments.

以上の設定が完了したら Elastic Beanstalk コンソールからサンプルアプリケーションで環境を作成します。
環境の作成時に「更新、モニタリング、ログ記録を設定 - オプション」で環境プロパティを追加します。

  • ソース: Parameter Store
  • 名前: 任意の名前
  • 値: パラメータストアの ARN

その他の設定はデフォルトで環境を作成します。
環境の作成中に以下のようなエラーが発生すれば OK です。

Instance deployment failed to get one or more secrets: arn:aws:ssm:ap-northeast-1:012345678901:parameter/test. AccessDeniedException: User: arn:aws:sts::012345678901:assumed-role/aws-elasticbeanstalk-ec2-role/i-0db33fff53f396733 is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:ap-northeast-1:012345678901:parameter/test with an explicit deny in an identity-based policy

AWSSupport-TroubleshootElasticBeanstalk ランブックを実行する

Using AWS Systems Manager Elastic Beanstalk runbooks - AWS Elastic Beanstalk
上記問題のある環境に対してランブックを実行してみます。
実行手順は上記ドキュメントの通りです。

Systems Manager コンソール > 自動化 > Execute automation

AWSSupport-TroubleshootElasticBeanstalk を検索して選択し、画面下部の Next をクリックします。

AutomationAssumeRole で Create a new IAM Role をクリックして以下の IAM ロールを作成します。

  • 信頼されたエンティティタイプ: AWS のサービス
  • サービスまたはユースケース: Systems Manager
  • 許可ポリシー: AdministratorAccess

作成した IAM ロールを AutomationAssumeRole に指定します。

ApplicationName と EnvironmentName には問題のある Elastic Beanstalk アプリケーション名と環境名を入力します。

AWSS3UploaderLink については AWS サポートケースを起票しており、AWS サポートから S3 アップローダのリンクが提供されている場合のみ入力します。
今回は AWS サポートケースを起票していないのでスキップします。

以上の設定が完了したら画面下部の Execute をクリックします。
実行後、ランブックの Overall status が Success になれば実行完了です。

実行結果を確認

Step Name が GenerateReport のリンクをクリックしてレポートを確認してみます。

Outputs でレポートを確認すると、IAMPermissionsCheck で is step needs to be checked というメッセージが出力されていました。

上記レポートから IAM 関連の問題であることがわかりました。
ただし、IAM のどの部分が問題であるかまでは出力されなかったため、以下のログを確認するなどの調査が必要になります。

  • CloudTrail
  • アプリケーションログ

例えば、今回の場合は Elastic Beanstalk のイベントでも AccessDeniedException が表示されているため権限の問題であると推測できます。
また、CloudTrail にも GetParameter で AccessDenied が発生した記録が残っています。

Elastic Beanstalk は様々なリソースが自動的に作成されるため、ランブックで被疑箇所を絞れるだけでも調査しやすくなると思います。

まとめ

今回は今から始める Elastic Beanstalk 入門シリーズの 7 回目として、AWSSupport-TroubleshootElasticBeanstalk ランブックについて紹介しました。
次回はログについて紹介します。

参考資料

Discussion