Amazon Web Services ブログ
サポートオートメーションワークフロー (SAW) を使用した Systems Manager の マネージドノードの問題のトラブルシューティング
(本記事は 2024/09/18に公開された Troubleshooting managed node issues in Systems Manager with SAW を翻訳した記事です。)
はじめに
AWS サポートでは、Systems Manager にマネージドノードとして登録されない Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに関する問題をお客様から報告されることがよくあります。これらの問題を解決するためにセキュリティグループ、ネットワーク設定、権限をチェックするのは時間がかかる場合があります。 AWS サポートエンジニアリングは AWS リソースの一般的な問題のトラブルシューティング、診断、修復を支援するために SAW を作成しました。SAW フレームワークは、通常必要となるマニュアルの操作を排除することでトラブルシューティングにかかる時間を短縮するのに役立ちます。
この記事では、SAW を使用してトラブルシューティングプロセスを自動化する方法を紹介します。また、Systems Manager のマネージドノードの問題を監視し自動的に分析するために SAW でアーキテクチャを構成する方法も紹介します。
ソリューションの概要
このソリューションの最初のパートでは、Systems Manager にマネージドノードとして登録されない EC2 インスタンスの問題をトラブルシューティングするために SAW ランブックを使用する方法について説明します。2 番目のパートでは、このトラブルシューティングプロセスを自動化し問題解決を加速するためにアーキテクチャを構成する方法を紹介します。
パート 1 – SAW で根本原因を特定する
Systems Manager が Amazon EC2 のマネージドインスタンスを表示しない理由を特定するには、次の手順を実行します:
1. AWSSupport-TroubleshootManagedInstance ランブックを使用します。詳細については、re:Post 記事 How can I troubleshoot why Systems Manager doesn’t show an Amazon EC2 instance as a managed instance? を参照してください。
2. Automation が完了したら、詳細な結果については Outputs セクションを確認します。
例えば、AWS Identity and Access Management (IAM) インスタンスプロファイルに必要な権限がないことが原因で問題が発生している場合、Outputs セクションには次の詳細が表示されます:
3.結果から特定した問題を修正します。
例えば、前述の問題を修正するには、IAM インスタンスプロファイルに必要な権限を追加します。次に、Systems Manager で EC2 インスタンスがマネージドノードとして登録されているかどうかを確認します。確認するには、AWS Command Line Interface (AWS CLI) コマンド describe-instance-information を実行します:
$aws ssm describe-instance-information --filters "Key=InstanceIds,Values=${example-instance}"
上記コマンドの example-instance を EC2 インスタンスの ID に置き換えてください。
注意: AWS CLI コマンドの実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。コマンドが正常に実行され、インスタンスの詳細が取得できた場合、そのインスタンスは Systems Manager のマネージドノードとして表示されます。
パート 2 – SAW で問題検出を自動化する
SAW を使用して、Systems Manager のマネージドノードの問題を自動的に検出し、根本原因を特定するようにアーキテクチャを構成できます。 以下の前提条件を満たしていることを確認してください:
- ローカルの開発ワークステーションに AWS SAM CLI をインストールし設定している。
- 通知設定が有効化されている。
通知設定は以下のいずれかの方法で有効にできます:
- 作成した Amazon Simple Notification Service (Amazon SNS) トピックにメールアドレスをサブスクライブする。
- Slack でウェブフックを使用してワークフローを構築し、通知設定を有効にする。
Slack でウェブフックを使用してワークフローを構築する場合は、以下の手順でカスタム変数を設定します。
- Starts when an app or service sends a web request の横にある Edit をクリックします。
- Set up variablesで Add Variable をクリックします。
- Key に main と入力し、Data type は text を選択します。
- Add Variable をクリックします。
- Key に thread と入力し、Data type は text を選択します。Saveをクリックします。
- Send this message to の横にある Edit をクリックします。Send a message のページで、Send this message to: に通知を受け取りたい Slack チャンネルを選択します。次に、Insert a variable をクリックします。Message text で main を選択し、Saveをクリックします。
- Send this message to の横にある Edit をクリックします。Send a message のページで、Send this message to: に Message thread を選択します。次に、 Insert a variable をクリックします。Message text で thread を選択し、Save をクリックします。
このウォークスルーのサンプルコードを確認するには、GitHub ウェブサイトの AWS SAW Monitoring And Automatic Analysis Architecture を参照してください。
以下の図は、このソリューションのハイレベルなアーキテクチャを示しています。
このアーキテクチャには以下のコンポーネントが含まれています:
モニタリング: Amazon EventBridge が EC2 インスタンスの起動を検出します。EventBridge では、イベントパターンが EC2 インスタンスの RUNNING ステータスと一致すると、AWS Step Functions のステートマシンを開始します。
# Event pattern
{
"detail-type": ["EC2 Instance State-change Notification"],
"source": ["aws.ec2"],
"detail": {
"state": ["running"]
}
}
EC2 インスタンスを起動した後、Systems Manager エージェントが起動するまでに最長 5 分かかる場合があります。そのため、ステートマシンは分析を実行する前に数分間待機します。
分析: Step Functions は以下の手順を実行します:
- EC2 インスタンスがマネージドノードとして登録されていない場合、SAW ランブックAWSSupport-TroubleshootManagedInstance を実行します。
- SAW 分析が完了したかどうかを確認するために、DescribeAutomationExecutions API を定期的に呼び出します。
- SAW 分析が完了した後、AWS Lambda 関数を呼び出します。
通知: Lambda 関数は通知用の文字列をフォーマットします。その後、設定に基づいて Slack またはメールで通知を送信します。
ソリューションのウォークスルー
このセクションでは、SAW を使用してマネージドノードの問題を自動的に検出するソリューションのウォークスルーについて説明します。ウォークスルーのサンプルコードを確認するには、GitHub ウェブサイトの aws-samples を参照してください。
1. 以下のコマンドを実行して、AWS Secrets Manager に SlackWebHookUrl を登録します:
$ export SLACK_WEB_HOOK_URL="YOUR_SLACK_WEB_HOOK_URL"
$ export SECRET_NAME="YOUR_SECRET_NAME"
$ aws secretsmanager create-secret --name ${SECRET_NAME} --secret-string ${SLACK_WEB_HOOK_URL}
2. リポジトリをローカルの開発ワークステーションにクローンします:
$ git clone https://github.com/aws-samples/introducing-monitoring-and-automatic-analysis-architecture-using-aws-saw.git
$ cd introducing-monitoring-and-automatic-analysis-architecture-using-aws-saw/
3. AWS SAM テンプレート template.yaml で定義されている Lambda 関数、EventBridge ルール、Step Functions ステートマシン、および関連する IAM ロールをビルドしてデプロイします。
注意: デプロイウィザードでパラメータを入力します。例えば、Amazon SNS トピックの ARN、Secrets Manager の SECRET_NAME、またはその両方です。SNS トピックを AWS Key Management System (AWS KMS) で暗号化した場合は、AWS KMS キーの ARN をパラメータとして指定します。
$ sam build
$ sam deploy –guided
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] : Found
Reading default arguments : Success
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]:
AWS Region [ap-northeast-1]:
Parameter SecretsManagerNameForSlackWebHookUrl [SLACK_WEB_HOOK_URL]:
Parameter TopicArn [arn:aws:sns:ap-northeast-1:<ACCOUNT_ID>:kms-topic]:
Parameter TopicKmsKeyArn [arn:aws:kms:ap-northeast-1:<ACCOUNT_ID>:key/<ID>]:
・・・
4. アーキテクチャをテストします。Systems Manager の権限がない IAM インスタンスプロファイルを持つ EC2 インスタンスを起動します。権限が不足しているため、Systems Manager はこの EC2 インスタンスをマネージドノードとして登録できません。
5. 設定に基づいて、以下の画像のように Slack またはメールで SAW 分析結果を受け取ったことを確認します。この例では、IAM インスタンスプロファイルの権限不足が問題の原因であることを示しています。問題を解決するには、分析結果に表示されているドキュメントリンクを確認してください。
クリーンアップ
このチュートリアルで作成したリソースを削除するには、以下の手順を実行します:
- このチュートリアル用に起動した EC2 インスタンスを終了します。
- Secrets Manager で作成したシークレットを削除します。
- ウォークスルーで使用したサンプルをクリーンアップするには、AWS SAM CLI を使用して
$ sam delete
を実行し、AWS CloudFormation スタックを削除します。
まとめ
この記事では、Systems Manager がマネージドノードとして登録されない EC2 インスタンスの問題をトラブルシューティングするために SAW を使用する方法を紹介しました。この記事で紹介したサンプルアーキテクチャを使用して、EC2 インスタンスを監視し、これらのインスタンスが適切に登録されていない場合に SAW ランブックを自動的に呼び出すことができます。これにより、インフラストラクチャの可視性を失うことを防ぎ、プロアクティブなトラブルシューティングを支援します。
この記事で説明した技術は、自動化された問題検出と修復を通じて、Systems Manager で EC2 インスタンスの正確なビューを維持するのに役立ちます。
詳細については、AWS Support でのセルフサービスランブックの使用と AWS Support Automation Workflows (SAW) を参照してください。
AWS サポートエンジニアとテクニカルアカウントマネージャー (TAM) は、AWS に関する一般的なガイダンス、ベストプラクティス、トラブルシューティング、および運用サポートを提供します。
プランと提供内容の詳細については、AWS Support を参照してください。
著者について
古野 俊広
古野 俊広は、AWS デプロイメントサポートチームのシニアクラウドサポートエンジニアです。コンテナと継続的インテグレーション/継続的デリバリー (CI/CD) の使用をお客様に支援することに情熱を注いでいます。プライベートでは息子たちと遊ぶことを楽しんでいます。
翻訳は Tech Translator の泉 希が担当しました。