チュートリアル: 到達不可能なインスタンスでの EC2Rescue ツールの実行 - AWS Systems Manager

チュートリアル: 到達不可能なインスタンスでの EC2Rescue ツールの実行

EC2Rescue は、EC2 Linux インスタンスと Windows Server での問題の診断とトラブルシューティングに役立ちます。ツールを手動で実行するには、「Linux Server 用 EC2Rescue の使用」と「EC2Rescue for Windows Server の使用」を参照してください。または、ツールを自動的に実行するには、Systems Manager Automation と AWSSupport-ExecuteEC2Rescue ドキュメントを使用します。AWSSupport-ExecuteEC2Rescue ドキュメントは、EC2Rescue を使用するために通常必要になるステップを自動化する、Systems Manager アクション AWS CloudFormation アクション、および Lambda 関数の組み合わせを実行するよう設計されています。

AWSSupport-ExecuteEC2Rescue ドキュメントでは、オペレーティングシステム (OS) のタイプ別にトラブルシューティングを行い、問題を修正できます。詳細なリストについては、以下のトピックを参照してください。

Windows: 「コマンドラインでの EC2Rescue for Windows Server の使用」の「レスキューアクション」を参照してください。

Linux: 一部の Linux 用 EC2Rescue モジュールでは、問題を検出して修正を試みます。詳細については、GitHub でモジュール別の「aws-ec2rescue-linux」ドキュメントを参照してください。

仕組み

自動化と AWSSupport-ExecuteEC2Rescue ドキュメントによるインスタンスのトラブルシューティングは次のように機能します。

  • 到達不可能なインスタンスの ID を指定して、自動化のワークフローを実行します。

  • システムは一時 VPC を作成し、一連の Lambda 関数を実行して VPC を設定します。

  • システムは元のインスタンスと同じアベイラビリティーゾーン内で一時 VPC のサブネットを識別します。

  • システムは一時的な、SSM を有効にした ヘルパーインスタンスを起動します。

  • システムは元のインスタンスを停止して、バックアップを作成します。次に、元のルートボリュームをヘルパーインスタンスにアタッチします。

  • システムは、Run Command を使用してヘルパーインスタンスで EC2Rescue を実行します。EC2Rescue は、アタッチされた元のルートボリュームの問題の修正を試みます。完了すると、EC2Rescue は元のインスタンスにルートボリュームを再アタッチします。

  • システムは元のインスタンスを再起動して、一時インスタンスを削除します。また、一時 VPC と、自動化の開始時に作成された Lambda 関数を削除します。

開始する前に

次の自動化を実行する前に、以下の操作を行います。

  • 到達不可能なインスタンスのインスタンス ID をコピーします。この ID は次の手順で指定します。

  • オプションとして、到達不可能なインスタンスと同じアベイラビリティーゾーンのサブネットの ID を収集します。このサブネットに EC2Rescue インスタンスが作成されます。サブネットを指定しないと、自動化により、新しい一時 VPC が AWS アカウントに作成されます。AWS アカウントに、少なくとも 1 つの利用可能な VPC があることを確認します。デフォルトでは、リージョンで最大 5 つの VPC を作成できます。リージョンですでに 5 つの VPC を作成した場合、自動化は失敗し、インスタンスへの変更は行われません。Amazon VPC クォータの詳細については、Amazon VPC ユーザーガイド の「VPC とサブネット」を参照してください。

  • 必要に応じて、自動化用の AWS Identity and Access Management (IAM) ロールを作成および指定できます。このロールを指定しない場合、自動化はそれを実行したユーザーのコンテキストで実行されます。自動化用のロールの作成の詳細については、「IAM サービスロールを使用して、オートメーションを実行する」を参照してください。

インスタンスでアクションを実行するための AWSSupport-EC2Rescue アクセス許可の付与

EC2Rescue では、自動化の実行中にインスタンスで一連のアクションを実行するためのアクセス許可が必要です。これらのアクションでは、AWS Lambda、IAM、および Amazon EC2 サービスを呼び出して、インスタンスの問題の安全な修正を試みます。AWS アカウント、VPC、またはその両方で管理者レベルのアクセス許可がある場合は、このセクションで説明しているように、アクセス許可を設定することなく自動化を実行できることがあります。管理者レベルのアクセス許可がない場合は、ユーザーまたは管理者が、次のいずれかのオプションを使用してアクセス許可を設定する必要があります。

