到達不可能なインスタンスでの EC2Rescue ツールの実行
EC2Rescue は、Linux および Windows Server 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの問題の診断とトラブルシューティングに役立ちます。ツールを手動で実行するには、「Linux Server 用 EC2Rescue の使用」と「EC2Rescue for Windows Server の使用」を参照してください。または、ツールを自動的に実行するには、Systems Manager Automation と AWSSupport-ExecuteEC2Rescue
ランブックを使用します。Automation はAWS Systems Manager の一機能です。AWSSupport-ExecuteEC2Rescue
ランブックは、Systems Manager アクション、AWS CloudFormation アクション、および Lambda 関数を組み合わせて実行するように設計されています。これにより、EC2Rescue の使用に通常必要なステップが自動化されます。
AWSSupport-ExecuteEC2Rescue
ランブックでは、オペレーティングシステム (OS) のタイプ別にトラブルシューティングを行い、問題を修正できます。暗号化されたルートボリュームを持つインスタンスはサポートされていません。詳細なリストについては、以下のトピックを参照してください。
Windows: 「コマンドラインでの EC2Rescue for Windows Server の使用」の「レスキューアクション」を参照してください。
Linux および macOS: 一部の Linux 用 EC2Rescue モジュールでは、問題を検出して修正を試みます。詳細については、GitHub で モジュール別の aws-ec2rescue-linux
仕組み
Automation と AWSSupport-ExecuteEC2Rescue
ランブックによるインスタンスのトラブルシューティングは、次のように機能します。
-
到達不能インスタンスの ID を指定し、ランブックを起動します。
-
システムは一時 VPC を作成し、一連の Lambda 関数を実行して VPC を設定します。
-
システムは元のインスタンスと同じアベイラビリティーゾーン内で一時 VPC のサブネットを識別します。
-
システムは一時的な、SSM を有効にした ヘルパーインスタンスを起動します。
-
システムは元のインスタンスを停止して、バックアップを作成します。次に、元のルートボリュームをヘルパーインスタンスにアタッチします。
-
システムは、Run Command を使用してヘルパーインスタンスで EC2Rescue を実行します。EC2Rescue は、アタッチされた元のルートボリュームの問題の修正を試みます。完了すると、EC2Rescue は元のインスタンスにルートボリュームを再アタッチします。
-
システムは元のインスタンスを再起動して、一時インスタンスを削除します。また、一時 VPC と、自動化の開始時に作成された Lambda 関数を削除します。
開始する前に
次の自動化を実行する前に、以下の操作を行います。
-
到達不可能なインスタンスのインスタンス ID をコピーします。この ID は次の手順で指定します。
-
オプションとして、到達不可能なインスタンスと同じアベイラビリティーゾーンのサブネットの ID を収集します。このサブネットに EC2Rescue インスタンスが作成されます。サブネットを指定しないと、Automation により、新しい一時 VPC が に作成されますAWS アカウント AWS アカウント に、少なくとも 1 つの利用可能な VPC があることを確認します。デフォルトでは、リージョンで最大 5 つの VPC を作成できます。リージョンですでに 5 つの VPC を作成した場合、自動化は失敗し、インスタンスへの変更は行われません。Amazon VPC クォータの詳細については、「Amazon VPC ユーザーガイド」の「VPC とサブネット」を参照してください。
-
必要に応じて、自動化用の AWS Identity and Access Management (IAM) ロールを作成および指定できます。このロールを指定しない場合、自動化はそれを実行したユーザーのコンテキストで実行されます。
インスタンスでアクションを実行するための AWSSupport-EC2Rescue
アクセス許可の付与
EC2Rescue では、オートメーション中にインスタンスで一連のアクションを実行するためのアクセス許可が必要です。これらのアクションでは、AWS Lambda、IAM、および Amazon EC2 サービスを呼び出して、インスタンスの問題の安全な修正を試みます。AWS アカウント、VPC、またはその両方で管理者レベルのアクセス許可がある場合は、このセクションで説明しているように、アクセス許可を設定することなく自動化を実行できることがあります。管理者レベルのアクセス許可がない場合は、ユーザーまたは管理者が、次のいずれかのオプションを使用してアクセス許可を設定する必要があります。
IAM ポリシーを使用したアクセス許可の付与
次の IAM ポリシーをユーザー、グループ、ロールにインラインポリシーとしてアタッチするか、新しい IAM マネージドポリシーを作成し、ユーザー、グループ、ロールにアタッチできます。ユーザー、グループ、ロールへのインラインポリシーの追加の詳細については、「インラインポリシーの使用」を参照してください。新しい管理ポリシーの作成の詳細については、「管理ポリシーの使用」を参照してください。
注記
新しい IAM 管理ポリシーを作成する場合、AmazonSSMAutomationRole 管理ポリシーもアタッチし、インスタンスが Systems Manager API と通信できるようにする必要があります。
AWSSupport-EC2Rescue 用の IAM ポリシー
[Account ID]
(アカウント ID) をユーザー自身の情報に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:
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::account ID
:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::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 ロールとポリシーを作成するプロセスを自動化します。 を使用して、EC2Rescue の Automation に必要な IAM ロールとポリシーを作成するには、次の手順を使用しますAWS CloudFormation
EC2Rescue に必要な IAM ロールとポリシーを作成するには
-
AWSSupport-EC2RescueRole.zip
をダウンロードし、AWSSupport-EC2RescueRole.json
ファイルをローカルマシン上のディレクトリに展開します。 -
AWS アカウント が特殊なパーティションにある場合は、テンプレートを編集して、ARN 値をパーティションの ARN 値に変更します。
例えば、中国リージョンの場合は、
arn:aws
のすべてのケースをarn:aws-cn
に変更します。 AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation
) を開きます。 -
[スタックの作成] を選択し、[新しいリソースの使用 (標準)] を選択します。
-
[スタックの作成] ページの [前提条件 - テンプレートの準備] で、[テンプレートの準備完了] を選択します。
-
[テンプレートの指定] で、[テンプレートファイルのアップロード] を選択します。
-
[ファイルを選択] を選択し、展開したディレクトリから
AWSSupport-EC2RescueRole.json
ファイルを参照して選択します。 -
[次へ] を選択します。
-
[スタックの詳細の指定] ページの [スタック名] フィールドに、このスタックを識別する名前を入力し、[次へ] を選択します。
-
(オプション) [タグ] 領域で、1 つ以上のタグキーの名前と値のペアをスタックに適用します。
タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。たとえば、スタックにタグを付けると、スタックが実行するタスクのタイプ、関連するターゲットまたはその他のリソースのタイプ、およびスタックが実行される環境を識別できます。
-
[Next] (次へ) を選択します。
-
[確認] ページでスタックの詳細を確認し、下にスクロールして、[AWS CloudFormation によって IAM リソースが作成される場合があることを了承する] オプションを選択します。
-
[スタックの作成] を選択します。
AWS CloudFormation は、[CREATE_IN_PROGRESS] ステータスを数分間表示します。スタックを作成すると、ステータスは [CREATE_COMPLETE] に変わります。更新アイコンを選択して、作成プロセスのステータスを確認することもできます。
-
[スタック] リストで、先ほど作成したスタックのオプションボタンを選択し、[出力] タブを選択します。
-
[値] を書き留めます。これは AssumeRole の ARN です。この ARN は、手順 自動化の実行 でオートメーションを実行するときに指定します。
自動化の実行
重要
次のオートメーションでは、到達不可能なインスタンスを停止します。インスタンスを停止すると、アタッチされたインスタンスストアボリュームのデータが失われます (存在する場合)。また、インスタンスを停止すると、Elastic IP が関連付けられていない場合、そのパブリック IP アドレスも変更されます。
AWSSupport-ExecuteEC2Rescue
Automation を実行するには
AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/
) を開きます。 ナビゲーションペインで [オートメーション] を選択します。
-
[オートメーションを実行] を選択します。
-
オートメーションドキュメント] セクションで、リストから [Amazon が所有] を選択します。
-
ランブックリストで、
AWSSupport-ExecuteEC2Rescue
のカード内のボタンを選択し、[次へ] を選択します。 -
[オートメーションドキュメントの実行] ページで、[シンプルな実行] を選択します。
-
[ドキュメント詳細] セクションで、[ドキュメントバージョン] が最大のデフォルトバージョンに設定されていることを確認します。例えば、[$DEFAULT] または [3 (デフォルト)] のように指定します。
-
[パラメータの入力] セクションで、以下のパラメータを指定します。
-
[UnreachableInstanceId] で、到達不可能なインスタンスの ID を指定します。
-
(オプション) [EC2RescueInstanceType] で、EC2Rescue インスタンスのインスタンスタイプを指定します。デフォルトのインスタンスタイプは
t2.medium
です。 -
[AutomationAssumeRole] の場合、このトピックで前述した AWS CloudFormation 手順を使用してこのオートメーションのロールを作成していた場合は、AWS CloudFormation コンソールで作成した AssumeRole の ARN を選択します。
-
(オプション) インスタンスのトラブルシューティング時にオペレーティングシステムレベルのログを収集する場合は、[LogDestination] で S3 バケットを指定します。ログは、指定したバケットに自動的にアップロードされます。
-
[SubnetId] で、到達不可能なインスタンスと同じアベイラビリティーゾーンの既存の VPC のサブネットを指定します。デフォルトでは、Systems Manager によって新しい VPC が作成されますが、必要に応じて既存の VPC のサブネットを指定できます。
注記
バケットまたはサブネット ID を指定するオプションが表示されない場合は、最新の [デフォルト] バージョンのランブックを使用していることを確認します。
-
-
(オプション) [タグ] 領域で、オートメーションを識別するためにタグキーの名前と値のペアを 1 つ以上適用します (例:
Key=Purpose,Value=EC2Rescue
)。 -
[実行] を選択します。
ランブックにより、オートメーションの一環としてバックアップ AMI が作成されます。オートメーションで作成された他のすべてのリソースは自動的に削除されますが、この AMI はアカウントに残ります。AMI の名前は次の命名規則に従います。
バックアップ AMI: AWSSupport-EC2Rescue:UnreachableInstanceId
この AMI は、Automation の実行 ID で検索することで、Amazon EC2 コンソールで見つけることができます。