

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# チュートリアル
<a name="automation-tutorials"></a>

以下のチュートリアルは、AWS Systems Manager Automation を使用して一般的なユースケースに対応する際の役に立ちます。これらのチュートリアルでは、独自のランブックや、Automation から提供されている事前定義済みのランブックを使用する方法、また、これら以外の Systems Manager のツールを他の AWS のサービスとともに使用する方法について紹介しています。

**Contents**
+ [AMIs の更新](automation-tutorial-update-ami.md)
  + [Linux AMI を更新する](automation-tutorial-update-patch-linux-ami.md)
  + [Linux AMI (AWS CLI) を更新する](automation-tutorial-update-ami.md#update-patch-linux-ami-cli)
  + [Windows Server AMI を更新する](automation-tutorial-update-patch-windows-ami.md)
  + [Automation、AWS Lambda、Parameter Store を使用してゴールデン AMI を更新する](automation-tutorial-update-patch-golden-ami.md)
    + [タスク 1: Systems Manager Parameter Store でパラメータを作成する](automation-tutorial-update-patch-golden-ami.md#create-parameter-ami)
    + [タスク 2: 用の IAM ロールを作成するAWS Lambda](automation-tutorial-update-patch-golden-ami.md#create-lambda-role)
    + [タスク 3: AWS Lambda 関数を作成する](automation-tutorial-update-patch-golden-ami.md#create-lambda-function)
    + [タスク 4: ランブックを作成し、AMI にパッチを適用する](automation-tutorial-update-patch-golden-ami.md#create-custom-ami-update-runbook)
  + [オートメーションと Jenkins を使用した AMIs の更新](automation-tutorial-update-patch-ami-jenkins-integration.md)
  + [Auto Scaling グループ用の AMIs の更新](automation-tutorial-update-patch-windows-ami-autoscaling.md)
    + [**PatchAMIAndUpdateASG** ランブックを作成する](automation-tutorial-update-patch-windows-ami-autoscaling.md#create-autoscaling-update-runbook)
+ [AWS サポート でのセルフサービスランブックの使用](automation-tutorial-support-runbooks.md)
  + [到達不可能なインスタンスでの EC2Rescue ツールの実行](automation-ec2rescue.md)
    + [仕組み](automation-ec2rescue.md#automation-ec2rescue-how)
    + [開始する前に](automation-ec2rescue.md#automation-ec2rescue-begin)
      + [インスタンスでアクションを実行するための `AWSSupport-EC2Rescue` アクセス許可の付与](automation-ec2rescue.md#automation-ec2rescue-access)
        + [IAM ポリシーを使用したアクセス許可の付与](automation-ec2rescue.md#automation-ec2rescue-access-iam)
        + [CloudFormation テンプレートを使用したアクセス権限の付与](automation-ec2rescue.md#automation-ec2rescue-access-cfn)
    + [自動化の実行](automation-ec2rescue.md#automation-ec2rescue-executing)
  + [EC2 インスタンスでのパスワードと SSH キーのリセット](automation-ec2reset.md)
    + [仕組み](automation-ec2reset.md#automation-ec2reset-how)
    + [[開始する前に]](automation-ec2reset.md#automation-ec2reset-begin)
      + [インスタンスでアクションを実行するための AWSSupport-EC2Rescue アクセス許可の付与](automation-ec2reset.md#automation-ec2reset-access)
        + [IAM ポリシーを使用したアクセス許可の付与](automation-ec2reset.md#automation-ec2reset-access-iam)
        + [CloudFormation テンプレートを使用したアクセス権限の付与](automation-ec2reset.md#automation-ec2reset-access-cfn)
    + [自動化の実行](automation-ec2reset.md#automation-ec2reset-executing)
+ [入力トランスフォーマーを使用したオートメーションへのデータの受け渡し](automation-tutorial-eventbridge-input-transformers.md)

# AMIs の更新
<a name="automation-tutorial-update-ami"></a>

以下のチュートリアルでは、最新のパッチを適用するための Amazon Machine Image (AMIs) の更新方法について説明します。

**Topics**
+ [Linux AMI を更新する](automation-tutorial-update-patch-linux-ami.md)
+ [Linux AMI (AWS CLI) を更新する](#update-patch-linux-ami-cli)
+ [Windows Server AMI を更新する](automation-tutorial-update-patch-windows-ami.md)
+ [Automation、AWS Lambda、Parameter Store を使用してゴールデン AMI を更新する](automation-tutorial-update-patch-golden-ami.md)
+ [オートメーションと Jenkins を使用した AMIs の更新](automation-tutorial-update-patch-ami-jenkins-integration.md)
+ [Auto Scaling グループ用の AMIs の更新](automation-tutorial-update-patch-windows-ami-autoscaling.md)

# Linux AMI を更新する
<a name="automation-tutorial-update-patch-linux-ami"></a>

この Systems Manager Automation チュートリアルでは、コンソールまたは AWS CLI および `AWS-UpdateLinuxAmi` ランブックを使用して、指定したパッケージ用の最新バージョンのパッチを、Linux AMI に適用する方法について説明します。Automation は AWS Systems Manager のツールです。`AWS-UpdateLinuxAmi` ランブックは、その他のサイト固有のパッケージと設定のインストールも自動化します。このチュートリアルを使用して、Ubuntu Server、Red Hat Enterprise Linux (RHEL)、または Amazon Linux AMIs などのさまざまな Linux ディストリビューションを更新できます。サポートされている Linux バージョンの詳細なリストについては、「[Patch Manager の前提条件](patch-manager-prerequisites.md)」を参照してください。

`AWS-UpdateLinuxAmi` ランブックでは、JSON あるいは YAML によりランブックを記述することなく、イメージのメンテナンスタスクを自動化することができます。`AWS-UpdateLinuxAmi` ランブックを使用して次のタイプのタスクを実行できます。
+ Amazon Linux、Red Hat Enterprise Linux、または Ubuntu Server Amazon Machine Image (AMI) 上のすべてのディストリビューションパッケージと Amazon ソフトウェアを更新します。これはデフォルトのランブックの動作です。
+ 既存のイメージに AWS Systems Manager SSM Agent をインストールして、AWS Systems Manager Run Command を使用したリモートコマンドの実行や、Inventory を使用したソフトウェアインベントリ収集といった Systems Manager のツールを有効にします。
+ 追加のソフトウェアパッケージをインストールします。

**開始する前に**  
ランブックで作業を開始する前に、ロールを設定し、必要に応じてオートメーション用に EventBridge を設定します。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。このチュートリアルでは、AWS Identity and Access Management (IAM) インスタンスプロファイルの名前を指定する必要もあります。IAM インスタンスプロファイル作成の詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」を参照してください。

`AWS-UpdateLinuxAmi` ランブックは、次の入力パラメータを受け付けます。


****  

| Parameter | Type | 説明 | 
| --- | --- | --- | 
|  SourceAmiId  |  文字列  |  (必須) ソース AMI ID。  | 
|  IamInstanceProfileName  |  String  |  (必須)「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」で作成した IAM インスタンスプロファイルロールの名前。インスタンスプロファイルのロールは、コマンドの実行またはサービスの開始や停止など、インスタンスでアクションを実行するための自動化のアクセス許可を付与します。ランブックでは、インスタンスプロファイルロールの名前のみが使用されます。Amazon リソースネーム (ARN) を指定すると、オートメーションは失敗します。  | 
|  AutomationAssumeRole  |  文字列  |  (必須) [オートメーションの設定](automation-setup.md) で作成した IAM サービスロールの名前。サービスロール (継承ロールとも呼ばれます) は、オートメーションが IAM ロールを引き受け、代わりにアクションを実行するアクセス許可を与えます。例えば、サービスロールを使用すると、ランブックで `aws:createImage` アクションを実行するとき、Automation で新しい AMI を作成できます。このパラメータには、完全な ARN を指定する必要があります。  | 
|  TargetAmiName  |  文字列  |  (オプション) 作成後の AMI の新しい名前。デフォルト名は、ソース AMI ID および作成日時を含む、システム生成文字列です。  | 
|  InstanceType  |  文字列  |  (オプション) WorkSpace ホストとして起動するインスタンスの種類。インスタンスタイプは、リージョンによって異なります。デフォルトのタイプは、t2.micro です。  | 
|  PreUpdateScript  |  文字列  |  (オプション) 更新の適用前に実行するスクリプトの URL。デフォルト (\$1"none\$1") は、スクリプトを実行しません。  | 
|  PostUpdateScript  |  文字列  |  (オプション) パッケージの更新の適用後に実行するスクリプトの URL。デフォルト (\$1"none\$1") は、スクリプトを実行しません。  | 
|  IncludePackages  |  文字列  |  (オプション) これらの名前付きパッケージのみを更新します。デフォルト (\$1"all\$1") では、すべての利用可能な更新が適用されます。  | 
|  ExcludePackages  |  文字列  |  (オプション) すべての条件の下で、更新を保留するパッケージの名前。デフォルト (\$1"none\$1") では、パッケージは除外されません。  | 

**自動化のステップ**  
`AWS-UpdateLinuxAmi` ランブックには、デフォルトで次のオートメーションアクションが含まれています。

**ステップ 1: launchInstance (`aws:runInstances` アクション) **  
このステップでは、Amazon Elastic Compute Cloud (Amazon EC2) ユーザーデータ、および IAM インスタンスプロファイルのロールを使用してインスタンスを起動します。ユーザーデータは、オペレーティングシステムに基づいて、適切な SSM Agent をインストールします。SSM Agent をインストールすると、Run Command、State Manager、Inventory など、Systems Manager のツールを利用できます。

**ステップ 2: updateOSSoftware (`aws:runCommand` アクション) **  
このステップでは、起動したインスタンスで次のコマンドを実行します。  
+ Amazon S3 からの更新スクリプトをダウンロードします。
+ オプションの更新前のスクリプトを実行します。
+ ディストリビューションパッケージおよび Amazon ソフトウェアを更新します。
+ オプションの更新後のスクリプトを実行します。
実行ログは、ユーザーが後で表示するために /tmp フォルダに保存されます。  
特定のパッケージセットをアップグレードする場合は、`IncludePackages` パラメータを使用してリストを指定できます。指定すると、システムはこれらのパッケージおよび依存関係のみを更新するよう試みます。その他の更新は実行されません。デフォルトでは、*含まれる*パッケージが指定されない場合、プログラムはすべての利用可能なパッケージを更新します。  
特定のパッケージセットのアップグレードを除外する場合は、`ExcludePackages` パラメータにリストを指定できます。指定されている場合、これらのパッケージは、指定された他のオプションとは関係なく、現在のバージョンのままです。デフォルトでは、*除外する*パッケージが指定されていない場合、除外されるパッケージはありません。

**ステップ 3: stopInstance (`aws:changeInstanceState` アクション)**  
このステップでは、更新されたインスタンスを停止します。

**ステップ 4: createImage (`aws:createImage` アクション) **  
このステップでは、ソース ID、および作成時刻にリンクするわかりやすい名前の新しい AMI を作成します。例: 「\$1\$1SourceAmiId\$1\$1 から \$1\$1global:DATE\$1TIME\$1\$1 に EC2 Automation によって生成された AMI」。ここで DATE\$1TIME および SourceID は、自動化の変数を表します。

**ステップ 5: terminateInstance (`aws:changeInstanceState` アクション) **  
このステップでは、実行中のインスタンスを終了してオートメーションをクリーンアップします。

**出力**  
オートメーションは、出力として新しい AMI ID を返します。

**注記**  
デフォルトでは、自動化が `AWS-UpdateLinuxAmi` ランブックを実行すると、システムはデフォルト VPC (172.30.0.0/16) に一時インスタンスを作成します。デフォルト VPC を削除した場合、次のエラーが発生します。  
`VPC not defined 400`  
この問題を解決するには、`AWS-UpdateLinuxAmi` ランブックのコピーを作成し、サブネット ID を指定する必要があります。詳細については、「[VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc)」を参照してください。

**Automation (AWS Systems Manager) を使用して パッチを適用した AMI を作成するには**

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

1. ナビゲーションペインで **[オートメーション]** を選択します。

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

1. [**Automation document (オートメーションドキュメント)**] リストで、`AWS-UpdateLinuxAmi` を選択します。

1. [**Document details (ドキュメント詳細)**] セクションで、[**Document version (ドキュメントバージョン)**] が [**Default version at runtime (ランタイムのデフォルトバージョン)**] に設定されていることを確認します。

1. [**Next**] を選択します。

1. [**実行モード)**] セクションで、[**シンプルな実行**] を選択します。

1. [**Input parameters**] セクションに、**開始する前に**セクションで用意した情報を入力します。

1. [**Execute**] を選択します。自動化の実行のステータスがコンソールに表示されます。

オートメーションが終了したら、更新した AMI からテストインスタンスを起動して、変更を確認します。

**注記**  
オートメーションのいずれかのステップが失敗した場合は、失敗に関する情報が [**Automation Executions**] ページに表示されます。オートメーションは、すべてのタスクを正常に完了すると、一時インスタンスを終了するように設計されています。失敗したステップがあると、システムはインスタンスを終了できない場合があります。失敗したステップがある場合は、一時インスタンスを手動で終了します。

## Linux AMI (AWS CLI) を更新する
<a name="update-patch-linux-ami-cli"></a>

この AWS Systems Manager オートメーションチュートリアルでは、AWS Command Line Interface (AWS CLI) と System Manager `AWS-UpdateLinuxAmi` ランブックを使用して、指定した最新バージョンのパッケージを Linux Amazon Machine Image (AMI) に自動的にパッチ適用する方法について説明します。Automation は AWS Systems Manager のツールです。`AWS-UpdateLinuxAmi` ランブックは、その他のサイト固有のパッケージと設定のインストールも自動化します。このチュートリアルを使用して、Ubuntu Server、Red Hat Enterprise Linux (RHEL)、または Amazon Linux AMIs などのさまざまな Linux ディストリビューションを更新できます。サポートされている Linux バージョンの詳細なリストについては、「[Patch Manager の前提条件](patch-manager-prerequisites.md)」を参照してください。

`AWS-UpdateLinuxAmi` ランブックでは、JSON あるいは YAML のランブックを作成することなく、イメージメンテナンスタスクを自動化することができます。`AWS-UpdateLinuxAmi` ランブックを使用して次のタイプのタスクを実行できます。
+ Amazon Linux、RHEL、または Ubuntu Server Amazon Machine Image (AMI) 上のすべてのディストリビューションパッケージと Amazon ソフトウェアを更新します。これはデフォルトのランブックの動作です。
+ 既存のイメージに AWS Systems Manager SSM Agent をインストールして、AWS Systems Manager Run Command を使用したリモートコマンドの実行や、インベントリを使用したソフトウェアインベントリ収集といった Systems Manager の機能を有効にします。
+ 追加のソフトウェアパッケージをインストールします。

**開始する前に**  
ランブックで作業を開始する前に、ロールを設定し、必要に応じてオートメーション用に EventBridge を設定します。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。このチュートリアルでは、AWS Identity and Access Management (IAM) インスタンスプロファイルの名前を指定する必要もあります。IAM インスタンスプロファイル作成の詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」を参照してください。

`AWS-UpdateLinuxAmi` ランブックは、次の入力パラメータを受け付けます。


****  

| Parameter | Type | 説明 | 
| --- | --- | --- | 
|  SourceAmiId  |  文字列  |  (必須) ソース AMI ID。AWS Systems Manager Parameter Store *パブリック*パラメータを使用すると、Linux 用の Amazon EC2 AMI の最新の ID を自動的に参照できます。詳細については、「[AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI ID を取得する](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/)」を参照してください。  | 
|  IamInstanceProfileName  |  文字列  |  (必須)「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」で作成した IAM インスタンスプロファイルロールの名前。インスタンスプロファイルのロールは、コマンドの実行またはサービスの開始や停止など、インスタンスでアクションを実行するための自動化のアクセス許可を付与します。ランブックでは、インスタンスプロファイルロールの名前のみが使用されます。  | 
|  AutomationAssumeRole  |  文字列  |  (必須) [オートメーションの設定](automation-setup.md) で作成した IAM サービスロールの名前。サービスロール (継承ロールとも呼ばれます) は、オートメーションが IAM ロールを引き受け、代わりにアクションを実行するアクセス許可を与えます。例えば、サービスロールを使用すると、ランブックで `aws:createImage` アクションを実行するとき、Automation で新しい AMI を作成できます。このパラメータには、完全な ARN を指定する必要があります。  | 
|  TargetAmiName  |  文字列  |  (オプション) 作成後の AMI の新しい名前。デフォルト名は、ソース AMI ID および作成日時を含む、システム生成文字列です。  | 
|  InstanceType  |  文字列  |  (オプション) WorkSpace ホストとして起動するインスタンスの種類。インスタンスタイプは、リージョンによって異なります。デフォルトのタイプは、t2.micro です。  | 
|  PreUpdateScript  |  文字列  |  (オプション) 更新の適用前に実行するスクリプトの URL。デフォルト (\$1"none\$1") は、スクリプトを実行しません。  | 
|  PostUpdateScript  |  文字列  |  (オプション) パッケージの更新の適用後に実行するスクリプトの URL。デフォルト (\$1"none\$1") は、スクリプトを実行しません。  | 
|  IncludePackages  |  文字列  |  (オプション) これらの名前付きパッケージのみを更新します。デフォルト (\$1"all\$1") では、すべての利用可能な更新が適用されます。  | 
|  ExcludePackages  |  文字列  |  (オプション) すべての条件の下で、更新を保留するパッケージの名前。デフォルト (\$1"none\$1") では、パッケージは除外されません。  | 

**自動化のステップ**  
`AWS-UpdateLinuxAmi` ランブックには、デフォルトで次の手順が含まれています。

**ステップ 1: launchInstance (`aws:runInstances` アクション) **  
このステップでは、Amazon Elastic Compute Cloud (Amazon EC2) ユーザーデータ、および IAM インスタンスプロファイルのロールを使用してインスタンスを起動します。ユーザーデータは、オペレーティングシステムに基づいて、適切な SSM Agent をインストールします。SSM Agent をインストールすると、Run Command、State Manager、Inventory など、Systems Manager のツールを利用できます。

**ステップ 2: updateOSSoftware (`aws:runCommand` アクション) **  
このステップでは、起動したインスタンスで次のコマンドを実行します。  
+ Amazon Simple Storage Service (Amazon S3) から更新スクリプトをダウンロードします。
+ オプションの更新前のスクリプトを実行します。
+ ディストリビューションパッケージおよび Amazon ソフトウェアを更新します。
+ オプションの更新後のスクリプトを実行します。
実行ログは、ユーザーが後で表示するために /tmp フォルダに保存されます。  
特定のパッケージセットをアップグレードする場合は、`IncludePackages` パラメータを使用してリストを指定できます。指定すると、システムはこれらのパッケージおよび依存関係のみを更新するよう試みます。その他の更新は実行されません。デフォルトでは、*含まれる*パッケージが指定されない場合、プログラムはすべての利用可能なパッケージを更新します。  
特定のパッケージセットのアップグレードを除外する場合は、`ExcludePackages` パラメータにリストを指定できます。指定されている場合、これらのパッケージは、指定された他のオプションとは関係なく、現在のバージョンのままです。デフォルトでは、*除外する*パッケージが指定されていない場合、除外されるパッケージはありません。

**ステップ 3: stopInstance (`aws:changeInstanceState` アクション)**  
このステップでは、更新されたインスタンスを停止します。

**ステップ 4: createImage (`aws:createImage` アクション) **  
このステップでは、ソース ID、および作成時刻にリンクするわかりやすい名前の新しい AMI を作成します。例: 「\$1\$1SourceAmiId\$1\$1 から \$1\$1global:DATE\$1TIME\$1\$1 に EC2 Automation によって生成された AMI」。ここで DATE\$1TIME および SourceID は、自動化の変数を表します。

**ステップ 5: terminateInstance (`aws:changeInstanceState` アクション) **  
このステップでは、実行中のインスタンスを終了してオートメーションをクリーンアップします。

**出力**  
オートメーションは、出力として新しい AMI ID を返します。

**注記**  
デフォルトでは、自動化が `AWS-UpdateLinuxAmi` ランブックを実行すると、システムはデフォルト VPC (172.30.0.0/16) に一時インスタンスを作成します。デフォルト VPC を削除した場合、次のエラーが発生します。  
`VPC not defined 400`  
この問題を解決するには、`AWS-UpdateLinuxAmi` ランブックのコピーを作成し、サブネット ID を指定する必要があります。詳細については、「[VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc)」を参照してください。

**Automation を使用して パッチを適用した AMI を作成するには**

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 次のコマンドを実行して、`AWS-UpdateLinuxAmi` ランブックを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-UpdateLinuxAmi" \
       --parameters \
       SourceAmiId=AMI ID, \
       IamInstanceProfileName=IAM instance profile, \
       AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'
   ```

   コマンドによって実行 ID が返されます。この ID をクリップボードにコピーします。この ID を使用して、オートメーションの状態を表示します。

   ```
   {
       "AutomationExecutionId": "automation execution ID"
   }
   ```

1. AWS CLI を使用してオートメーションを表示するには、次のコマンドを実行します。

   ```
   aws ssm describe-automation-executions
   ```

1. オートメーションの進捗の詳細を表示するには、以下のコマンドを実行します。*[Automation execution ID]* (オートメーション実行 ID) をユーザー自身の情報に置き換えます。

   ```
   aws ssm get-automation-execution --automation-execution-id automation execution ID
   ```

   更新プロセスは完了までに 30 分以上かかる場合があります。
**注記**  
コンソールで、オートメーションのステータスをモニタリングすることもできます。リストで、先ほど開始したオートメーションを選択し、[**Steps**] タブを選択します。このタブには、オートメーションアクションのステータスが表示されます。

オートメーションが終了したら、更新した AMI からテストインスタンスを起動して、変更を確認します。

**注記**  
オートメーションのいずれかのステップが失敗した場合は、失敗に関する情報が [**Automation Executions**] ページに表示されます。オートメーションは、すべてのタスクを正常に完了すると、一時インスタンスを終了するように設計されています。失敗したステップがあると、システムはインスタンスを終了できない場合があります。失敗したステップがある場合は、一時インスタンスを手動で終了します。

# Windows Server AMI を更新する
<a name="automation-tutorial-update-patch-windows-ami"></a>

`AWS-UpdateWindowsAmi` ランブックでは、JSON あるいは YAML のランブックを作成することなく、Amazon Windows Amazon Machine Image (AMI) のイメージメンテナンスタスクを自動化することができます。このランブックは Windows Server 2008 R2 以降でサポートされています。`AWS-UpdateWindowsAmi` ランブックを使用して次のタイプのタスクを実行できます。
+ すべての Windows 更新プログラムをインストールし、Amazon ソフトウェアをアップグレードする (デフォルトの動作)。
+ 特定の Windows 更新プログラムをインストールし、Amazon ソフトウェアをアップグレードする。
+ スクリプトを使用して AMI をカスタマイズする。

**開始する前に**  
ランブックの使用を開始する前に、[ロールを Automation 用に設定](automation-setup-iam.md)して、アクセスを許可するインスタンスプロファイルの ARN を参照する `iam:PassRole` ポリシーを追加します。オプションで、AWS Systems Manager のツールである Automation 向けに Amazon EventBridge を設定することができます。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。このチュートリアルでは、AWS Identity and Access Management (IAM) インスタンスプロファイルの名前を指定する必要もあります。IAM インスタンスプロファイル作成の詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」を参照してください。

**注記**  
AWS Systems Manager SSM Agent の更新は、通常、リージョン別に異なる時間に展開されます。AMI をカスタマイズまたは更新する際、作業しているリージョンで公開されているソース AMI のみを使用してください。これは、そのリージョンでリリースされている最新の SSM Agent を使用していることを確実にし、互換性の問題を防ぎます。

`AWS-UpdateWindowsAmi` ランブックは、次の入力パラメータを受け付けます。


****  

| Parameter | Type | 説明 | 
| --- | --- | --- | 
|  SourceAmiId  |  文字列  |  (必須) ソース AMI ID。Systems Manager Parameter Store *パブリック*パラメータを使用して、最新の Windows Server AMI ID を自動的に参照できます。詳細については、「[AWS Systems ManagerParameter Store を使用して、最新の Windows AMI ID をクエリする](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)」を参照してください。  | 
|  SubnetId  |  String  |  (オプション) 一時インスタンスを起動するサブネット。デフォルト VPC を削除した場合は、このパラメータの値を指定する必要があります。  | 
|  IamInstanceProfileName  |  String  |  (必須)「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」で作成した IAM インスタンスプロファイルロールの名前。インスタンスプロファイルのロールは、コマンドの実行またはサービスの開始や停止など、インスタンスでアクションを実行するための自動化のアクセス許可を付与します。ランブックでは、インスタンスプロファイルロールの名前のみが使用されます。  | 
|  AutomationAssumeRole  |  文字列  |  (必須) [オートメーションの設定](automation-setup.md) で作成した IAM サービスロールの名前。サービスロール (継承ロールとも呼ばれます) は、オートメーションが IAM ロールを引き受け、代わりにアクションを実行するアクセス許可を与えます。例えば、サービスロールを使用すると、ランブックで `aws:createImage` アクションを実行するとき、Automation で新しい AMI を作成できます。このパラメータには、完全な ARN を指定する必要があります。  | 
|  TargetAmiName  |  文字列  |  (オプション) 作成後の AMI の新しい名前。デフォルト名は、ソース AMI ID および作成日時を含む、システム生成文字列です。  | 
|  InstanceType  |  文字列  |  (オプション) WorkSpace ホストとして起動するインスタンスの種類。インスタンスタイプは、リージョンによって異なります。デフォルトのタイプは、t2.medium です。  | 
|  PreUpdateScript  |  文字列  |  (オプション) AMI を更新する前に実行するスクリプト。スクリプトをランブックに入力するか、実行時にパラメータとして入力します。  | 
|  PostUpdateScript  |  文字列  |  (オプション) AMI を更新した後に実行するスクリプト。スクリプトをランブックに入力するか、実行時にパラメータとして入力します。  | 
|  IncludeKbs  |  文字列  |  (任意) 含める Microsoft Knowledge Base (KB) 記事 ID を 1 つ以上指定します。コンマ区切り値を使って複数の ID をインストールできます。有効な形式: KB9876543 または 9876543。  | 
|  ExcludeKbs  |  文字列  |  (任意) 除外する Microsoft Knowledge Base (KB) 記事 ID を 1 つ以上指定します。コンマ区切り値を使って複数の ID を除外できます。有効な形式: KB9876543 または 9876543。  | 
|  カテゴリ  |  文字列  |  (任意) 1 つ以上の更新カテゴリを指定します。カンマ区切り値を使ってカテゴリをフィルターできます。オプション: 重要な更新プログラム、セキュリティ更新プログラム、定義ファイルの更新、更新プログラムのロールアップ、Service Pack、ツール、更新、またはドライバー。有効な形式には、「重要なアップデート」といった単一のエントリが含まれます。または、カンマ区切りのリストを指定できます。たとえば、重要な更新プログラム,セキュリティ更新プログラム,定義ファイルの更新となります。  | 
|  SeverityLevels  |  文字列  |  (任意) 更新と関連付けられた MSRC 重要度レベルを 1 つ以上指定します。カンマ区切り値を使って重要度をフィルターできます。オプション: 非常事態、重要、低、中、または指定しない。有効な形式には、「非常事態」といった単一のエントリが含まれます。または、カンマ区切りリストを指定できます: 非常事態,重要,低。  | 

**自動化のステップ**  
`AWS-UpdateWindowsAmi` ランブックには、デフォルトで次の手順が含まれています。

**ステップ 1: launchInstance (`aws:runInstances` アクション)**  
このステップは、指定された `SourceAmiID` の IAM インスタンスプロファイルロールでインスタンスを起動します。

**ステップ 2: runPreUpdateScript (`aws:runCommand` アクション)**  
このステップでは、更新がインストールされる前に実行される文字列としてスクリプトを指定できます。

**ステップ 3: updateEC2Config (`aws:runCommand`アクション)**  
この手順では、`AWS-InstallPowerShellModule` ランブックを使用して AWS パブリック PowerShell モジュールをダウンロードします。Systems Manager は SHA-256 ハッシュを使用してモジュールの整合性を検証します。Systems Manager はその次にオペレーティングシステムを確認して、EC2Config または EC2Launch のどちらを更新するかを判断します。EC2Config は Windows Server 2008 R2 から Windows Server 2012 R2 で実行されます。EC2Launch は Windows Server 2016 で実行されます。

**ステップ 4: updateSSMAgent (`aws:runCommand`アクション)**  
この手順では、`AWS-UpdateSSMAgent` ランブックを使用して SSM Agent を更新します。

**ステップ 5: updateAWSPVDriver (`aws:runCommand`アクション)**  
この手順では、`AWS-ConfigureAWSPackage` ランブックを使用して AWS PV ドライバーを更新します。

**ステップ 6: updateAwsEnaNetworkDriver (`aws:runCommand`アクション)**  
この手順では、`AWS-ConfigureAWSPackage` ランブックを使用して AWS ENA ネットワークドライバーを更新します。

**ステップ 7: installWindowsUpdates (`aws:runCommand` アクション) **  
この手順では、`AWS-InstallWindowsUpdates` ランブックを使用して Windows 更新プログラムをインストールします。デフォルトでは、Systems Manager は不足している更新を検索し、インストールします。次のパラメータのいずれかを指定することで、デフォルトの動作を変更できます: `IncludeKbs`、`ExcludeKbs`、`Categories`、または`SeverityLevels`。

**ステップ 8: runPostUpdateScript (`aws:runCommand`アクション)**  
このステップでは、更新がインストールされた後に実行される文字列としてスクリプトを指定することができます。

**ステップ 9: runSysprepGeneralize (`aws:runCommand`アクション) **  
この手順では、`AWS-InstallPowerShellModule` ランブックを使用して AWS パブリック PowerShell モジュールをダウンロードします。Systems Manager は SHA-256 ハッシュを使用してモジュールの整合性を検証します。Systems Manager はその次に、AWS がサポートする方法を使用して EC2Launch (Windows Server 2016) または EC2Config (Windows Server 2008 R2 から 2012 R2) に sysprep を実行します。

**ステップ 10: stopInstance (`aws:changeInstanceState` アクション) **  
このステップでは、更新されたインスタンスを停止します。

**ステップ 11: createImage (`aws:createImage` アクション) **  
このステップでは、ソース ID、および作成時刻にリンクするわかりやすい名前の新しい AMI を作成します。例: 「\$1\$1SourceAmiId\$1\$1 から \$1\$1global:DATE\$1TIME\$1\$1 に EC2 Automation によって生成された AMI」。ここで DATE\$1TIME および SourceID は、自動化の変数を表します。

**ステップ 12: TerminateInstance (`aws:changeInstanceState` アクション) **  
このステップでは、実行中のインスタンスを終了してオートメーションをクリーンアップします。

**出力**  
このセクションでは、任意のパラメータの様々なステップや値の出力を、自動化の出力として指定できます。デフォルトでは、出力は、オートメーションによって作成された更新済みの Windows AMI の ID です。

**注記**  
デフォルトでは、オートメーションが `AWS-UpdateWindowsAmi` ランブックを実行して一時インスタンスを作成すると、システムはデフォルト default VPC (172.30.0.0/16) を使用します。デフォルト VPC を削除した場合、次のエラーが発生します。  
VPC not defined 400  
この問題を解決するには、`AWS-UpdateWindowsAmi` ランブックのコピーを作成し、サブネット ID を指定する必要があります。詳細については、「[VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc)」を参照してください。

**Automation を使用してパッチを適用した Windows AMI を作成するには**

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 次のコマンドを実行して、`AWS-UpdateWindowsAmi` ランブックを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。以下のコマンド例では、最新の Amazon EC2 AMI を使用して、適用する必要があるパッチの数を最小限に抑えています。このコマンドを複数回実行する場合は、`targetAMIname` に一意の値を指定する必要があります。AMI 名は一意のものでなければなりません。

   ```
   aws ssm start-automation-execution \
       --document-name="AWS-UpdateWindowsAmi" \
       --parameters SourceAmiId='AMI ID',IamInstanceProfileName='IAM instance profile',AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'
   ```

   コマンドによって実行 ID が返されます。この ID をクリップボードにコピーします。この ID を使用して、オートメーションの状態を表示します。

   ```
   {
       "AutomationExecutionId": "automation execution ID"
   }
   ```

1. AWS CLI を使用してオートメーションを表示するには、次のコマンドを実行します。

   ```
   aws ssm describe-automation-executions
   ```

1. オートメーションの進捗の詳細を表示するには、以下のコマンドを実行します。

   ```
   aws ssm get-automation-execution 
       --automation-execution-id automation execution ID
   ```

**注記**  
適用されるパッチの数に応じて、このサンプルオートメーションで実行される Windows パッチ適用プロセスは、完了までに 30 分以上かかることがあります。

# Automation、AWS Lambda、Parameter Store を使用してゴールデン AMI を更新する
<a name="automation-tutorial-update-patch-golden-ami"></a>

次の例では、Amazon Elastic Compute Cloud (Amazon EC2) AMIs から構築するのではなく、組織が独自の AMIs を維持し、定期的にパッチを適用するモデルを使用しています。

次の手順は、最新または最後の AMI であると既にみなされている AMI にオペレーティングシステム (OS) のパッチを自動的に適用する方法を示しています。この例では、パラメータ `SourceAmiId` のデフォルト値は、`latestAmi` という AWS Systems Manager Parameter Store のパラメータによって定義されます。`latestAmi` の値は、オートメーションの終了時に呼び出される AWS Lambda 関数によって更新されます。このオートメーションプロセスの結果として、パッチ適用が常に最新の AMI に適用されるため、AMIs のパッチ適用に費やされる時間と労力が最小限に抑えられます。Parameter Store と Automation は AWS Systems Manager のツールです。

**[開始する前に]**  
Automation ロール、およびオプションで、Automation 用の Amazon EventBridge を設定します。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。

**Topics**
+ [タスク 1: Systems Manager Parameter Store でパラメータを作成する](#create-parameter-ami)
+ [タスク 2: 用の IAM ロールを作成するAWS Lambda](#create-lambda-role)
+ [タスク 3: AWS Lambda 関数を作成する](#create-lambda-function)
+ [タスク 4: ランブックを作成し、AMI にパッチを適用する](#create-custom-ami-update-runbook)

## タスク 1: Systems Manager Parameter Store でパラメータを作成する
<a name="create-parameter-ami"></a>

Parameter Store で以下の情報を使用する文字列パラメータを作成します。
+ **Name (名前**)`latestAmi`]: 。
+ **値**: AMI ID。例: ` ami-188d6e0e`。

Parameter Store の文字列パラメータの作成方法については、「[Systems Manager での Parameter Store パラメータの作成](sysman-paramstore-su-create.md)」を参照してください。

## タスク 2: 用の IAM ロールを作成するAWS Lambda
<a name="create-lambda-role"></a>

 の IAM サービスロールを作成するために、次の手順を使用しますAWS Lambda これらのポリシーは、Lambda に Lambda 関数および Systems Manager を使用して、`latestAmi` パラメータの値を更新する権限を与えます。

**Lambda の IAM サービスロールを作成するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、[**Policies**] を選択し、次に [**Create policy**] を選択します。

1. [**JSON**] タブを選択します。

1. デフォルトのコンテンツを次のポリシーに置き換えます。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "logs:CreateLogGroup",
               "Resource": "arn:aws:logs:us-east-1:111122223333:*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/function name:*"
               ]
           }
       ]
   }
   ```

------

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。

1. **[次へ: レビュー]** を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**amiLambda** など)。

1. [**Create policy**] を選択します。

1. ステップ 2 と 3 を繰り返します。

1. 次のポリシーを貼り付けます。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:PutParameter",
               "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/latestAmi"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:DescribeParameters",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。

1. **[次へ: レビュー]** を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**amiParameter** など)。

1. [**Create policy**] を選択します。

1. ナビゲーションペインで [**Roles**] を選択し、続いて [**Create role**] を選択します。

1. **[ユースケース]** のすぐ下で、**[Lambda]**、**[次へ]** の順に選択します。

1. **[アクセス許可の追加]** ページで **[検索]** フィールドを使用し、前に作成した 2 つのポリシーを見つけます。

1. ポリシーの横にあるチェックボックスをオンにして、**[次へ]** を選択します。

1. [**ロール名**] に、新しいロールの名前を入力 (**lambda-ssm-role** など) するか、希望する別の名前を入力します。
**注記**  
多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

1. (オプション) 1 つ以上のタグキーと値のペアを追加して、このロールのアクセスを整理、追跡、制御し、**[ロールの作成]** を選択します。

## タスク 3: AWS Lambda 関数を作成する
<a name="create-lambda-function"></a>

`latestAmi` パラメータの値を自動的に更新する Lambda 関数を作成するには、次の手順を使用します。

**Lambda 関数を作成するには**

1. AWS マネジメントコンソール にサインインして AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開きます。

1. [**Create function**] を選択します。

1. [**Create function**] ページで、[**Author from scratch**] を選択します。

1. **[関数名]** に「**Automation-UpdateSsmParam**」と入力します。

1. **[ランタイム]** には、**[Python 3.11]** を選択します。

1. **[アーキテクチャ]** で、関数の実行に使用する Lambda のコンピュータープロセッサーのタイプ、**[x86\$164]** または **[arm64]** を選択します。

1. **[アクセス許可]** セクションで、**[デフォルトの実行ロールの変更]** を展開します。

1. [**Use an existing role (既存のロールの使用)**] を選択し、タスク 2 で作成した Lambda のサービスロールを選択します。

1. [**Create function**] を選択します。

1. **[コードソース]** 領域の **[lambda\$1function]** タブで、フィールドにあらかじめ入力されているコードを削除し、次のコードサンプルを貼り付けます。

   ```
   from __future__ import print_function
   
   import json
   import boto3
   
   print('Loading function')
   
   
   #Updates an SSM parameter
   #Expects parameterName, parameterValue
   def lambda_handler(event, context):
       print("Received event: " + json.dumps(event, indent=2))
   
       # get SSM client
       client = boto3.client('ssm')
   
       #confirm  parameter exists before updating it
       response = client.describe_parameters(
          Filters=[
             {
              'Key': 'Name',
              'Values': [ event['parameterName'] ]
             },
           ]
       )
   
       if not response['Parameters']:
           print('No such parameter')
           return 'SSM parameter not found.'
   
       #if parameter has a Description field, update it PLUS the Value
       if 'Description' in response['Parameters'][0]:
           description = response['Parameters'][0]['Description']
           
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Description=description,
             Type='String',
             Overwrite=True
           )
       
       #otherwise just update Value
       else:
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Type='String',
             Overwrite=True
           )
           
       responseString = 'Updated parameter %s with value %s.' % (event['parameterName'], event['parameterValue'])
           
       return responseString
   ```

1. **[ファイル]、[保存]** の順に選択します。

1. Lambda 関数をテストするには、**[テスト]** メニューで、**[テストイベントの設定]** を選択します。

1. [**Event name**] で、**MyTestEvent** など、テストイベントの名前を入力します。

1. 既存のテキストを次の JSON に置き換えます。*[AMI ID]* をユーザー自身の情報に置き換え、`latestAmi` パラメータ値を設定します。

   ```
   {
      "parameterName":"latestAmi",
      "parameterValue":"AMI ID"
   }
   ```

1. **[保存]** を選択します。

1. [**テスト (Test)**] を選択して関数をテストします。**[実行結果]** タブに、更新に関するその他の詳細とともに、ステータスが **[成功]** として報告されます。

## タスク 4: ランブックを作成し、AMI にパッチを適用する
<a name="create-custom-ami-update-runbook"></a>

以下の手順を使用して、[**latestAmi**] パラメータに指定した AMI にパッチを適用したランブックを作成して実行します。オートメーションが完了すると、**latestAmi** の値は、新しくパッチ適用された AMI の ID で更新されます。以降のオートメーションは、以前の実行で作成された AMI を使用します。

**ランブックを作成して実行するには**

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

1. ナビゲーションペインで、**[ドキュメント]** を選択します。

1. **[ドキュメントの作成]** で **[オートメーション]** を選択します。

1. **[Name]** (名前) には **UpdateMyLatestWindowsAmi** を入力します。

1. [**Editor (エディタ)**] タブを選択し、次に [**Edit (編集)**] を選択します。

1. プロンプトが表示されたら、**[OK]** を選択します。

1. **[ドキュメントエディタ]** フィールドで、デフォルトのコンテンツを、次の YAML サンプルランブックコンテンツに置き換えます。

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: The ID of the AMI you want to patch.
       default: '{{ ssm:latestAmi }}'
     SubnetId:
       type: String
       description: The ID of the subnet where the instance from the SourceAMI parameter is launched.
     SecurityGroupIds:
       type: StringList
       description: The IDs of the security groups to associate with the instance that's launched from the SourceAMI parameter.
     NewAMI:
       type: String
       description: The name of of newly patched AMI.
       default: 'patchedAMI-{{global:DATE_TIME}}'
     InstanceProfile:
       type: String
       description: The name of the IAM instance profile you want the source instance to use.
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateSsmParam
       action: aws:invokeLambdaFunction
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
           FunctionName: Automation-UpdateSsmParam
           Payload: '{"parameterName":"latestAmi", "parameterValue":"{{createImage.ImageId}}"}'
   outputs:
   - createImage.ImageId
   ```

1. [**Create automation (オートメーションを作成)**] を選択します。

1. ナビゲーションペインで、[**オートメーション**]、[**オートメーションの実行**] の順に選択します。

1. **[Choose document]** (ドキュメントを選択) ページで、**[Owned by me]** (自分が所有) タブを選択します。

1. **UpdateMyLatestWindowsAmi** ランブックを検索し、**UpdateMyLatestWindowsAmi** カードのボタンを選択します。

1. [**次へ**] を選択します。

1. [ **Simple execution (シンプルな実行)**] を選択します。

1. 入力パラメータの値を指定します。

1. **[実行]** を選択してください。

1. 実行の完了後に、ナビゲーションペインで [**Parameter Store**] を選択し、`latestAmi` の新しい値がオートメーションから返された値と一致することを確認します。新しい AMI ID が、Amazon EC2 コンソールの [**AMIs**] セクションに表示される Automation の出力と一致することを確認することもできます。

# オートメーションと Jenkins を使用した AMIs の更新
<a name="automation-tutorial-update-patch-ami-jenkins-integration"></a>

CI/CD のパイプラインで Jenkins ソフトウェアを使用する組織では、オートメーションをビルド後のステップとして追加して、アプリケーションリリースを Amazon Machine Images (AMIs) に事前インストールできます。Automation は AWS Systems Manager のツールです。Jenkins のスケジューリング機能を使用して、オートメーションを呼び出し、独自のオペレーティングシステム (OS) への定期的なパッチ適用を作成することもできます。

以下の例は、オンプレミスまたは Amazon Elastic Compute Cloud (Amazon EC2) のいずれかで実行している Jenkins サーバーからオートメーションを呼び出す方法を示しています。Jenkins サーバーは、認証のために、この例で作成した IAM ポリシーに基づく AWS 認証情報を使用して、インスタンスプロファイルにアタッチします。

**注記**  
インスタンスの設定時は、Jenkins のセキュリティについてのベストプラクティスに従う必要があります。

**[開始する前に]**  
Jenkins を使用してオートメーションを設定する前に、次のタスクを完了します。
+ [Automation、AWS Lambda、Parameter Store を使用してゴールデン AMI を更新する](automation-tutorial-update-patch-golden-ami.md) の例を完了します。次の例では、この例で作成された **UpdateMyLatestWindowsAmi** ランブックを使用します。
+ オートメーションの IAM ロールを設定します。Systems Manager には、オートメーションを処理するためのインスタンスプロファイルのロールおよびサービスロールの ARN が必要です。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。

**Jenkins サーバーで IAM ポリシーを作成するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、[**Policies**] を選択し、次に [**Create policy**] を選択します。

1. [**JSON**] タブを選択します。

1. 各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:StartAutomationExecution",
               "Resource": [
                   "arn:aws:ssm:us-east-1:111122223333:document/UpdateMyLatestWindowsAmi",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           }
       ]
   }
   ```

------

1. [**ポリシーの確認**] を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**JenkinsPolicy** など)。

1. [**Create policy**] を選択します。

1. ナビゲーションペインで [**ロール**] を選択します。

1. Jenkins サーバーにアタッチされているインスタンスプロファイルを選択します。

1. **[アクセス許可]** タブで、**[許可の追加]**、**[ポリシーのアタッチ]** の順に選択します。

1. **[その他のアクセス許可ポリシー]** セクションで、前の手順で作成したポリシー名を入力します。例えば、**[JenkinsPolicy]** などです。

1. ポリシーの横にあるチェックボックスをオンにして、**[ポリシーのアタッチ]** を選択します。

Jenkins サーバーで AWS CLI を設定するには、次の手順を使用します。

**オートメーション用に Jenkins サーバーを設定するには**

1. 管理インターフェイスにアクセスするには、ご使用のブラウザを使用してポート 8080 で Jenkins サーバーに接続します。

1. `/var/lib/jenkins/secrets/initialAdminPassword` で見つかったパスワードを入力します。パスワードを表示するには、次のコマンドを実行します。

   ```
   sudo cat /var/lib/jenkins/secrets/initialAdminPassword
   ```

1. Jenkins インストールスクリプトでは、**[Jenkins のカスタマイズ]** ページが表示されます。[**Install suggested plugins (推奨プラグインをインストール)**] を選択します。

1. インストールが完了したら、**[管理者認証情報]** を選択し、**[認証情報を保存]** を選択してから、**[Jenkins の使用を開始]** を選択します。

1. 左側のナビゲーションペインで、**[Jenkins の管理]**、**[プラグインの管理]** の順に選択します。

1. [**Available (使用可能)**] タブを選択し、**Amazon EC2 plugin** と入力します。

1. **Amazon EC2 plugin** のチェックボックスをオンにし、[**Install without restart (再起動せずにインストール)**] を選択します。

1. インストールが完了したら、[**Go back to the top page (トップページに戻る)**]を選択します。

1. **[Jenkins の管理]**、**[ノードとクラドの管理]** の順に選択します。

1. **[クラウドの設定]** セクションで **[新しいクラウドの追加]**、**[Amazon EC2]** の順に選択します。

1. 残りのフィールドに情報を入力します。必ず、**[EC2 インスタンスプロファイルを使用して認証情報を取得]** オプションを選択してください。

オートメーションを呼び出すように Jenkins プロジェクトを設定するには、次の手順を使用します。

**オートメーションを呼び出すように Jenkins サーバー を設定するには**

1. ウェブブラウザで、Jenkins コンソールを開きます。

1. Automation を使用して設定するプロジェクトを選択し、[**Configure**] を選択します。

1. [**Build**] タブで、[**Add Build Step**] を選択します。

1. [**Execute shell**] または [**Execute Windows batch command**] (オペレーティングシステムによって異なります) を選択します。

1. **[Command]** (コマンド)フィールドで、以下のように AWS CLI コマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   ```
   aws ssm start-automation-execution \
           --document-name runbook name \
           --region AWS リージョン of your source AMI \
           --parameters runbook parameters
   ```

   以下のサンプルコマンドは、**UpdateMyLatestWindowsAmi** ランブックや、`latestAmi` で作成された Systems Manager Parameter [Automation、AWS Lambda、Parameter Store を使用してゴールデン AMI を更新する](automation-tutorial-update-patch-golden-ami.md) を使用しています。

   ```
   aws ssm start-automation-execution \
           --document-name UpdateMyLatestWindowsAmi \
           --parameters \
               "sourceAMIid='{{ssm:latestAmi}}'"
           --region region
   ```

   Jenkins では、コマンドは次のスクリーンショットの例のようになります。  
![\[Jenkins ソフトウェアのサンプルコマンド。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/sysman-ami-jenkins2.png)

1. Jenkins プロジェクトで、**[今すぐビルド]** を選択します。Jenkins は次の例のような出力を返します。  
![\[Jenkins ソフトウェアのサンプルコマンド出力。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/sysman-ami-jenkins.png)

# Auto Scaling グループ用の AMIs の更新
<a name="automation-tutorial-update-patch-windows-ami-autoscaling"></a>

次の例では、新しくパッチが適用された AMI で Auto Scaling グループを更新します。このアプローチにより、Auto Scaling グループを使用するさまざまなコンピューティング環境で、新しいイメージが自動的に利用可能になります。

この例のオートメーションの最後のステップでは、Python 関数を使用して、新しくパッチが適用された AMI を使用する新しい起動テンプレートを作成します。その後、Auto Scaling グループが更新され、新しい起動テンプレートが使用されます。このタイプの Auto Scaling シナリオでは、ユーザーが Auto Scaling グループ内の既存のインスタンスを終了して、新しいイメージを使用する新しいインスタンスを強制的に起動できます。ユーザーは、スケールインまたはスケールアウトイベントが新しいインスタンスを自然に起動させるのを待つこともできます。

**開始する前に**  
この例を開始する前に、次のタスクを完了してください。
+ AWS Systems Manager のツールである Automation の IAM ロールを設定します。Systems Manager には、オートメーションを処理するためのインスタンスプロファイルのロールおよびサービスロールの ARN が必要です。詳しくは、「[オートメーションの設定](automation-setup.md)」を参照してください。

## **PatchAMIAndUpdateASG** ランブックを作成する
<a name="create-autoscaling-update-runbook"></a>

次の手順を使用して、**SourceAMI** パラメータ向けに指定した AMI にパッチを適用する **PatchAMIAndUpdateASG** ランブックを作成します。ランブックは、Auto Scaling グループも更新して、パッチが適用された最新の AMI を使用するようにします。

**ランブックを作成して実行するには**

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

1. ナビゲーションペインで、**[ドキュメント]** を選択します。

1. [**Create document** (ドキュメントの作成)] ドロップダウンで [**Automation** (オートメーション)] を選択します。

1. [**名前**] フィールドに **PatchAMIAndUpdateASG** を入力してください。

1. **[Editor]** (エディタ) タブを選択し、次に **[Edit]** (編集) を選択します。

1. プロンプトが表示されたら **[OK]** を選択し、**[Document editor]** (ドキュメントエディタ) フィールドのコンテンツを削除します。

1. **[Document editor]** (ドキュメントエディタ) フィールドに、以下の YAML サンプルランブックコンテンツを貼り付けます。

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: '(Required) The ID of the AMI you want to patch.'
     SubnetId:
       type: String
       description: '(Required) The ID of the subnet where the instance from the SourceAMI parameter is launched.'
     SecurityGroupIds:
       type: StringList
       description: '(Required) The IDs of the security groups to associate with the instance launched from the SourceAMI parameter.'
     NewAMI:
       type: String
       description: '(Optional) The name of of newly patched AMI.'
       default: 'patchedAMI-{{global:DATE_TIME}}'
     TargetASG:
       type: String
       description: '(Required) The name of the Auto Scaling group you want to update.'
     InstanceProfile:
       type: String
       description: '(Required) The name of the IAM instance profile you want the source instance to use.'
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateASG
       action: 'aws:executeScript'
       timeoutSeconds: 300
       maxAttempts: 1
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: update_asg
         InputPayload:
           TargetASG: '{{TargetASG}}'
           NewAMI: '{{createImage.ImageId}}'
         Script: |-
           from __future__ import print_function
           import datetime
           import json
           import time
           import boto3
   
           # create auto scaling and ec2 client
           asg = boto3.client('autoscaling')
           ec2 = boto3.client('ec2')
   
           def update_asg(event, context):
               print("Received event: " + json.dumps(event, indent=2))
   
               target_asg = event['TargetASG']
               new_ami = event['NewAMI']
   
               # get object for the ASG we're going to update, filter by name of target ASG
               asg_query = asg.describe_auto_scaling_groups(AutoScalingGroupNames=[target_asg])
               if 'AutoScalingGroups' not in asg_query or not asg_query['AutoScalingGroups']:
                   return 'No ASG found matching the value you specified.'
   
               # gets details of an instance from the ASG that we'll use to model the new launch template after
               source_instance_id = asg_query.get('AutoScalingGroups')[0]['Instances'][0]['InstanceId']
               instance_properties = ec2.describe_instances(
                   InstanceIds=[source_instance_id]
               )
               source_instance = instance_properties['Reservations'][0]['Instances'][0]
   
               # create list of security group IDs
               security_groups = []
               for group in source_instance['SecurityGroups']:
                   security_groups.append(group['GroupId'])
   
               # create a list of dictionary objects for block device mappings
               mappings = []
               for block in source_instance['BlockDeviceMappings']:
                   volume_query = ec2.describe_volumes(
                       VolumeIds=[block['Ebs']['VolumeId']]
                   )
                   volume_details = volume_query['Volumes']
                   device_name = block['DeviceName']
                   volume_size = volume_details[0]['Size']
                   volume_type = volume_details[0]['VolumeType']
                   device = {'DeviceName': device_name, 'Ebs': {'VolumeSize': volume_size, 'VolumeType': volume_type}}
                   mappings.append(device)
   
               # create new launch template using details returned from instance in the ASG and specify the newly patched AMI
               time_stamp = time.time()
               time_stamp_string = datetime.datetime.fromtimestamp(time_stamp).strftime('%m-%d-%Y_%H-%M-%S')
               new_template_name = f'{new_ami}_{time_stamp_string}'
               try:
                   ec2.create_launch_template(
                       LaunchTemplateName=new_template_name,
                       LaunchTemplateData={
                           'BlockDeviceMappings': mappings,
                           'ImageId': new_ami,
                           'InstanceType': source_instance['InstanceType'],
                           'IamInstanceProfile': {
                               'Arn': source_instance['IamInstanceProfile']['Arn']
                           },
                           'KeyName': source_instance['KeyName'],
                           'SecurityGroupIds': security_groups
                       }
                   )
               except Exception as e:
                   return f'Exception caught: {str(e)}'
               else:
                   # update ASG to use new launch template
                   asg.update_auto_scaling_group(
                       AutoScalingGroupName=target_asg,
                       LaunchTemplate={
                           'LaunchTemplateName': new_template_name
                       }
                   )
                   return f'Updated ASG {target_asg} with new launch template {new_template_name} which uses AMI {new_ami}.'
   outputs:
   - createImage.ImageId
   ```

1. [**Create automation (オートメーションを作成)**] を選択します。

1. ナビゲーションペインで、[**オートメーション**]、[**オートメーションの実行**] の順に選択します。

1. **[Choose document]** (ドキュメントを選択) ページで、**[Owned by me]** (自分が所有) タブを選択します。

1. **PatchAMIAndUpdateASG** ランブックを検索し、**PatchAMIAndUpdateASG** カードのボタンを選択します。

1. [**次へ**] を選択します。

1. [ **Simple execution (シンプルな実行)**] を選択します。

1. 入力パラメータの値を指定します。指定する `SubnetId` と `SecurityGroupIds` が、パブリック Systems Manager エンドポイント、または Systems Manager のインターフェイスエンドポイントへのアクセスを許可していることを確認してください。

1. **[実行]** を選択してください。

1. オートメーションが完了したら、Amazon EC2 コンソールで **[Auto Scaling]**、**[Launch Templates]** (テンプレートを起動) の順に選択します。新しい起動テンプレートが表示され、新しい AMI を使用していることを確認します。

1. [**Auto Scaling**]、[**Auto Scaling グループ**] の順に選択します。Auto Scaling グループで新しい起動テンプレートが使用されていることを確認します。

1. Auto Scaling グループ内の 1 つ以上のインスタンスを終了します。代替インスタンスは、新しい AMI を使用して起動されます。

# AWS サポート でのセルフサービスランブックの使用
<a name="automation-tutorial-support-runbooks"></a>

このセクションでは、AWS サポート チームによって作成されたセルフサービスオートメーションの一部を使用する方法について説明します。このオートメーションは、AWS リソースの管理に役立ちます。

**サポートオートメーションワークフロー**  
サポートオートメーションワークフロー (SAW) は、AWS サポート チームによって作成および保守されるオートメーションランブックです。このランブックは、AWS リソースに関する一般的な問題のトラブルシューティング、ネットワーク問題のプロアクティブなモニタリングと特定、ログの収集と分析などを支援します。

SAW ランブックは、**`AWSSupport`** プレフィックスを使用します。例えば、[https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-activatewindowswithamazonlicense.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-activatewindowswithamazonlicense.html)。

さらに、ビジネスサポートプラスおよびそれ以上の AWS サポートプランをご利用のお客様は、**`AWSPremiumSupport`** プレフィックスを使用するランブックにもアクセスできます。例えば、[https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awspremiumsupport-troubleshootEC2diskusage.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awspremiumsupport-troubleshootEC2diskusage.html)。

AWS サポート の詳細については、「[AWS サポート の開始方法](https://docs.aws.amazon.com/awssupport/latest/user/getting-started.html)」を参照してください。

**Topics**
+ [到達不可能なインスタンスでの EC2Rescue ツールの実行](automation-ec2rescue.md)
+ [EC2 インスタンスでのパスワードと SSH キーのリセット](automation-ec2reset.md)

# 到達不可能なインスタンスでの EC2Rescue ツールの実行
<a name="automation-ec2rescue"></a>

EC2Rescue は、Linux および Windows Server 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの問題の診断とトラブルシューティングに役立ちます。ツールを手動で実行するには、「[Linux Server 用 EC2Rescue の使用](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Linux-Server-EC2Rescue.html)」と「[EC2Rescue for Windows Server の使用](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Windows-Server-EC2Rescue.html)」を参照してください。または、ツールを自動的に実行するには、Systems Manager Automation と **`AWSSupport-ExecuteEC2Rescue`** ランブックを使用します。Automation は AWS Systems Manager のツールです。**`AWSSupport-ExecuteEC2Rescue`** ランブックは、Systems Manager アクション、CloudFormation アクション、および Lambda 関数を組み合わせて実行するように設計されています。これにより、EC2Rescue の使用に通常必要なステップが自動化されます。

**`AWSSupport-ExecuteEC2Rescue`** ランブックでは、オペレーティングシステム (OS) のタイプ別にトラブルシューティングを行い、問題を修正できます。暗号化されたルートボリュームを持つインスタンスはサポートされていません。詳細なリストについては、以下のトピックを参照してください。

**Windows**: 「[コマンドラインでの EC2Rescue for Windows Server の使用](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-cli.html#ec2rw-rescue)」の「レスキューアクション」を参照してください。

**Linux** および **macOS**: 一部の Linux 用 EC2Rescue モジュールでは、問題を検出して修正を試みます。詳細については、GitHub で モジュール別の [https://github.com/awslabs/aws-ec2rescue-linux/tree/master/docs](https://github.com/awslabs/aws-ec2rescue-linux/tree/master/docs) ドキュメントを参照してください。

## 仕組み
<a name="automation-ec2rescue-how"></a>

Automation と **`AWSSupport-ExecuteEC2Rescue`** ランブックによるインスタンスのトラブルシューティングは、次のように機能します。
+ 到達不能インスタンスの ID を指定し、ランブックを起動します。
+ システムは一時 VPC を作成し、一連の Lambda 関数を実行して VPC を設定します。
+ システムは元のインスタンスと同じアベイラビリティーゾーン内で一時 VPC のサブネットを識別します。
+ システムは一時的な、SSM を有効にした ヘルパーインスタンスを起動します。
+ システムは元のインスタンスを停止して、バックアップを作成します。次に、元のルートボリュームをヘルパーインスタンスにアタッチします。
+ システムは、Run Command を使用してヘルパーインスタンスで EC2Rescue を実行します。EC2Rescue は、アタッチされた元のルートボリュームの問題の修正を試みます。完了すると、EC2Rescue は元のインスタンスにルートボリュームを再アタッチします。
+ システムは元のインスタンスを再起動して、一時インスタンスを削除します。また、一時 VPC と、自動化の開始時に作成された Lambda 関数を削除します。

## 開始する前に
<a name="automation-ec2rescue-begin"></a>

次の自動化を実行する前に、以下の操作を行います。
+ 到達不可能なインスタンスのインスタンス ID をコピーします。この ID は次の手順で指定します。
+ オプションとして、到達不可能なインスタンスと同じアベイラビリティーゾーンのサブネットの ID を収集します。このサブネットに EC2Rescue インスタンスが作成されます。サブネットを指定しないと、Automation により、新しい一時 VPC が に作成されますAWS アカウント AWS アカウント に、少なくとも 1 つの利用可能な VPC があることを確認します。デフォルトでは、リージョンで最大 5 つの VPC を作成できます。リージョンですでに 5 つの VPC を作成した場合、自動化は失敗し、インスタンスへの変更は行われません。Amazon VPC クォータの詳細については、「Amazon VPC ユーザーガイド」の「[VPC とサブネット](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-vpcs-subnets)」を参照してください。
+ 必要に応じて、自動化用の AWS Identity and Access Management (IAM) ロールを作成および指定できます。このロールを指定しない場合、自動化はそれを実行したユーザーのコンテキストで実行されます。

### インスタンスでアクションを実行するための `AWSSupport-EC2Rescue` アクセス許可の付与
<a name="automation-ec2rescue-access"></a>

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

#### IAM ポリシーを使用したアクセス許可の付与
<a name="automation-ec2rescue-access-iam"></a>

次の IAM ポリシーをユーザー、グループ、ロールにインラインポリシーとしてアタッチするか、新しい IAM マネージドポリシーを作成し、ユーザー、グループ、ロールにアタッチできます。ユーザー、グループ、ロールへのインラインポリシーの追加の詳細については、「[インラインポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)」を参照してください。新しい管理ポリシーの作成の詳細については、「[管理ポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html)」を参照してください。

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

**AWSSupport-EC2Rescue 用の IAM ポリシー**

*[Account ID]* (アカウント ID) をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction"
            ],
            "Resource": "arn:aws:lambda:*:111122223333: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::111122223333:role/AWSSupport-EC2Rescue-*",
                "arn:aws:iam::111122223333: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*",
                "autoscaling:DescribeAutoScalingInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

#### CloudFormation テンプレートを使用したアクセス権限の付与
<a name="automation-ec2rescue-access-cfn"></a>

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

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

1. [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip) をダウンロードし、`AWSSupport-EC2RescueRole.json` ファイルをローカルマシン上のディレクトリに展開します。

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

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

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

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

1. **[スタックの作成]** ページの **[前提条件 - テンプレートの準備]** で、**[テンプレートの準備完了]** を選択します。

1. **[テンプレートの指定]** で、**[テンプレートファイルのアップロード]** を選択します。

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

1. **[次へ]** を選択します。

1. **[スタックの詳細の指定]** ページの **[スタック名]** フィールドに、このスタックを識別する名前を入力し、**[次へ]** を選択します。

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

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

1. **[Next]** (次へ) を選択します。

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

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

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

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

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

## 自動化の実行
<a name="automation-ec2rescue-executing"></a>

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

**`AWSSupport-ExecuteEC2Rescue` Automation を実行するには**

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

1. ナビゲーションペインで **[オートメーション]** を選択します。

1. **[オートメーションを実行]** を選択します。

1. **オートメーションドキュメント]** セクションで、リストから **[Amazon が所有]** を選択します。

1. ランブックリストで、`AWSSupport-ExecuteEC2Rescue` のカード内のボタンを選択し、**[次へ]** を選択します。

1. **[オートメーションドキュメントの実行]** ページで、**[シンプルな実行]** を選択します。

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

1. **[パラメータの入力]** セクションで、以下のパラメータを指定します。

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

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

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

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

   1. **[SubnetId]** で、到達不可能なインスタンスと同じアベイラビリティーゾーンの既存の VPC のサブネットを指定します。デフォルトでは、Systems Manager によって新しい VPC が作成されますが、必要に応じて既存の VPC のサブネットを指定できます。
**注記**  
バケットまたはサブネット ID を指定するオプションが表示されない場合は、最新の **[デフォルト]** バージョンのランブックを使用していることを確認します。

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

1. **[実行]** を選択します。

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

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

この AMI は、Automation の実行 ID で検索することで、Amazon EC2 コンソールで見つけることができます。

# EC2 インスタンスでのパスワードと SSH キーのリセット
<a name="automation-ec2reset"></a>

`AWSSupport-ResetAccess` ランブックを使用して、Windows Server 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでローカル管理者パスワード生成を自動的に再有効化し、Linux 用の EC2 インスタンスで新しい SSH キーを生成できます。`AWSSupport-ResetAccess` ランブックは、AWS Systems Manager アクション、AWS CloudFormation アクション、および AWS Lambda 関数の組み合わせを実行することで、ローカル管理者パスワードのリセットに通常必要なステップを自動化するよう設計されています。

AWS Systems Manager のツールである Automation を使用して、`AWSSupport-ResetAccess` ランブックで、以下の問題を解決できます。

**Windows**

*EC2 キーペアを紛失した場合*: この問題を解決するには、**AWSSupport-ResetAccess** ランブックを使用して現在のインスタンスからパスワード対応の AMI を作成し、この AMI から新しいインスタンスを起動して、所有するキーペアを選択します。

*ローカル管理者パスワードを紛失した場合*: この問題を解決するには、`AWSSupport-ResetAccess` ランブックを使用して、現在の EC2 キーペアで復号できる新しいパスワードを生成できます。

**Linux**

*EC2 キーペアを紛失したか、インスタンスへの SSH アクセスを設定したキーを紛失した場合*: この問題を解決するには、`AWSSupport-ResetAccess` ランブックを使用し、現在のインスタンス用に新しい SSH キーを作成することで、インスタンスに再接続できます。

**注記**  
Windows Server の EC2 インスタンスが Systems Manager 用に設定されている場合、EC2Rescue と AWS Systems Manager Run Command を使用してローカル管理者パスワードをリセットすることもできます。詳細については、「Amazon EC2 ユーザーガイド」の「[EC2Rescue for Windows Server を Systems Manager の Run Command で使用する](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html)」を参照してください。

**関連情報**  
「Amazon EC2 ユーザーガイド」の「[PuTTY を使用した Windows から Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)」

## 仕組み
<a name="automation-ec2reset-how"></a>

Automation と `AWSSupport-ResetAccess` ランブックによるインスタンスのトラブルシューティングは、次のように機能します。
+ インスタンスの ID を指定して、ランブックを実行します。
+ システムは一時 VPC を作成し、一連の Lambda 関数を実行して VPC を設定します。
+ システムは元のインスタンスと同じアベイラビリティーゾーン内で一時 VPC のサブネットを識別します。
+ システムは一時的な、SSM を有効にした ヘルパーインスタンスを起動します。
+ システムは元のインスタンスを停止して、バックアップを作成します。次に、元のルートボリュームをヘルパーインスタンスにアタッチします。
+ システムは、Run Command を使用してヘルパーインスタンスで EC2Rescue を実行します。Windows の場合、EC2Rescue は、アタッチされた元のルートボリュームで EC2Config または EC2Launch を使用することで、ローカル管理者のパスワード生成を有効にします。Linux の場合、EC2Rescue は新しい SSH キーを生成して挿入し、プライベートキーで暗号化して Parameter Store に保存します。完了すると、EC2Rescue は元のインスタンスにルートボリュームを再アタッチします。
+ パスワード生成が有効になっているため、システムはインスタンスの新しい Amazon Machine Image (AMI) を作成します。この AMI を使用して新しい EC2 インスタンスを作成し、必要に応じて新しいキーペアを関連付けます。
+ システムは元のインスタンスを再起動して、一時インスタンスを削除します。また、一時 VPC と、自動化の開始時に作成された Lambda 関数を削除します。
+ **Windows**: インスタンスでは、それに割り当てられている現在のキーペアを使用して Amazon EC2 コンソールから復号できる新しいパスワードを生成します。

  **Linux**: SSH を通じてインスタンスと通信できます。これには、Systems Manager Parameter Store に保存されている SSH キー (**/ec2rl/openssh/*instance ID*/key**) を使用します。

## [開始する前に]
<a name="automation-ec2reset-begin"></a>

次の自動化を実行する前に、以下の操作を行います。
+ 管理者パスワードをリセットするインスタンスのインスタンス ID をコピーします。この ID は次の手順で指定します。
+ オプションとして、到達不可能なインスタンスと同じアベイラビリティーゾーンのサブネットの ID を収集します。このサブネットに EC2Rescue インスタンスが作成されます。サブネットを指定しないと、Automation により、新しい一時 VPC が に作成されますAWS アカウント AWS アカウント に、少なくとも 1 つの利用可能な VPC があることを確認します。デフォルトでは、リージョンで最大 5 つの VPC を作成できます。リージョンですでに 5 つの VPC を作成した場合、自動化は失敗し、インスタンスへの変更は行われません。Amazon VPC クォータの詳細については、「Amazon VPC ユーザーガイド」の「[VPC とサブネット](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-vpcs-subnets)」を参照してください。
+ 必要に応じて、自動化用の AWS Identity and Access Management (IAM) ロールを作成および指定できます。このロールを指定しない場合、自動化はそれを実行したユーザーのコンテキストで実行されます。

### インスタンスでアクションを実行するための AWSSupport-EC2Rescue アクセス許可の付与
<a name="automation-ec2reset-access"></a>

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

#### IAM ポリシーを使用したアクセス許可の付与
<a name="automation-ec2reset-access-iam"></a>

次の IAM ポリシーをユーザー、グループ、ロールにインラインポリシーとしてアタッチするか、新しい IAM マネージドポリシーを作成し、ユーザー、グループ、ロールにアタッチできます。ユーザー、グループ、ロールへのインラインポリシーの追加の詳細については、「[インラインポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)」を参照してください。新しい管理ポリシーの作成の詳細については、「[管理ポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html)」を参照してください。

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

**`AWSSupport-ResetAccess` の IAM ポリシー**

*[Account ID]* (アカウント ID) をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction"
            ],
            "Resource": "arn:aws:lambda:*:111122223333: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::111122223333:role/AWSSupport-EC2Rescue-*",
                "arn:aws:iam::111122223333: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"
        }
    ]
}
```

------

#### CloudFormation テンプレートを使用したアクセス権限の付与
<a name="automation-ec2reset-access-cfn"></a>

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

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

1. [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip) をダウンロードし、`AWSSupport-EC2RescueRole.json` ファイルをローカルマシン上のディレクトリに展開します。

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

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

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

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

1. **[スタックの作成]** ページの **[前提条件 - テンプレートの準備]** で、**[テンプレートの準備完了]** を選択します。

1. **[テンプレートの指定]** で、**[テンプレートファイルのアップロード]** を選択します。

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

1. **[次へ]** を選択します。

1. **[スタックの詳細の指定]** ページの **[スタック名]** フィールドに、このスタックを識別する名前を入力し、**[次へ]** を選択します。

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

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

1. **[Next]** (次へ) を選択します。

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

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

1. スタックリストで、先ほど作成したスタックの横にあるオプションを選択し、[**Outputs**] タブを選択します。

1. [**Value**] をコピーします。これは AssumeRole の ARN です。自動化を実行するときに、この ARN を指定します。

## 自動化の実行
<a name="automation-ec2reset-executing"></a>

次の手順では、AWS Systems Manager コンソールを使用して `AWSSupport-ResetAccess` ランブックを実行する方法について説明します。

**重要**  
次のオートメーションではインスタンスを停止します。インスタンスを停止すると、アタッチされたインスタンスストアボリュームのデータが失われます (存在する場合)。また、インスタンスを停止すると、Elastic IP が関連付けられていない場合、そのパブリック IP アドレスも変更されます。これらの設定変更を避けるには、Run Command を使用してアクセスをリセットします。詳細については、「Amazon EC2 ユーザーガイド」の「[EC2Rescue for Windows Server を Systems Manager の Run Command で使用する](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html)」を参照してください。

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

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

1. ナビゲーションペインで **[オートメーション]** を選択します。

1. **[オートメーションを実行]** を選択します。

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

1. ランブックリストで、[**AWSSupport-ResetAccess**] のカードのボタンを選択し、[**Next (次へ)**] を選択します。

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

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

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

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

   1. [**SubnetId**] で、指定したインスタンスと同じアベイラビリティーゾーンの既存の VPC のサブネットを指定します。デフォルトでは、Systems Manager によって新しい VPC が作成されますが、必要に応じて既存の VPC のサブネットを指定できます。
**注記**  
サブネット ID を指定するオプションが表示されない場合は、最新の**デフォルト**バージョンのランブックを使用していることを確認します。

   1. [**EC2RescueInstanceType**] で、EC2Rescue インスタンスのインスタンスタイプを指定します。デフォルトのインスタンスタイプは `t2.medium` です。

   1. [**AssumeRole**] で、CloudFormation コンソールでメモした AssumeRole ARN を指定します (この Automation 用のロールをこのトピックで前述した CloudFormation の手順を使用して作成している場合)。

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

1. [**Execute**] を選択します。

1. オートメーションの進捗をモニタリングするには、実行中のオートメーションを選択し、[**Steps**] タブを選択します。オートメーションが終了したら、[**Descriptions**] タブを選択し、[**View output**] を選択して結果を表示します。個別のステップの出力を表示するには、[**Steps**] タブを選択し、ステップの横にある [**View Outputs**] を選択します。

ランブックは、オートメーションの一環としてバックアップ AMI とパスワード対応の AMI を作成します。オートメーションで作成された他のすべてのリソースは自動的に削除されますが、これらの AMIs はアカウントに残ります。AMIs の名前は次の命名規則に従います。
+ バックアップ AMI: `AWSSupport-EC2Rescue:InstanceID`
+ パスワード対応の AMI: AWSSupport-EC2Rescue: *インスタンス ID* のパスワード対応の AMI

これらの AMIs は、Automation の実行 ID で検索することで見つけることができます。

Linux の場合、インスタンスの新しい SSH プライベートキーは暗号化されて Parameter Store に保存されます。パラメータ名は **/ec2rl/openssh/*instance ID*/key** です。

# 入力トランスフォーマーを使用したオートメーションへのデータの受け渡し
<a name="automation-tutorial-eventbridge-input-transformers"></a>

この AWS Systems Manager Automation チュートリアルでは、Amazon EventBridge の入力トランスフォーマー機能を使用して、インスタンスの状態変更イベントから、 Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの `instance-id` を抽出する方法を説明します。Automation は AWS Systems Manager のツールです。入力トランスフォーマーを使用して、そのデータを `AWS-CreateImage` ランブックターゲットに `InstanceId` 入力パラメータとして渡します。ルールは、任意のインスタンスが `stopped` 状態に変わった時点でトリガーされます。

入力トランスフォーマーの使用方法の詳細については、*Amazon EventBridge ユーザーガイド*の「[チュートリアル: イベントターゲットに渡されるものを入力トランスフォーマーを使用してカスタマイズする](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-input-transformer-tutorial.html)」を参照してください。

**開始する前に**  
EventBridge に必要なアクセス許可と信頼ポリシーを、Systems Manager Automation サービスロールに追加したことを確認します。詳細については、*Amazon EventBridge ユーザーガイド*の「[EventBridge リソースへのアクセス許可の管理の概要](https://docs.aws.amazon.com/eventbridge/latest/userguide/iam-access-control-identity-based-eventbridge.html)」を参照してください。

**オートメーションで Input Transformers を使用するには**

1. Amazon EventBridge コンソール ([https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)) を開きます。

1. ナビゲーションペインで **[ルール]** を選択します。

1. **[ルールの作成]** を選択します。

1. ルールの名前と説明を入力します。

   ルールには同じリージョン内および同じイベントバス上の別のルールと同じ名前を付けることはできません。

1. **[イベントバス]** で、このルールに関連付けるイベントバスを選択します。このルールを使用して、自分の AWS アカウント の一致するイベントに応答する場合は、[**default**] ( デフォルト) を選択します。アカウントの AWS のサービスで発生したイベントは、常にアカウントのデフォルトのイベントバスに移動します。

1. **[ルールタイプ]** で、**[イベントパターンを持つルール]** を選択してください。

1. [**次へ**] を選択します。

1. **[イベントソース]** で、**[AWS イベントまたは EventBridge パートナーイベント]** を選択してください。

1. **[イベントパターン**] セクションで **[パターンフォームを使用する**] を選択します。

1. **[イベントソース]** で、**[AWS のサービス]** を選択してください。

1. **[AWS のサービス]** で **[EC2]** を選択します。

1. **[イベントタイプ]** で **[EC2 Instance State-change Notification]** を選択してください。

1. **[イベントタイプの仕様 1]** で **[特定の状態]** を選択し、**[stopped]** を選択します。

1. **[イベントタイプの仕様 2]** で ** [任意のインスタンス]** を選択するか、**[個別のインスタンス ID]** を選択して、モニタリングするインスタンスの ID を入力します。

1. [**次へ**] を選択します。

1. **[ターゲットタイプ]** では、**[AWS サービス]** を選択します。

1. [**Select a target**] (ターゲットを選択) では、[**Systems Manager オートメーション**] を選択します。

1. [**Document (ドキュメント)**] で、[**AWS-CreateImage**] を選択します。

1. [**Configure automation parameter(s)**] (オートメーションパラメータの構成) で [**Input Transformer**] (入力トランスフォーマー) を選択します。

1. [**Input path**] (入力パス) に「**\$1"instance":"\$1.detail.instance-id"\$1**」と入力します。

1. [**Template**] テンプレートに「**\$1"InstanceId":[<instance>]\$1**」と入力します。

1. [**Execution role**] (実行ロール) で [**Use existing role**] (既存のロールを使用) を選択し、オートメーションサービスロールを選択します。

1. [**次へ**] を選択します。

1. (オプション) ルールに 1 つ以上のタグを入力します。詳細については、*Amazon EventBridge ユーザーガイド*の「[Amazon EventBridge リソースのタグ付け](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-tagging.html)」を参照してください 。

1. [**次へ**] を選択します。

1. ルールの詳細を確認し、**[Create rule]** (ルールの作成) を選択します。