IAM ポリシーを使用したアクセス許可の付与

次の IAM ポリシーを IAM ユーザーアカウント、グループ、またはロールにインラインポリシーとしてアタッチするか、新しい IAM 管理ポリシーを作成し、ユーザーアカウント、グループ、またはロールにアタッチできます。ユーザーアカウント、グループ、またはロールへのインラインポリシーの追加の詳細については、「インラインポリシーの使用」を参照してください。新しい管理ポリシーの作成の詳細については、「管理ポリシーの使用」を参照してください。

注記

新しい IAM 管理ポリシーを作成する場合、AmazonSSMAutomationRole 管理ポリシーもアタッチし、インスタンスが Systems Manager API と通信できるようにする必要があります。

AWSSupport-EC2Rescue 用の IAM ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:aws-account-id:function:AWSSupport-EC2Rescue-*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::awssupport-ssm.*/*.template", "arn:aws:s3:::awssupport-ssm.*/*.zip" ], "Effect": "Allow" }, { "Action": [ "iam:CreateRole", "iam:CreateInstanceProfile", "iam:GetRole", "iam:GetInstanceProfile", "iam:PutRolePolicy", "iam:DetachRolePolicy", "iam:AttachRolePolicy", "iam:PassRole", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DeleteInstanceProfile" ], "Resource": [ "arn:aws:iam::aws-account-id:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::aws-account-id:instance-profile/AWSSupport-EC2Rescue-*" ], "Effect": "Allow" }, { "Action": [ "lambda:CreateFunction", "ec2:CreateVpc", "ec2:ModifyVpcAttribute", "ec2:DeleteVpc", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:DetachInternetGateway", "ec2:DeleteInternetGateway", "ec2:CreateSubnet", "ec2:DeleteSubnet", "ec2:CreateRoute", "ec2:DeleteRoute", "ec2:CreateRouteTable", "ec2:AssociateRouteTable", "ec2:DisassociateRouteTable", "ec2:DeleteRouteTable", "ec2:CreateVpcEndpoint", "ec2:DeleteVpcEndpoints", "ec2:ModifyVpcEndpoint", "ec2:Describe*" ], "Resource": "*", "Effect": "Allow" } ] }

AWS CloudFormation テンプレートを使用したアクセス権限の付与

AWS CloudFormation は事前設定されたテンプレートを使用して、IAM ロールとポリシーを作成するプロセスを自動化します。AWS CloudFormation を使用して、EC2Rescue の自動化に必要な IAM ロールとポリシーを作成するには、次の手順を使用します。

EC2Rescue に必要な IAM ロールとポリシーを作成するには

  1. AWSSupport-EC2RescueRole.zip をダウンロードし、AWSSupport-EC2RescueRole.json ファイルをローカルマシン上のディレクトリに展開します。

  2. AWS アカウントが特殊なパーティションにある場合は、テンプレートを編集して、ARN 値をパーティションの ARN 値に変更します。

    たとえば、中国リージョン の場合、arn:aws のすべてのケースを arn:aws-cn に変更します。

  3. AWS マネジメントコンソール にサインインして、https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソールを開きます。

  4. [スタックの作成] を選択し、[With new resources (standard) (新しいリソースの使用 (標準))] を選択します。

  5. [スタックの作成] ページの [Prerequisite - Prepare template (前提条件 - テンプレートの準備)] で、[Template is ready (テンプレートの準備完了)] を選択します。

  6. [Specify template (テンプレートの指定)] で、[Upload a template file (テンプレートファイルのアップロード)] を選択します。

  7. [Choose file (ファイルを選択)] を選択し、展開したディレクトリから AWSSupport-EC2RescueRole.json ファイルを参照して選択します。

  8. [Next] を選択します。

  9. [Specify stack details (スタックの詳細の指定)] ページの [Stack Name (スタック名)] フィールドに、このスタックを識別する名前を入力し、[次へ] を選択します。

  10. (オプション) [タグ] 領域で、1 つ以上のタグキーの名前と値のペアをスタックに適用します。

    タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。たとえば、スタックにタグを付けると、スタックが実行するタスクのタイプ、関連するターゲットまたはその他のリソースのタイプ、およびスタックが実行される環境を識別できます。

  11. [次へ] を選択します

  12. [Review (確認)] ページでスタックの詳細を確認し、下にスクロールして、[I acknowledge that AWS CloudFormation might create IAM resources (AWS CloudFormation によって IAM リソースが作成される場合があることを了承する)] オプションを選択します。

  13. [スタックの作成] を選択します。

    AWS CloudFormation は、[CREATE_IN_PROGRESS] ステータスを数分間表示します。スタックを作成すると、ステータスは [CREATE_COMPLETE] に変わります。更新アイコンを選択して、作成プロセスのステータスを確認することもできます。

  14. [スタック] リストで、先ほど作成したスタックのオプションボタンを選択し、[Outputs (出力)] タブを選択します。

  15. [Value (値)] を書き留めます。これは AssumeRole の ARN です。この ARN は、手順 自動化の実行 でオートメーションを実行するときに指定します。

自動化の実行

重要

次のオートメーションワークフローでは、到達不可能なインスタンスを停止します。インスタンスを停止すると、アタッチされたインスタンスストアボリュームのデータが失われます (存在する場合)。また、インスタンスを停止すると、Elastic IP が関連付けられていない場合、そのパブリック IP アドレスも変更されます。

AWSSupport-ExecuteEC2Rescue の自動化を実行するには

  1. https://console.aws.amazon.com/systems-manager/ で AWS Systems Manager コンソールを開きます。

  2. ナビゲーションペインで [自動化] を選択します。

    -または-

    AWS Systems Manager ホームページが最初に開く場合は、メニューアイコン ( ) を選択してナビゲーションペインを開き、[自動化] を選択します。

  3. [Execute automation] を選択します。

  4. [Automation document (オートメーションドキュメント)] セクションで、リストから [Owned by Amazon (Amazon が所有)] を選択します。

  5. ドキュメントリストで、[AWSSupport-ExecuteEC2Rescue] のカードのボタンを選択し、[Next (次へ)] を選択します。

  6. [Execute automation document (オートメーションドキュメントの実行)] ページで、[Simple execution (シンプルな実行)] を選択します。

  7. [Document details (ドキュメント詳細)] セクションで、[Document version (ドキュメントバージョン)] が最大のデフォルトバージョンに設定されていることを確認します。たとえば、[$DEFAULT] または [3 (default) (3 (デフォルト))] のように指定します。

  8. [Input parameters] セクションで、以下のパラメータを指定します。

    1. [UnreachableInstanceId] で、到達不可能なインスタンスの ID を指定します。

    2. (オプション) [EC2RescueInstanceType] で、EC2Rescue インスタンスのインスタンスタイプを指定します。デフォルトのインスタンスタイプは t2.small です。

    3. [AutomationAssumeRole] の場合、このトピックで前述した AWS CloudFormation 手順を使用してこのオートメーションのロールを作成していた場合は、AWS CloudFormation コンソールで作成した AssumeRole の ARN を選択します。

    4. (オプション) インスタンスのトラブルシューティング時にオペレーティングシステムレベルのログを収集する場合は、[LogDestination] で S3 バケットを指定します。ログは、指定したバケットに自動的にアップロードされます。

    5. [SubnetId] で、到達不可能なインスタンスと同じアベイラビリティーゾーンの既存の VPC のサブネットを指定します。デフォルトでは、Systems Manager によって新しい VPC が作成されますが、必要に応じて既存の VPC のサブネットを指定できます。

      注記

      バケットまたはサブネット ID を指定するオプションが表示されない場合は、最新のデフォルトバージョンのドキュメントを使用していることを確認します。

  9. (オプション) [Tags (タグ)] 領域で、実行を識別するためにタグキーの名前と値のペアを 1 つ以上適用します。たとえば、Key=Purpose,Value=EC2Rescue です。

  10. [Execute] を選択します。

自動化により、ワークフローの一環としてバックアップ AMI が作成されます。自動化のワークフローで作成された他のすべてのリソースは自動的に削除されますが、この AMI はアカウントに残ります。AMI の名前は次の命名規則に従います。

バックアップ AMI: AWSSupport-EC2Rescue:UnreachableInstanceId

自動化の実行 ID 検索することでこの AMI を Amazon EC2 コンソールで見つけることができます。