

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

# AWS Systems Manager 変更管理ツール
<a name="systems-manager-actions-and-change"></a>

AWS Systems Manager は、AWS リソースを変更するための次のツールを提供します。

**Topics**
+ [AWS Systems Manager Automation](systems-manager-automation.md)
+ [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md)
+ [AWS Systems Manager Change Manager](change-manager.md)
+ [AWS Systems Manager ドキュメント](documents.md)
+ [AWS Systems Manager Maintenance Windows](maintenance-windows.md)
+ [AWS Systems Manager Quick Setup](systems-manager-quick-setup.md)

# AWS Systems Manager Automation
<a name="systems-manager-automation"></a>

Automation は、AWS のサービス (Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service (Amazon RDS)、Amazon Redshift、Amazon Simple Storage Service (Amazon S3) など) でのメンテナンス、デプロイ、および修復に関する一般的なタスクを簡素化するための AWS Systems Manager のツールです。オートメーションを開始するには、[Systems Manager コンソール](https://console.aws.amazon.com/systems-manager/automation)を開きます。ナビゲーションペインで **[オートメーション]** を選択します。

オートメーションは、AWS リソースを大規模にデプロイ、設定、管理のための、自動化されたソリューションを構築するのに役立ちます。オートメーションを使用すると、自動化の同時実行性をきめ細かく制御できます。同時実行のターゲットにするリソースの数や、オートメーションを停止する前に許容可能なエラーの発生数を指定することが可能です。

オートメーションの使用開始時に役立てていただけるよう、AWS では、いくつかの事前定義済みランブックを開発および保守しています。これら定義済みランブックでは、ユースケースに応じてさまざまなタスクを実行できます。あるいは、カスタムのランブックを作成すれば、独自のニーズを満たすこともできます。オートメーションの進行状況とステータスをモニタリングするには、Systems Manager オートメーションコンソールを使用するか、任意のコマンドラインツールを使用します。オートメーションは Amazon EventBridge とも統合されており、大規模なイベント駆動型アーキテクチャを構築するのに役立ちます。

**注記**  
2025 年 8 月 14 日の時点で Systems Manager Automation を初めて使用するお客様の場合、Automation の無料利用枠は利用できません。既に Automation を使用しているお客様の場合、無料利用枠は 2025 年 12 月 31 日に終了します。現在のサービスコストについては、「[AWS Systems Manager の料金](https://aws.amazon.com/systems-manager/pricing/)」を参照してください。

## オートメーションには組織にとってどのようなメリットがありますか?
<a name="automation-benefits"></a>

オートメーションには、次のようなメリットがあります。
+ **ランブックコンテンツ用のスクリプトサポート**

  `aws:executeScript` アクションを使用することで、Python ならびに PowerShell のカスタム関数を、ランブックから直接実行できます。カスタムのランブックを作成することで、オートメーションで用意されたアクションではサポートされていない各種のタスクを完了できるようになるので、柔軟性が大きく向上します。同時に、ランブックのロジックをより詳細に制御できるようになります。このアクションの使用方法と、既存の自動ソリューションの改善にどのように役立つかについては、「[オートメーションランブックのオーサリング](automation-authoring-runbooks.md)」でサンプルを参照してください。
+  **一元的な場所から複数の AWS アカウント および AWS リージョン 内のオートメーションを実行する** 

  管理者は Systems Manager コンソールから、複数のアカウントとリージョンにわたって、リソースに対してオートメーションを実行できます。
+  **運用のための強化されたセキュリティ** 

  管理者は一元的な場所から、ランブックへのアクセスを許可したり取り消したりできます。AWS Identity and Access Management (IAM) ポリシーのみを使用することで、組織内でオートメーションを使用できる個々のユーザーまたはグループを指定したり、これらのユーザーがアクセスできるランブックを制御することができます。
+  **一般的な IT タスクを自動化する** 

  一般的なタスクを自動化することで、運用効率の向上、組織内での標準化の実施、オペレータが起こすエラー数の削減に役立ちます。例えば、AWS CloudFormation テンプレートを使用してデプロイされたリソースを更新するには、`AWS-UpdateCloudFormationStackWithApproval` ランブックが使用できます。更新には新しいテンプレートが適用されます。更新開始前に 1 人以上のユーザーの承認をリクエストするように自動化を設定できます。
+  **分裂したタスクを一括で安全に実行する** 

  オートメーションには、同時実行数やエラー数のしきい値を指定することで、フリート全体でオートメーションのデプロイを制御するための、レート制御機能などが含まれています。レート制御機能の操作については、「[自動オペレーションを大規模に実行する](running-automations-scale.md)」を参照してください。
+ **複雑なタスクを合理化する**

  オートメーションでは、Golden Amazon Machine Images (AMIs) の作成など、複雑で時間のかかるタスクを合理化するための、事前定義済みランブックが利用できます。例えば、`AWS-UpdateLinuxAmi` および `AWS-UpdateWindowsAmi` ランブックを使用して、ソース AMI から Golden AMIs を作成できます。これらのランブックにより、更新が適用される前後にカスタムスクリプトを実行できます。また、特定のソフトウェアパッケージをインストールに含めたり、除外したりもできます。これらのランブックの使用例については、「[チュートリアル](automation-tutorials.md)」を参照してください。
+ **入力での制約を定義する**

  オートメーションが特定の入力パラメータについて受け入れる値の範囲を、カスタムランブックで定義し制限することができます。例えば、`allowedPattern` では、定義した正規表現に一致する値のみを、入力パラメータから受け入れます。入力パラメータに対し `allowedValues` を指定していると、ランブックで指定した値のみが受け入れられます。
+  **オートメーションアクションからの出力を Amazon CloudWatch Logs にログ記録する** 

  組織の運用上またはセキュリティ上の要件を満たすために、ランブック内で実行されるスクリプトの記録が必要となることがあります。CloudWatch Logs を使用すると、さまざまな AWS のサービス からのログファイルについて、モニタリング、保存、アクセスが行えます。`aws:executeScript` アクションからの出力を CloudWatch Logs のロググループに送信し、デバッグやトラブルシューティングの目的に使用できます。ログデータは、KMS キーを使用した AWS KMS 暗号化の有無にかかわらずロググループに送信できます。詳細については、「[CloudWatch Logs を使用した自動アクション出力のログ記録](automation-action-logging.md)」を参照してください。
+  **Amazon EventBridge との統合** 

  オートメーションは、Amazon EventBridge ルール内で *target* 型としてサポートされます。つまり、イベントを使用してランブックをトリガーすることが可能です。詳細については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」および「[リファレンス: Systems Manager 用の Amazon EventBridge イベントパターンとタイプ](reference-eventbridge-events.md)」を参照してください。
+ **組織のベストプラクティスを共有する**

  リソース管理、運用タスクその他のベストプラクティスをランブックで定義すると、アカウントとリージョン間でそれを共有できます。

## オートメーションはどのようなユーザーに適していますか?
<a name="automation-who"></a>
+ 大規模な運用における効率の向上、手動による介入が原因で起きるエラー数の削減、一般的な問題の解決にかかる時間の短縮を希望される、すべての AWS のお客様にご利用いただけます。
+ デプロイおよび設定タスクを自動化しようとするインフラストラクチャの専門家。
+ 一般的な問題の確実な解決、トラブルシューティングの効率向上、および反復処理の削減を希望する管理者。
+ 通常手動で実行しているタスクの自動化を目指すユーザー。

## オートメーションとは何ですか?
<a name="what-is-an-automation"></a>

*オートメーション*は、ランブックで定義されているすべてのタスクを含んでおり、オートメーションサービスによって実行されます。オートメーションでは、次のコンポーネントを使用して自動化を実行します。


****  

| 概念 | 詳細 | 
| --- | --- | 
|  オートメーションランブック  |  Systems Manager Automation ランブックでは、オートメーション (Systems Manager がマネージドノードと AWS リソースに対して実行するアクション) を定義します。オートメーションには、いくつかのランブックが事前に定義されており、1 つ以上の Amazon EC2 インスタンスの再起動や、Amazon Machine Image (AMI) の作成といった一般的なタスクを実行する際に使用することができます。独自のランブックを作成することもできます。ランブックは YAML や JSON を使用し、これらにはユーザーが指定するステップおよびパラメータが含まれています。ステップは順番に実行されます。詳細については、「[独自のランブックの作成](automation-documents.md)」を参照してください。 ランブックは、`Automation`、`Command`、`Policy` ドキュメントとは異なり、`Session` タイプの Systems Manager ドキュメントです。ランブックは、スキーマバージョン 0.3 をサポートしています。Command ドキュメントは、スキーマバージョン 1.2、2.0、または 2.2 を使用します。ポリシードキュメントは、スキーマバージョン 2.0 以降を使用します。  | 
|  自動化アクション  |  ランブックで定義されているオートメーションには、1 つ以上のステップが含まれています。各ステップは、特定のオペレーションに関連付けられます。このアクションは、ステップの入力、動作、出力を決定します。ステップは、ランブックの `mainSteps` セクションで定義されます。オートメーションは、20 種類の異なるアクションタイプをサポートしています。詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。  | 
|  オートメーションクォータ  |  各 AWS アカウント は、100 個のオートメーションを同時に実行できます。これには、子オートメーション (別のオートメーションによって開始されるオートメーション) とレート制御のオートメーションが含まれます。この数を超えるオートメーションを実行しようとすると、Systems Manager からキューに対して追加のオートメーションが行われ、保留中のステータスが表示されます。このクォータは、適応型同時実行を使用して調整できます。詳細については「[オートメーションで同時実行のニーズに対する適応を許可する](adaptive-concurrency.md)」を参照してください。オートメーションの実行に関する詳細は「[Systems Manager Automation を使用した自動オペレーションを実行する](running-simple-automations.md)」を参照してください。  | 
|  オートメーションキューのクォータ  |  同時オートメーションの制限よりも多くのオートメーションを実行しようとすると、後続のオートメーションがキューに追加されます。各 AWS アカウント は、5,000 個のオートメーションをキューに入れることができます。オートメーションが完了 (または終了状態に到達) すると、キューの最初のオートメーションが開始されます。  | 
|  レート制御のオートメーションクォータ  |  各 AWS アカウント は、25 個のレート制御のオートメーションを同時に実行できます。同時レート制御のオートメーション制限よりも多くのレート制御のオートメーションを実行しようとすると、Systems Manager は後続のレート制御のオートメーションをキューに追加し、保留中のステータスが表示されます。レート制御のオートメーション実行の詳細については、「[自動オペレーションを大規模に実行する](running-automations-scale.md)」を参照してください。  | 
|  レート制御のオートメーションキューのクォータ  |  同時レート制御のオートメーション制限よりも多くのオートメーションを実行しようとすると、後続のオートメーションがキューに追加されます。各 AWS アカウント は、1,000 個のレート制御のオートメーションをキューに入れることができます。オートメーションが完了 (または終了状態に到達) すると、キューの最初のオートメーションが開始されます。  | 

**Topics**
+ [オートメーションには組織にとってどのようなメリットがありますか?](#automation-benefits)
+ [オートメーションはどのようなユーザーに適していますか?](#automation-who)
+ [オートメーションとは何ですか?](#what-is-an-automation)
+ [オートメーションの設定](automation-setup.md)
+ [Systems Manager Automation を使用した自動オペレーションを実行する](running-simple-automations.md)
+ [オートメーション実行の再実行](automation-rerun-executions.md)
+ [承認が必要なオートメーションを実行する](running-automations-require-approvals.md)
+ [自動オペレーションを大規模に実行する](running-automations-scale.md)
+ [複数の AWS リージョン とアカウントでのオートメーションの実行](running-automations-multiple-accounts-regions.md)
+ [EventBridge イベントに基づくオートメーションを実行する](running-automations-event-bridge.md)
+ [オートメーションを段階的に実行する](automation-working-executing-manually.md)
+ [State Manager 関連付けでのオートメーションのスケジュール設定](scheduling-automations-state-manager-associations.md)
+ [メンテナンスウィンドウによるオートメーションのスケジュール設定](scheduling-automations-maintenance-windows.md)
+ [Systems Manager Automation アクションのリファレンス](automation-actions.md)
+ [独自のランブックの作成](automation-documents.md)
+ [Systems Manager Automation ランブックのリファレンス](automation-documents-reference.md)
+ [チュートリアル](automation-tutorials.md)
+ [Systems Manager Automation が返すステータスについて学ぶ](automation-statuses.md)
+ [Systems Manager Automation のトラブルシューティング](automation-troubleshooting.md)

# オートメーションの設定
<a name="automation-setup"></a>

AWS Systems Manager のツールである Automation をセットアップするには、Automation サービスへのユーザーアクセスを検証し、サービスがリソースでアクションを実行できるように、状況に応じてロールを設定する必要があります。また、オートメーションの設定で、適応同時実行モードにオプトインしておくことをお勧めします。適応同時実行では、オートメーションのクォータが、ニーズに合わせて自動的にスケーリングされます。詳細については、「[オートメーションで同時実行のニーズに対する適応を許可する](adaptive-concurrency.md)」を参照してください。

AWS Systems Manager 自動化への適切なアクセスを確保するために、次のユーザーおよびサービスロールの要件を確認します。

## ランブックへのユーザーアクセスの確認
<a name="automation-setup-user-access"></a>

ランブックを使用するアクセス許可があることを確認します。ユーザー、グループ、ロールに管理者権限が割り当てられている場合は、Systems Manager Automation にアクセスできます。管理者権限がない場合は、管理者に `AmazonSSMFullAccess` マネージドポリシーの割り当てを依頼するか、ユーザー、グループ、ロールに同等のアクセス許可を付与するポリシーの割り当てを依頼してください。

**重要**  
IAM ポリシー `AmazonSSMFullAccess` は、Systems Manager のアクションにアクセス許可を付与します。ただし、一部のランブックでは、ランブック `AWS-ReleaseElasticIP` などの他のサービスに対するアクセス許可が必要であり、これには `ec2:ReleaseAddress` に対する IAM アクセス許可が必要です。したがって、ランブックで実行されたアクションを確認し、ユーザー、グループ、ロールに、ランブックに含まれるアクションを実行するために必要なアクセス許可が割り当てられていることを確認する必要があります。

## オートメーションのサービスロール（ロールを引き受ける）アクセスの設定
<a name="automation-setup-configure-role"></a>

オートメーションは、サービスロール（または*継承ロール*）のコンテキストで開始できます。これにより、サービスがユーザーに代わってアクションを実行できるようになります。継承ロールを指定しない場合、オートメーションは、オートメーションを呼び出したユーザーのコンテキストを使用します。

ただし、次の条件では、自動化にサービスロールを指定する必要があります。
+ リソースに対するユーザーのアクセス許可は制限するが、そのユーザーに昇格された許可を必要とするオートメーションを実行させる場合があるとします。このシナリオでは、昇格されたアクセス許可を持つサービスロールを作成して、このユーザーにオートメーションの実行を許可できます。
+ ランブックを実行する Systems Manager State Manager の関連付けを作成する場合。
+ 実行時間が 12 時間を超えると予想されるオペレーションがある場合。
+ `aws:executeScript` アクションを使用して AWS API オペレーションを呼び出したり、AWS リソースを操作する Amazon が所有していないランブックを実行している場合。詳細については、[ランブックを使用するためのアクセス許可](automation-document-script-considerations.md#script-permissions) を参照してください。

自動化のためのサービスロールを作成する必要がある場合、次のいずれかのメソッドを使用できます。

**Topics**
+ [ランブックへのユーザーアクセスの確認](#automation-setup-user-access)
+ [オートメーションのサービスロール（ロールを引き受ける）アクセスの設定](#automation-setup-configure-role)
+ [CloudFormation を使用して Automation 用のサービスロールを作成する](automation-setup-cloudformation.md)
+ [コンソールを使用して Automation 用のサービスロールを作成する](automation-setup-iam.md)
+ [アイデンティティベースのポリシーの設定例](automation-setup-identity-based-policies.md)
+ [オートメーションで同時実行のニーズに対する適応を許可する](adaptive-concurrency.md)
+ [スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)
+ [オートメーションの変更管理の実装](automation-change-calendar-integration.md)

# CloudFormation を使用して Automation 用のサービスロールを作成する
<a name="automation-setup-cloudformation"></a>

AWS Systems Manager のツールである Automation のサービスロールは AWS CloudFormation テンプレートから作成できます。サービスロールを作成したら、パラメータ `AutomationAssumeRole` を使用してランブックでサービスロールを指定できます。

## CloudFormation を使用してサービスロールを作成する
<a name="create-iam-service-role"></a>

CloudFormation を使用して Systems Manager Automation に必要な AWS Identity and Access Management (IAM) ロールを作成するには、次の手順に従います。

**必須の IAM ロールを作成するには**

1. [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationServiceRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationServiceRole.zip) ファイルをダウンロードして解凍します。このファイルには、`AWS-SystemsManager-AutomationServiceRole.yaml` CloudFormation テンプレートファイルが含まれています。

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

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

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

1. [**参照**] を選択して、`AWS-SystemsManager-AutomationServiceRole.yaml` CloudFormation テンプレートファイルを選択します。

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

1. [**Specify stack details (スタックの詳細の指定)**] ページの [**Stack Name (スタック名)**] フィールドに名前を入力します。

1. [**Configure stack options (スタックオプションの設定)**] ページでは何も選択する必要はありません。[**Next**] を選択します。

1. [**Review (確認)**] ページで、下にスクロールして、[**I acknowledge that CloudFormation might create IAM resources**] オプションを選択します。

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

CloudFormation は、[**CREATE\$1IN\$1PROGRESS**] ステータスを約 3 分間表示します。スタックが作成され、ロールを使用できる状態になると、ステータスが [**CREATE\$1COMPLETE**] に変わります。

**重要**  
AWS Identity and Access Management (IAM) サービスロールを使用して他のサービスを呼び出す自動化ワークフローを実行する場合は、それらのサービスを呼び出すためのアクセス許可をサービスロールに設定する必要がある点に注意してください。この要件は、`AWS-ConfigureS3BucketLogging`、`AWS-CreateDynamoDBBackup`、`AWS-RestartEC2Instance` ランブックなど、すべての AWS オートメーションランブック (`AWS-*` ランブック) に適用されます。この要件は、他のサービスを呼び出すアクションを使用して他の AWS のサービスを呼び出すように作成したカスタムオートメーションランブックにも適用されます。例えば、`aws:executeAwsApi`、`aws:createStack`、または `aws:copyImage` のアクションを使用する場合は、それらのサービスを呼び出すためのアクセス許可を持つサービスロールを設定します。ロールに IAM インラインポリシーを追加することで、他の AWS のサービスへのアクセス許可を有効にできます。詳細については、「[(オプション) 他の AWS のサービス を呼び出すためのオートメーションインラインポリシーまたはカスタマー管理ポリシーを追加する](automation-setup-iam.md#add-inline-policy)」を参照してください。

## 自動化のロール情報をコピーする
<a name="copy-iam-role-info"></a>

次の手順を使用して、CloudFormation コンソールから自動化サービスロールの情報をコピーします。ランブックを使用するときは、これらのロールを指定する必要があります。

**注記**  
`AWS-UpdateLinuxAmi` または `AWS-UpdateWindowsAmi` ランブックを実行する場合は、この手順を使ってロール情報をコピーする必要はありません。これらのランブックには、すでにデフォルト値として指定されている必要なロールがあります。これらのランブックで指定されているロールは、IAM 管理ポリシーを使用します。

**ロール名をコピーするには**

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

1. 前の手順で作成したオートメーション [**スタック名**] を選択します。

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

1. [**AutomationServiceRole**] リンクの [**Physical ID**] を選択します。IAM コンソールが、オートメーションサービスロールの概要を開きます。

1. [**ロール ARN**] の横にある Amazon リソースネーム (ARN) をコピーします。ARN は次のようになります。`arn:aws:iam::12345678:role/AutomationServiceRole`

1. ARN を後で使用するテキストファイルに貼り付けます。

これで、自動化用サービスロールの設定が完了しました。ランブックでオートメーションサービスロール ARN を使用できるようになりました。

# コンソールを使用して Automation 用のサービスロールを作成する
<a name="automation-setup-iam"></a>

AWS Systems Manager のツールである Automation のサービスロールを作成する必要がある場合、次のいずれかのタスクを完了します。オートメーションにサービスロールが必要な場合の詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください 。

**Topics**
+ [タスク 1: 自動化のサービスロールを作成する](#create-service-role)
+ [タスク 2: iam:PassRole ポリシーをオートメーションロールにアタッチする](#attach-passrole-policy)

## タスク 1: 自動化のサービスロールを作成する
<a name="create-service-role"></a>

次の手順を使用して、Systems Manager Automation のサービスロールを作成 (または、*ロールを継承*) します。

**注記**  
このロールは、`AWS-CreateManagedLinuxInstance` ランブックなどのランブックでも使用できます。ランブックでこのロール、または AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN) を使用すると、オートメーションにより新しいインスタンスの起動やユーザーに代わってアクションを実行するなどのアクションをお客様の環境で実行できます。

**IAM ロールを作成し、Automation がそのロールを引き受けることを許可します。**

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

1. ナビゲーションペインで **ロール** を選択し、続いて **ロールを作成する** を選択します。

1. [**Select type of trusted entity **] (信頼されたエンティティの種類を選択) の下で、[**AWS service **] (AWS サービス) を選択します。

1. [**Choose a use case (ユースケースの選択)**] セクションで、[**Systems Manager**] を選択し、[**Next: Permissions (次へ: アクセス許可)**] を選択します。

1. [**Attached permissions policy**] ページで [**AmazonSSMAutomationRole**] を検索して選択したら、[**Next: Review**] を選択します。

1. [**Review (確認)**] ページの [**Role name (ロール名)**] ボックスに名前を入力し、続いて説明を入力します。

1. **[Create role]** (ロールの作成) を選択します。**ロール**ページが再度表示されます。

1. **ロール** ページで作成したロールを選択して、**概要** ページを開きます。[**ロール名**] と [**ロール ARN**] を書き留めます。ロール ARN は、次の手順で **iam:PassRole** ポリシーを IAM アカウントにアタッチするときに指定します。ランブックでロール名と ARN を指定することもできます。

**注記**  
`AmazonSSMAutomationRole` ポリシーは、アカウント内の一部の AWS Lambda 関数に Automation ロールのアクセス許可を割り当てます。これらの関数は「Automation」で始まります。Lambda 関数で Automation を使用する予定の場合、Lambda ARN には以下の形式を使用する必要があります。  
`"arn:aws:lambda:*:*:function:Automation*"`  
この形式を使用していない ARN を持つ既存の Lambda 関数がある場合、オートメーションロールに追加で **AWSLambdaRole** ポリシーなどの Lambda ポリシーをアタッチする必要があります。追加のポリシーまたはロールは、内の Lambda 関数へのより広範なアクセスを許可する必要がありますAWS アカウント

サービスロールを作成した後は、クロスサービスの混乱による代理の問題を防ぐために、信頼ポリシーを修正するようにお勧めします。*「混乱した代理」問題*は、アクションを実行するためのアクセス許可を持たないエンティティが、より特権のあるエンティティにアクションの実行を強制できてしまう場合に生じる、セキュリティ上の問題です。AWS では、サービス間でのなりすましによって、混乱した代理問題が発生する場合があります。サービス間でのなりすましは、1 つのサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスは、本来ならアクセスすることが許可されるべきではない方法でその許可を使用して、別のお客様のリソースに対する処理を実行するように操作される場合があります。これを防ぐため、AWS では、アカウントのリソースへのアクセス権が付与されたサービスプリンシパルで、すべてのサービスのデータを保護するために役立つツールを提供しています。

リソースポリシー内の [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) と [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、リソースについてオートメーションが別のサービスに付与するアクセス許可を、制限することをお勧めします。Amazon S3 バケットの ARN などのアカウント ID が、`aws:SourceArn` 値に含まれていない場合、アクセス許可を制限するためには、これら両方のグローバル条件コンテキストキーを使用する必要があります。同じポリシーステートメントでこれらのグローバル条件コンテキストキーの両方を使用し、アカウント ID に`aws:SourceArn` の値が含まれていない場合、`aws:SourceAccount` 値と `aws:SourceArn` 値の中のアカウントには、同じアカウント ID を使用する必要があります。クロスサービスのアクセスにリソースを 1 つだけ関連付けたい場合は、`aws:SourceArn` を使用します。そのアカウント内のリソースをクロスサービスの使用に関連付けることを許可する場合は、`aws:SourceAccount` を使用します。`aws:SourceArn` の値は、オートメーション実行の ARN である必要があります。リソースの ARN 全体が不明または複数のリソースを指定する場合、ARN の未知部分にワイルドカード `*`が付いた `aws:SourceArn` グローバルコンテキスト条件キー を使用します。例えば、`arn:aws:ssm:*:123456789012:automation-execution/*`。

以下の例はオートメーション用に `aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを使用して「混乱した使節の問題」を防止する方法を示します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ssm.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:ssm:*:123456789012:automation-execution/*"
        }
      }
    }
  ]
}
```

------

**ロールの信頼ポリシーを変更するには**

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

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. アカウントのロールのリストから、オートメーションのサービスロールの名前を選択します。

1. [**Trust relationships**] タブを選択し、続いて [**Edit trust relationship**] を選択します。

1. オートメーション用の `aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを使用して「混乱した代理の問題」を防止するために信頼ポリシーを修正します。

1. **[Update Trust Policy]** (信頼ポリシーの更新) をクリックし、変更を保存します。

### (オプション) 他の AWS のサービス を呼び出すためのオートメーションインラインポリシーまたはカスタマー管理ポリシーを追加する
<a name="add-inline-policy"></a>

IAM サービスロールを使用して他の AWS のサービスを呼び出すオートメーションを実行する場合は、それらのサービスを呼び出すためのアクセス許可をサービスロールに設定する必要があります。この要件は、`AWS-ConfigureS3BucketLogging`、`AWS-CreateDynamoDBBackup`、`AWS-RestartEC2Instance` ランブックなど、すべての AWS オートメーションランブック (`AWS-*` ランブック) に適用されます。この要件は、他のサービスを呼び出すアクションを使用して他の AWS のサービスを呼び出すように作成したカスタムランブックにも適用されます。たとえば、`aws:executeAwsApi`、`aws:CreateStack`、または `aws:copyImage` などのアクションを使用する場合は、それらのサービスを呼び出すためのアクセス許可を持つサービスロールを設定する必要があります。ロールに IAM インラインポリシーまたはカスタマー管理ポリシーを追加することで、他の AWS のサービス へのアクセス許可を有効にできます。

**ユーザーまたはロールのインラインポリシーを埋め込むには (IAM コンソール)**

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

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

1. リストで編集するロールの名前を選択します。

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

1. **[アクセス許可の追加]** ドロップダウンで、**[ポリシーをアタッチする]** または **[インラインポリシーの作成]** を選択します。

1. **[ポリシーをアタッチする]** を選択した場合、追加するポリシーの横にあるチェックボックスを選択して **[アクセス許可の追加]** を選択します。

1. **[ポリシーの作成]** を選択し、**[JSON]** タブを選択します。

1. 呼び出す AWS のサービスの JSON ポリシードキュメントを入力します。JSON ポリシードキュメントの 2 つの例を以下に示します。

   **Amazon S3 PutObject と GetObject の例**

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------

   **Amazon EC2 CreateSnapshot と DescribeSnapShots の例**

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":"ec2:CreateSnapshot",
            "Resource":"*"
         },
         {
            "Effect":"Allow",
            "Action":"ec2:DescribeSnapshots",
            "Resource":"*"
         }
      ]
   }
   ```

------

   IAM ポリシー言語の詳細については、*IAM ユーザーガイド*の「[IAM JSON ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)」を参照してください。

1. 完了したら、[**ポリシーの確認**] を選択します。構文エラーがある場合は、[Policy Validator (ポリシー検証)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html) によってレポートされます。

1. [**ポリシーの確認**] ページで、作成するポリシーの [**名前**] を入力します。ポリシーの [**概要**] を確認して、ポリシーで許可されている権限を確認します。次に [**ポリシーの作成**] を選択して作業を保存します。

1. インラインポリシーを作成した後は、自動的にロールに埋め込まれます。

## タスク 2: iam:PassRole ポリシーをオートメーションロールにアタッチする
<a name="attach-passrole-policy"></a>

以下の手順を使用して、`iam:PassRole` ポリシーを Automation サービスロールにアタッチします。これにより、自動化を実行する際に、Automation サービスによって他のサービスまたは Systems Manager ツールにロールが渡されるようになります。

**iam:PassRole ポリシーを自動化ロールにアタッチするには**

1. 作成したロールの [**Summary**] ページで [**Permissions**] タブを選択します。

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

1. [**ポリシーの作成**] ページの [**Visual editor**] (ビジュアルエディタ) タブを選択します。

1. [**サービス**]、[**IAM**] の順に選択します。

1. [**アクションの選択**] を選択します。

1. [**Filter actions (フィルタアクション)**] テキストボックスに「**PassRole**」と入力し、[**PassRole**] オプションを選択します。

1. [**リソース**] を選択します。[**Specific**] (固有) が選択されていることを確認し、[**Add ARN**] (ARN の追加) を選択します。

1. [**Specify ARN for role**] (ロールの ARN の指定) フィールドに、タスク 1 の終わりでコピーした自動化ロールの ARN を貼り付けます。システムによって、[**アカウント**] と [**Role name with path (ロール名とパス)**] フィールドが入力されます。
**注記**  
オートメーションサービスロールで IAM インスタンスプロファイルロールを EC2 インスタンスにアタッチする場合は、IAM インスタンスプロファイルロールの ARN を追加する必要があります。これにより、オートメーションサービスロールが IAM インスタンスプロファイルのロールをターゲット EC2 インスタンスに渡すことができます。

1. [**Add**] (追加) をクリックします。

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

1. [**Review Policy (ポリシーの確認)**] ページに名前を入力し、[**Create Policy (ポリシーの作成)**] を選択します。

# アイデンティティベースのポリシーの設定例
<a name="automation-setup-identity-based-policies"></a>

以下のセクションでは、AWS Systems Manager Automation サービスの IAM アイデンティティベースのポリシーの例を示します。これらの JSON ポリシードキュメント例を使用して IAM の ID ベースのポリシーを作成する方法の詳細については、IAM ユーザーガイドの「[Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)」を参照してください。

**注記**  
すべての例では架空のアカウント ID が使用されています。AWS 所有のパブリックドキュメントでは、Amazon リソースネーム (ARN) でアカウント ID は指定されていません。

 **例** 
+  [例 1: ユーザーがオートメーションドキュメントを実行してオートメーション実行を表示することを許可する](#automation-setup-identity-based-policies-example-1) 
+  [例 2: ユーザーが特定のバージョンのオートメーションドキュメントを実行することを許可する](#automation-setup-identity-based-policies-example-2) 
+  [例 3: ユーザーが特定のタグを使用してオートメーションドキュメントを実行することを許可する](#automation-setup-identity-based-policies-example-3) 
+  [例 4: 自動化の実行に特定のタグパラメータが指定されている場合にユーザーがオートメーションドキュメントを実行することを許可する](#automation-setup-identity-based-policies-example-4) 

## 例 1: ユーザーがオートメーションドキュメントを実行してオートメーション実行を表示することを許可する
<a name="automation-setup-identity-based-policies-example-1"></a>

次の IAM ポリシーの例では、ユーザーに次の操作を許可します。
+ ポリシーで指定されたオートメーションドキュメントの実行 ドキュメント名は次のエントリによって決定します。

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ オートメーション実行の停止とシグナル送信
+ オートメーション実行の開始後のオートメーション実行の詳細の表示

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}",
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ]
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## 例 2: ユーザーが特定のバージョンのオートメーションドキュメントを実行することを許可する
<a name="automation-setup-identity-based-policies-example-2"></a>

次の IAM ポリシーの例では、オートメーションドキュメントの特定のバージョンの実行をユーザーに許可します。
+ オートメーションドキュメントの名前は次のエントリによって決定します。

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ オートメーションドキュメントのバージョンは次のエントリによって決定します。

  ```
  "ssm:DocumentVersion": "5"
  ```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                   "ssm:DocumentVersion": ["5"]
                }
            }
        },
        {
            "Action": [
                "ssm:StartAutomationExecution"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## 例 3: ユーザーが特定のタグを使用してオートメーションドキュメントを実行することを許可する
<a name="automation-setup-identity-based-policies-example-3"></a>

次の IAM ポリシーの例では、特定のタグを持つオートメーションドキュメントの実行をユーザーに許可します。
+ オートメーションドキュメントの名前は次のエントリによって決定します。

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ ドキュメントのタグは次のエントリによって決定します。

  ```
  "ssm:DocumentVersion": "5"
  ```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stage": "production"
                }
            }
        },
        {
            "Action": [
                "ssm:StartAutomationExecution"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## 例 4: 自動化の実行に特定のタグパラメータが指定されている場合にユーザーがオートメーションドキュメントを実行することを許可する
<a name="automation-setup-identity-based-policies-example-4"></a>

次の例では、IAM ポリシーは、特定のタグパラメータがオートメーション実行に指定されている場合にオートメーションドキュメントを実行するアクセス許可をユーザーに付与します。
+ ポリシーで指定されたオートメーションドキュメントの実行 ドキュメント名は次のエントリによって決定します。

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ オートメーション実行に特定のタグパラメータを指定する必要があります。オートメーション実行リソースのタグパラメータは、次のエントリによって決まります。

  ```
  "aws:ResourceTag/stage": "production"
  ```
+ 指定されたタグがあるオートメーション実行の停止とシグナルの送信。
+ 指定されたタグがあるオートメーション実行の詳細の表示。
+ 指定されたタグを SSM リソースにタグの追加。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}"
            ]
        },
        {
            "Action": [
                "ssm:StartAutomationExecution",
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "beta"
                }
            }
        },
        {
            "Action": "ssm:AddTagsToResource",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ]
        }
    ]
}
```

------

# オートメーションで同時実行のニーズに対する適応を許可する
<a name="adaptive-concurrency"></a>

オートメーションのデフォルトでは、一度に最大 100 個の自動化処理を同時実行できます。またオートメーションには、同時実行される自動化のクォータを自動的に調整するためのオプション設定も用意されています。このオプションを設定することで、同時実行される自動化処理のクォータを、使用可能なリソースに応じて最大で 500 個まで増やすことができます。

**注記**  
オートメーションが API オペレーションを呼び出す場合、ターゲットに合わせて適応的にスケーリングした際に、スロットリングに関する例外が発生する可能性があります。適応的な同時実行を有効にして自動化を実行していて、定期的なスロットリング例外が発生する場合には、API オペレーションのクォータの増加をリクエストする必要も生じます。

**AWS マネジメントコンソール を使用して適応同時実行をオンにするには**

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

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

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **[Enable adaptive concurrency]** (適応同時実行を有効にする) の横にあるチェックボックスをオンにします。

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

**コマンドラインを使用して適応同時実行をオンにするには**
+ AWS CLI または Tools for Windows PowerShell を開き、次のコマンドを実行して、リクエスト元のリージョンのアカウントのために適応同時実行をオンにします。

------
#### [ Linux & macOS ]

  ```
  aws ssm update-service-setting \
      --setting-id /ssm/automation/enable-adaptive-concurrency \
      --setting-value True
  ```

------
#### [ Windows ]

  ```
  aws ssm update-service-setting ^
      --setting-id /ssm/automation/enable-adaptive-concurrency ^
      --setting-value True
  ```

------
#### [ PowerShell ]

  ```
  Update-SSMServiceSetting `
      -SettingId "/ssm/automation/enable-adaptive-concurrency" `
      -SettingValue "True"
  ```

------

# スロットリングされたオペレーションの自動再試行の設定
<a name="automation-throttling-retry"></a>

各アカウントで同時に実行できるオートメーション実行の数には制限があります。アカウントで複数のオートメーションを同時に実行しようとすると、スロットリングの問題が発生する可能性があります。自動スロットリング再試行機能を使用すると、スロットリングされたオートメーションステップの再試行動作を設定できます。

オートメーションアクションの自動スロットリング再試行は、大規模オペレーションに対してより回復力のある実行環境を提供します。スロットリング再試行機能は、`aws:executeScript` を除くすべての[オートメーションアクション](automation-actions.md)をサポートします。

スロットリング再試行設定は、既存の `maxAttempts` ステッププロパティに加えて機能します。両方を設定すると、最初にシステムは指定された時間制限内にスロットリング再試行を試み、ステップが失敗し続ける場合は `maxAttempts` 設定を適用します。

**AWS マネジメントコンソールを使用してスロットリング再試行を設定するには**

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

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

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **スロットリング再試行時間制限**フィールドに、0～3600 秒の値を入力します。これにより、スロットリングが発生したステップを再試行する時間の上限を指定します。

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

**コマンドラインを使用してスロットリング再試行を設定するには**
+ AWS CLI または Tools for Windows PowerShell を開き、次のコマンドを実行して、リクエスト元のリージョンのアカウントのためにスロットリング再試行を設定します。

------
#### [ Linux & macOS ]

  ```
  aws ssm update-service-setting \
      --setting-id /ssm/automation/throttling-retry-time-limit \
      --setting-value 3600
  ```

------
#### [ Windows ]

  ```
  aws ssm update-service-setting ^
      --setting-id /ssm/automation/throttling-retry-time-limit ^
      --setting-value 3600
  ```

------
#### [ PowerShell ]

  ```
  Update-SSMServiceSetting `
      -SettingId "/ssm/automation/throttling-retry-time-limit" `
      -SettingValue "3600"
  ```

------

# オートメーションの変更管理の実装
<a name="automation-change-calendar-integration"></a>

デフォルトのオートメーションでは、日付と時刻の制約なしにランブックを使用できます。オートメーションを Change Calendar と統合することで、AWS アカウント のすべてのオートメーションに変更管理を実装できます。この設定では、アカウントの AWS Identity and Access Management (IAM) プリンシパルは、変更カレンダーで許可されている期間にのみオートメーションを実行できます。Change Calendar での作業の詳細については、「[「Change Calendar」 の使用](systems-manager-change-calendar-working.md)」を参照してください。

**変更管理を有効にするには (コンソール)**

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

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

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **[Change Calendar の統合を有効にする]** の横にあるチェックボックスをオンにします。

1. **[変更カレンダーの選択]** ドロップダウンリストで、オートメーションに適用する変更カレンダーを選択します。

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

# Systems Manager Automation を使用した自動オペレーションを実行する
<a name="running-simple-automations"></a>

デフォルトでは、オートメーションを実行すると、オートメーションはオートメーションを開始したユーザーのコンテキストで実行されます。例えば、 ユーザーが管理者のアクセス許可を持っている場合、オートメーションは、管理者のアクセス許可とオートメーションで設定されているリソースに対するフルアクセスを使用して実行されます。セキュリティのベストプラクティスとして、オートメーションは、AmazonSSMAutomationRole 管理ポリシーで設定されている IAM サービスロール (継承ロールとも呼ばれる) を使用して実行することをお勧めします。さまざまなランブックを使用するために、継承ロールに IAM ポリシーを追加する必要がある場合があります。IAM サービスロールを使用したオートメーションの実行は、*委任管理者*と呼ばれます。

サービスロールを使用すると、AWS リソースに対してオートメーションを実行することはできますが、オートメーションを実行したユーザーによる、それらのリソースに対するアクセスは制限されます (またはアクセスできません)。例えば、サービスロールを設定後、オートメーションでそのロールを使用して、1 つ以上の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを再起動できます。Automation は AWS Systems Manager のツールです。オートメーションによってインスタンスは再起動されますが、ユーザーがそのサービスロールを使用して、そのインスタンスにアクセスすることはできません。

オートメーションを実行する際、ランタイムでサービスロールを指定するか、カスタムのランブックを作成して、ランブックで直接サービスロールを指定することができます。ランタイム時またはランブックでサービスロールを指定した場合、サービスは、指定したサービスロールのコンテキストで実行されます。サービスロールを指定しない場合、システムは、ユーザーのコンテキストで一時セッションを作成し、オートメーションを実行します。

**注記**  
オートメーションを 12 時間以上実行する場合は、サービスロールを指定する必要があります。ユーザーのコンテキストで長時間稼働するオートメーションを開始すると、ユーザーの一時セッションの有効期限は 12 時間後に切れます。

委任管理者は、AWS リソースの昇格されたセキュリティと制御を保証します。また、アクションは複数の IAM リソースではなく、主要サービスロールのリソースに対して実行されているため、監査プロセスを強化することができます。

**[開始する前に]**  
次の手順を完了する前に、IAM サービスロールを作成し、AWS Systems Manager のツールである Automation への信頼関係を設定する必要があります。詳細については、「[タスク 1: 自動化のサービスロールを作成する](automation-setup-iam.md#create-service-role)」を参照してください。

次の手順では、Systems Manager コンソールまたは任意のコマンドラインツールを使用してシンプルなオートメーションを実行する方法を説明します。

## シンプルなオートメーションを実行する (コンソール)
<a name="simple-console"></a>

次の手順では、Systems Manager コンソールを使用してシンプルなオートメーションを実行する方法を説明します。

**シンプルなオートメーションを実行するには**

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

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

1. [**Input parameters (入力パラメータ)**] セクションで、必要な入力を指定します。必要に応じて、[**AutomationAssumeRole**] リストから IAM サービスロールを選択できます。

1. (オプション) モニタリング用のオートメーションに適用する CloudWatch アラームを選択します。CloudWatch アラームをオートメーションにアタッチするには、コマンドを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。アラームが作動すると、オートメーションは停止されます。AWS CloudTrail を使用する場合、トレイルに API コールが表示されます。

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

オートメーションのステータスがコンソールに表示されます。オートメーションの実行に失敗した場合は、「[Systems Manager Automation のトラブルシューティング](automation-troubleshooting.md)」を参照してください。

オートメーション実行が完了したら、同じパラメータまたは変更されたパラメータを使用して実行を再実行できます。詳細については、「[オートメーション実行の再実行](automation-rerun-executions.md)」を参照してください。

## シンプルなオートメーションを実行する (コマンドライン)
<a name="simple-cli"></a>

次の手順では、AWS CLI (Linux または Windows) または AWS Tools for PowerShell を使用してシンプルなオートメーションを実行する方法を説明します。

**シンプルなオートメーションを実行するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. 以下のコマンドを実行して、シンプルなオートメーションを開始します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --parameters runbook parameters
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --parameters runbook parameters
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
     -DocumentName runbook name `
     -Parameter runbook parameters
   ```

------

   ランブック `AWS-RestartEC2Instance` を使用して指定した EC2 インスタンスを再起動する例を次に示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-RestartEC2Instance" \
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-RestartEC2Instance" ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
     -DocumentName AWS-RestartEC2Instance `
     -Parameter @{"InstanceId"="i-02573cafcfEXAMPLE"}
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab"
   }
   ```

------
#### [ PowerShell ]

   ```
   4105a4fc-f944-11e6-9d32-0123456789ab
   ```

------

1. 次のコマンドを実行してオートメーションのステータスを取得します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
       --filter "Key=ExecutionId,Values=4105a4fc-f944-11e6-9d32-0123456789ab"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
       --filter "Key=ExecutionId,Values=4105a4fc-f944-11e6-9d32-0123456789ab"
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
     Where {$_.AutomationExecutionId -eq "4105a4fc-f944-11e6-9d32-0123456789ab"}
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionMetadataList": [
           {
               "AutomationExecutionStatus": "InProgress",
               "CurrentStepName": "stopInstances",
               "Outputs": {},
               "DocumentName": "AWS-RestartEC2Instance",
               "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab",
               "DocumentVersion": "1",
               "ResolvedTargets": {
                   "ParameterValues": [],
                   "Truncated": false
               },
               "AutomationType": "Local",
               "Mode": "Auto",
               "ExecutionStartTime": 1564600648.159,
               "CurrentAction": "aws:changeInstanceState",
               "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
               "LogFile": "",
               "Targets": []
           }
       ]
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionMetadataList": [
           {
               "AutomationExecutionStatus": "InProgress",
               "CurrentStepName": "stopInstances",
               "Outputs": {},
               "DocumentName": "AWS-RestartEC2Instance",
               "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab",
               "DocumentVersion": "1",
               "ResolvedTargets": {
                   "ParameterValues": [],
                   "Truncated": false
               },
               "AutomationType": "Local",
               "Mode": "Auto",
               "ExecutionStartTime": 1564600648.159,
               "CurrentAction": "aws:changeInstanceState",
               "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
               "LogFile": "",
               "Targets": []
           }
       ]
   }
   ```

------
#### [ PowerShell ]

   ```
   AutomationExecutionId       : 4105a4fc-f944-11e6-9d32-0123456789ab
   AutomationExecutionStatus   : InProgress
   AutomationType              : Local
   CurrentAction               : aws:changeInstanceState
   CurrentStepName             : startInstances
   DocumentName                : AWS-RestartEC2Instance
   DocumentVersion             : 1
   ExecutedBy                  : arn:aws:sts::123456789012:assumed-role/Administrator/Admin
   ExecutionEndTime            : 1/1/0001 12:00:00 AM
   ExecutionStartTime          : 7/31/2019 7:17:28 PM
   FailureMessage              : 
   LogFile                     : 
   MaxConcurrency              : 
   MaxErrors                   : 
   Mode                        : Auto
   Outputs                     : {}
   ParentAutomationExecutionId : 
   ResolvedTargets             : Amazon.SimpleSystemsManagement.Model.ResolvedTargets
   Target                      : 
   TargetMaps                  : {}
   TargetParameterName         : 
   Targets                     : {}
   ```

------

# オートメーション実行の再実行
<a name="automation-rerun-executions"></a>

AWS Systems Manager オートメーション実行を再実行すると、同じパラメータまたは変更されたパラメータを使用してタスクを繰り返すことができます。再実行機能により、オートメーション設定を手動で再作成することなく、オートメーション実行を効率的にレプリケートできるようになるため、運用上のオーバーヘッドが減り、設定エラーの可能性が軽減されます。

オートメーション実行を再実行すると、元のランブックパラメータ、Amazon CloudWatch アラーム、タグが以前の実行から保持されます。新しい実行 ID と更新されたタイムスタンプを使用して、新しい実行が作成されます。シンプル実行、レート制御実行、クロスアカウントおよびクロスリージョン実行、手動実行など、任意のタイプのオートメーション実行を再実行できます。

## オートメーション実行を再実行する (コンソール)
<a name="rerun-console"></a>

次の手順では、Systems Manager コンソールを使用してオートメーション実行を再実行する方法を説明します。

**[オートメーション] ホームページからオートメーション実行を再実行するには**

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

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

1. 実行リストで、再実行する実行を選択します。

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

1. **[自動化ドキュメントの実行]** ページで、元の実行から事前入力されたパラメータ、実行モード、ターゲット設定を確認します。

1. (オプション) 再実行の必要に応じてパラメータ、ターゲット、またはその他の設定を変更します。

1. **[実行]** を選択して、新しい実行 ID で再実行を開始します。

**[実行の詳細] ページからオートメーション実行を再実行するには**

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

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

1. 再実行するオートメーションの実行 ID を選択します。

1. [実行の詳細] ページで、**[実行の再実行]** を選択します。

1. **[自動化ドキュメントの実行]** ページで、元の実行から事前入力されたパラメータ、実行モード、ターゲット設定を確認します。

1. (オプション) 再実行の必要に応じてパラメータ、ターゲット、またはその他の設定を変更します。

1. **[実行]** を選択して、新しい実行 ID で再実行を開始します。

**オートメーション実行を新しい実行にコピーするには**

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

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

1. コピーするオートメーションの実行 ID を選択します。

1. [実行の詳細] ページで、**[アクション]** を選択し、**[新規にコピー]** を選択します。

1. **[自動化ドキュメントの実行]** ページで、元の実行から事前入力されたパラメータ、実行モード、ターゲット設定を確認します。

1. (オプション) 新しい実行の必要に応じてパラメータ、ターゲット、またはその他の設定を変更します。

1. **[実行]** を選択して新しい実行を開始します。

# 承認が必要なオートメーションを実行する
<a name="running-automations-require-approvals"></a>

次の手順では、AWS Systems Manager コンソールおよび AWS Command Line Interface (AWS CLI) を使用して、シンプルな実行によりオートメーションを実行する方法について説明します。オートメーションは、オートメーションアクション `aws:approve` を使用します。これにより、指定されたプリンシパルがアクションを承認または拒否するまで、オートメーションは一時停止します。このオートメーションは、現在のユーザーのコンテキストで実行します。これは、ランブックおよびこのランブックが呼び出すアクションを使用するアクセス許可がある限り、追加の IAM アクセス許可を設定する必要がないことを意味しています。IAM での管理者アクセス許可がある場合、このオランブックを実行するアクセス許可を既に保持しています。

**[開始する前に]**  
ランブックで必要とされる標準入力に加えて、`aws:approve` アクションは以下の 2 つのパラメータを必要とします。
+ 承認者のリスト。承認者のリストには、ユーザー名またはユーザー ARN の形式の承認者を少なくとも 1 人含める必要があります。複数の承認者が提供されている場合は、対応する最小承認数もランブック内で指定する必要があります。
+ Amazon Simple Notification Service (Amazon SNS) のトピック ARN Amazon SNS トピック名は、`Automation` で始まる必要があります。

この手順では、承認リクエストを配信するために必要な Amazon SNS トピックが既に作成されていることを前提としています。詳細については、*Amazon Simple Notification Service デベロッパーガイド*の「[トピックの作成](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html#CreateTopic)」を参照してください。

## 承認者によるオートメーションの実行 (コンソール)
<a name="approval-console"></a>

**承認者を使用してオートメーションを実行するには**

次の手順では、Systems Manager コンソールを使用して承認者がシンプルなオートメーションを実行する方法を説明します。

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

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

1. [**Input Parameters (入力パラメータ)**] セクションで、必須の入力パラメータを指定します。

   例えば、`AWS-StartEC2InstanceWithApproval` ランブックを選択した場合は、[**InstanceId**] パラメータにインスタンス ID を指定または選択する必要があります。

1. **[承認者]** セクションで、自動化アクションの承認者のユーザー名またはユーザー ARN を指定します。

1. [**SNSTopicARN**] セクションで、承認通知の送信に使用する SNS トピックの ARN を指定します。SNS トピック名は **Automation** で始まる必要があります。

1. 必要に応じて、[**AutomationAssumeRole**] リストから IAM サービスロールを選択できます。100 を超えるアカウントとリージョンをターゲットにする場合は、`AWS-SystemsManager-AutomationAdministrationRole` を指定する必要があります。

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

指定された承認者は、オートメーションを承認または却下するための詳細を含む Amazon SNS 通知を受け取ります。この承認アクションは発行日から 7 日間有効で、Systems Manager コンソールまたは AWS Command Line Interface (AWS CLI) を使用して発行できます。

オートメーションを承認することを選択した場合、オートメーションは指定されたランブックに含まれているステップを実行し続けます。オートメーションのステータスがコンソールに表示されます。オートメーションの実行に失敗した場合は、「[Systems Manager Automation のトラブルシューティング](automation-troubleshooting.md)」を参照してください。

**オートメーションを許可または拒否するには**

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

1. ナビゲーションペインで、[**Automation (オートメーション)**] を選択し、前の手順で実行したオートメーションを選択します。

1. [**Actions (アクション)**] を選択して、[**Approve/Deny (承認/拒否)**] を選択します。

1. [**Approve (承認)**] または [**Deny (拒否)**]を選択し、オプションでコメントを入力します。

1. [**Submit**] (送信) をクリックします。

## 承認者によるオートメーションの実行 (コマンドライン)
<a name="approval-cli"></a>

次の手順では、AWS CLI (Linux または Windowsで) または AWS Tools for PowerShell を使用して承認者がオートメーションを実行する方法を説明します。

**承認者を使用してオートメーションを実行するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. 次のコマンドを実行して、承認者によりオートメーションを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。[Document name (文書名)] セクションで、オートメーションアクション `aws:approve` を含むランブックを指定します。

   `Approvers` には、アクションの承認者のユーザー名またはユーザー ARN を指定します。`SNSTopic` に、承認通知の送信に使用する SNS トピック の ARN を指定します。Amazon SNS トピック名は、`Automation` で始まる必要があります。
**注記**  
承認者および SNS トピックのパラメータ値の特定の名前は、選択したランブック内で指定されている値によって異なります。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-StartEC2InstanceWithApproval" \
       --parameters "InstanceId=i-02573cafcfEXAMPLE,Approvers=arn:aws:iam::123456789012:role/Administrator,SNSTopicArn=arn:aws:sns:region:123456789012:AutomationApproval"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-StartEC2InstanceWithApproval" ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE,Approvers=arn:aws:iam::123456789012:role/Administrator,SNSTopicArn=arn:aws:sns:region:123456789012:AutomationApproval"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName AWS-StartEC2InstanceWithApproval `
       -Parameters @{
           "InstanceId"="i-02573cafcfEXAMPLE"
           "Approvers"="arn:aws:iam::123456789012:role/Administrator"
           "SNSTopicArn"="arn:aws:sns:region:123456789012:AutomationApproval"
       }
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "df325c6d-b1b1-4aa0-8003-6cb7338213c6"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "df325c6d-b1b1-4aa0-8003-6cb7338213c6"
   }
   ```

------
#### [ PowerShell ]

   ```
   df325c6d-b1b1-4aa0-8003-6cb7338213c6
   ```

------

**オートメーションを承認するには**
+ オートメーションを承認するには、次のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

  ```
  aws ssm send-automation-signal \
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" \
      --signal-type "Approve" \
      --payload "Comment=your comments"
  ```

------
#### [ Windows ]

  ```
  aws ssm send-automation-signal ^
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" ^
      --signal-type "Approve" ^
      --payload "Comment=your comments"
  ```

------
#### [ PowerShell ]

  ```
  Send-SSMAutomationSignal `
      -AutomationExecutionId df325c6d-b1b1-4aa0-8003-6cb7338213c6 `
      -SignalType Approve `
      -Payload @{"Comment"="your comments"}
  ```

------

  コマンドが成功した場合、出力はありません。

**オートメーションを拒否するには**
+ オートメーションを拒否するには、次のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

  ```
  aws ssm send-automation-signal \
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" \
      --signal-type "Deny" \
      --payload "Comment=your comments"
  ```

------
#### [ Windows ]

  ```
  aws ssm send-automation-signal ^
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" ^
      --signal-type "Deny" ^
      --payload "Comment=your comments"
  ```

------
#### [ PowerShell ]

  ```
  Send-SSMAutomationSignal `
      -AutomationExecutionId df325c6d-b1b1-4aa0-8003-6cb7338213c6 `
      -SignalType Deny `
      -Payload @{"Comment"="your comments"}
  ```

------

  コマンドが成功した場合、出力はありません。

# 自動オペレーションを大規模に実行する
<a name="running-automations-scale"></a>

AWS Systems Manager オートメーションを使用すると、ターゲットを使用して AWS リソースのフリートで自動化処理を実行できます。さらに、同時実行値とエラーのしきい値を指定することで、フリート全体のオートメーションのデプロイを制御することができます。同時実行数とエラーのしきい値機能は、まとめて*レート制御*と呼ばれます。同時実行値は、オートメーションを同時に実行できるリソースの数を決定します。オートメーションには、オプトインできる適応同時実行モードも用意されています。適応同時実行では、同時実行される自動化処理数のクオータが、100 個から最大 500 個まで自動的にスケーリングされます。エラーのしきい値は、Systems Manager がオートメーションの他のリソースへの送信を停止するまでの、オートメーションの失敗の許容量を決定します。

同時実行とエラーしきい値の詳細については、「[オートメーションを大規模に制御する](running-automations-scale-controls.md)」を参照してください。ターゲットの詳細については、「[オートメーションのターゲットのマッピング](running-automations-map-targets.md)」を参照してください。

以下の手順で、Systems Manager コンソールおよび AWS Command Line Interface (AWS CLI) を使用して、適応同時実行を有効化する方法、ならびに、ターゲットおよびレート制御を使用したオートメーションの実行方法について説明します。

## ターゲットとレート制御を使用してオートメーションを実行する (コンソール)
<a name="scale-console"></a>

次の手順では、Systems Manager コンソールを使用してターゲットおよびレート制御により、シンプルなオートメーションを実行する方法を説明します。

**ターゲットとレート制御を使用してオートメーションを実行するには**

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

1. [**Execution Mode (実行モード)**] セクションで [**Rate Control (レート制御)**] を選択します。ターゲットとレート制御を使用する場合は、このモードまたは [**Multi-account and Region (マルチアカウントとリージョン)**] を使用する必要があります。

1. [**Targets (ターゲット)**] セクションで、オートメーションを実行する AWS リソースをどのようにターゲットにするかを選択します。これらのオプションは必須です。

   1. [**Parameter (パラメータ)**] リストを使用してパラメータを選択します。[**Parameter (パラメータ)**] リストの項目は、この手順の開始時に選択した自動化ドキュメントのランブックによって決まります。パラメータを選択して、自動化ワークフローが実行されるリソースの種類を定義します。

   1. [**Targets (ターゲット)**] リストを使用して、リソースをターゲットにする方法を選択します。

      1. パラメータ値を使用してターゲットリソースを選択した場合は、[**Input parameters (パラメータの入力)**] セクションで選択したパラメータのパラメータ値を入力します。

      1. AWS Resource Groups を使用してターゲットリソースを選択した場合、[**Resource Group (リソースグループ)**] リストからグループの名前を選択します。

      1. タグを使用してターゲットリソースを選択した場合は、タグキーと (オプションとして) タグ値をフィールドに入力します。[**Add**] (追加) をクリックします。

      1. 現在の AWS アカウント および AWS リージョン にあるすべてのインスタンスでオートメーションランブックを実行する場合、[**All instances (すべてのインスタンス)**] を選択します。

1. [**Input parameters (入力パラメータ)**] セクションで、必要な入力を指定します。必要に応じて、[**AutomationAssumeRole**] リストから IAM サービスロールを選択できます。
**注記**  
[**Input parameters (入力パラメータ)**] セクションでオプションを選択する必要はありません。これは、タグまたはリソースグループを使用してリソースをターゲットとしたためです。例えば、`AWS-RestartEC2Instance` ランブックを選択した場合、[**Input parameters (入力パラメータ)**] セクションでインスタンス ID を指定または選択する必要はありません。オートメーションの実行では、指定したタグまたはリソースグループを使用してインスタンスを再起動します。

1. [**Rate control (レート制御)**] セクションのオプションを使用して、各アカウントとリージョンのペア内でオートメーションを実行できる AWS リソースの数を制限します。

   [**Concurrency (同時実行数)**] セクションでオプションを選択します。
   + [**targets (ターゲット)**] を選択して、自動化ワークフローを同時に実行できるターゲットの絶対数を入力します。
   + [**percentage (パーセント値)**] を選択して、自動化ワークフローを同時に実行できるターゲットセットのパーセント値を入力します。

1. [**Error threshold (エラーのしきい値)**] セクションでオプションを選択します。
   + [**errors (エラー)**] を選択して、自動化が他のリソースへのワークフローの送信を停止するまでに許容されるエラーの絶対数を入力します。
   + [**percentage (パーセント値)**] を選択して、自動化が他のリソースへのワークフローの送信を停止するまでに許容されるエラーのパーセント値を入力します。

1. (オプション) モニタリング用のオートメーションに適用する CloudWatch アラームを選択します。CloudWatch アラームをオートメーションにアタッチするには、コマンドを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。アラームが作動すると、オートメーションは停止されます。AWS CloudTrail を使用する場合、トレイルに API コールが表示されます。

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

レート制御のオートメーションによって開始されたオートメーションを表示するには、ナビゲーションペインで [オートメーション] を選択し、[**Show child automations (子オートメーションを表示)**] を選択します。

オートメーション実行が完了したら、同じパラメータまたは変更されたパラメータを使用して実行を再実行できます。詳細については、「[オートメーション実行の再実行](automation-rerun-executions.md)」を参照してください。

## ターゲットとレート制御を使用してオートメーションを実行する (コマンドライン)
<a name="scale-cli"></a>

次の手順では、AWS CLI (Linux または Windows) または AWS Tools for PowerShell を使用して、ターゲットとレート制御でオートメーションを実行する方法を説明します。

**ターゲットとレート制御を使用してオートメーションを実行するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. ドキュメントのリストを表示するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

   使用するランブックの名前を書き留めます。

1. 以下のコマンドを実行して、ランブックの詳細を表示します。詳細を表示するランブックの*[runbook name]* (ランブック名) を置き換えます。さらに、`--target-parameter-name` オプションに使用するパラメータ名 (例: `InstanceId`) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
       --name runbook name
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
       --name runbook name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
       -Name runbook name
   ```

------

1. 実行するターゲットとレート制御オプションを使用するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   *タグを使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=tag:key name,Values=value \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value,input parameter 2 name=input parameter 2 value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=tag:key name,Values=value ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value,input parameter 2 name=input parameter 2 value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "tag:key name"
   $Targets.Values = "value"
   
   Start-SSMAutomationExecution `
       DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value";"input parameter 2 name"="input parameter 2 value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   *パラメータ値を使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=ParameterValues,Values=value,value 2,value 3 \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=ParameterValues,Values=value,value 2,value 3 ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ParameterValues"
   $Targets.Values = "value","value 2","value 3"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   *AWS Resource Groups を使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=ResourceGroup,Values=Resource group nname \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=ResourceGroup,Values=Resource group name ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "Resource group name"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   現在の AWS アカウント と AWS リージョン で、Amazon EC2 インスタンスをターゲットにする

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets "Key=AWS::EC2::Instance,Values=*"  \
       --target-parameter-name instanceId \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=AWS::EC2::Instance,Values=* ^
       --target-parameter-name instanceId ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "AWS::EC2::Instance"
   $Targets.Values = "*"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "instanceId" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE"
   }
   ```

------
#### [ PowerShell ]

   ```
   a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   ```

------

1. 以下のコマンドを実行して、オートメーションを表示します。各*オートメーション実行 ID* をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
       --filter Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
       --filter Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
       Where {$_.AutomationExecutionId -eq "automation execution ID"}
   ```

------

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

------
#### [ Linux & macOS ]

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

------
#### [ Windows ]

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

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecution `
       -AutomationExecutionId automation execution ID
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecution": {
           "StepExecutionsTruncated": false,
           "AutomationExecutionStatus": "Success",
           "MaxConcurrency": "1",
           "Parameters": {},
           "MaxErrors": "1",
           "Outputs": {},
           "DocumentName": "AWS-StopEC2Instance",
           "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE",
           "ResolvedTargets": {
               "ParameterValues": [
                   "i-02573cafcfEXAMPLE"
               ],
               "Truncated": false
           },
           "ExecutionEndTime": 1564681619.915,
           "Targets": [
               {
                   "Values": [
                       "DEV"
                   ],
                   "Key": "tag:ENV"
               }
           ],
           "DocumentVersion": "1",
           "ExecutionStartTime": 1564681576.09,
           "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
           "StepExecutions": [
               {
                   "Inputs": {
                       "InstanceId": "i-02573cafcfEXAMPLE"
                   },
                   "Outputs": {},
                   "StepName": "i-02573cafcfEXAMPLE",
                   "ExecutionEndTime": 1564681619.093,
                   "StepExecutionId": "86c7b811-3896-4b78-b897-01234EXAMPLE",
                   "ExecutionStartTime": 1564681576.836,
                   "Action": "aws:executeAutomation",
                   "StepStatus": "Success"
               }
           ],
           "TargetParameterName": "InstanceId",
           "Mode": "Auto"
       }
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecution": {
           "StepExecutionsTruncated": false,
           "AutomationExecutionStatus": "Success",
           "MaxConcurrency": "1",
           "Parameters": {},
           "MaxErrors": "1",
           "Outputs": {},
           "DocumentName": "AWS-StopEC2Instance",
           "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE",
           "ResolvedTargets": {
               "ParameterValues": [
                   "i-02573cafcfEXAMPLE"
               ],
               "Truncated": false
           },
           "ExecutionEndTime": 1564681619.915,
           "Targets": [
               {
                   "Values": [
                       "DEV"
                   ],
                   "Key": "tag:ENV"
               }
           ],
           "DocumentVersion": "1",
           "ExecutionStartTime": 1564681576.09,
           "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
           "StepExecutions": [
               {
                   "Inputs": {
                       "InstanceId": "i-02573cafcfEXAMPLE"
                   },
                   "Outputs": {},
                   "StepName": "i-02573cafcfEXAMPLE",
                   "ExecutionEndTime": 1564681619.093,
                   "StepExecutionId": "86c7b811-3896-4b78-b897-01234EXAMPLE",
                   "ExecutionStartTime": 1564681576.836,
                   "Action": "aws:executeAutomation",
                   "StepStatus": "Success"
               }
           ],
           "TargetParameterName": "InstanceId",
           "Mode": "Auto"
       }
   }
   ```

------
#### [ PowerShell ]

   ```
   AutomationExecutionId       : a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   AutomationExecutionStatus   : Success
   CurrentAction               : 
   CurrentStepName             : 
   DocumentName                : AWS-StopEC2Instance
   DocumentVersion             : 1
   ExecutedBy                  : arn:aws:sts::123456789012:assumed-role/Administrator/Admin
   ExecutionEndTime            : 8/1/2019 5:46:59 PM
   ExecutionStartTime          : 8/1/2019 5:46:16 PM
   FailureMessage              : 
   MaxConcurrency              : 1
   MaxErrors                   : 1
   Mode                        : Auto
   Outputs                     : {}
   Parameters                  : {}
   ParentAutomationExecutionId : 
   ProgressCounters            : 
   ResolvedTargets             : Amazon.SimpleSystemsManagement.Model.ResolvedTargets
   StepExecutions              : {i-02573cafcfEXAMPLE}
   StepExecutionsTruncated     : False
   Target                      : 
   TargetLocations             : {}
   TargetMaps                  : {}
   TargetParameterName         : InstanceId
   Targets                     : {tag:Name}
   ```

------
**注記**  
コンソールで、オートメーションのステータスをモニタリングすることもできます。[**Automation executions (オートメーション実行)**] リストで、先ほど開始した実行を選択し、[**Execution steps (実行ステップ)**] タブを選択します。このタブには、オートメーションアクションのステータスが表示されます。

# オートメーションのターゲットのマッピング
<a name="running-automations-map-targets"></a>

`Targets` パラメータを使用すると、オートメーションの対象リソースを素早く定義できます。例えば、マネージドインスタンスを再起動するオートメーションを実行する場合は、コンソールで多数のインスタンス ID を手動で選択したりコマンドで入力したりする代わりに、`Targets` パラメータを使用して Amazon Elastic Compute Cloud (Amazon EC2) タグを指定しインスタンスをターゲティングできます。

ターゲットを使用するオートメーションを実行すると、AWS Systems Manager はターゲットごとに子 Automation を作成します。例えば、タグを指定して Amazon Elastic Block Store (Amazon EBS) ボリュームをターゲットに設定し、それらのタグが 100 の Amazon EBS ボリュームに解決された場合、Systems Manager は 100 の子オートメーションを作成します。親 Automation は、すべての子 Automation が最終状態に達すると完了します。

**注記**  
実行時に指定する `input parameters` (コンソールの [**Input parameters (入力パラメータ)**] セクション、またはコマンドラインの `parameters` オプションを使用) は、すべての子 Automation によって自動的に処理されます。

タグ、リソースグループ、およびパラメータ値を使用して、オートメーションのリソースをターゲットにすることができます。さらに、`TargetMaps` オプションを使用すると、コマンドラインまたはファイルから複数のパラメータ値を指定できます。次のセクションでは、これらの各ターゲティングオプションについて詳しく説明します。

## タグをターゲットにする
<a name="target-tags"></a>

オートメーションのターゲットとして、1 つのタグを指定できます。Amazon Elastic Compute Cloud (Amazon EC2) および Amazon Relational Database Service (Amazon RDS) インスタンス、Amazon Elastic Block Store (Amazon EBS) ボリュームとスナップショット、Resource Groups、Amazon Simple Storage Service (Amazon S3) バケットなどの多くの AWS リソースはタグをサポートしています。タグをターゲットにすることにより、AWS リソースに対するオートメーションをすばやく実行できます。タグは、Operating\$1System:Linux や Department:Finance などのキーと値のペアです。特定の名前をリソースに割り当てる場合は、「名前」という単語をキーとして使用し、リソースの名前を値として使用することもできます。

オートメーションのターゲットとしてタグを指定する場合は、ターゲットパラメータも指定します。ターゲットパラメータは、`TargetParameterName` オプションを使用します。ターゲットパラメータを選択することで、オートメーションが実行されるリソースのタイプを定義します。タグで指定するターゲットパラメータは、ランブックで定義された有効なパラメータでなければなりません。たとえば、タグを使用して多数の EC2 インスタンスをターゲットにする場合は、`InstanceId` ターゲットパラメータを選択します。このパラメータを選択すると、*インスタンス*がオートメーションのリソースタイプとして定義されます。カスタムランブックを作成するときは、**[ターゲットタイプ]**を `/AWS::EC2::Instance` に指定して、インスタンスのみが使用されるようにする必要があります。そうしなければ、同じタグを持つすべてのリソースがターゲットになります。タグ付きのインスタンスをターゲットにする際に、終了したインスタンスが含まれる場合があります。

次のスクリーンショットでは、`AWS-DetachEBSVolume` ランブックを使用しています。論理ターゲットパラメータは `VolumeId` です。

![\[Systems Manager Automation のターゲットとしてタグを使用する\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/automation-rate-control-tags-1-new.png)


`AWS-DetachEBSVolume` ランブックには、`/AWS::EC2::Volume` に設定された [**Target type (ターゲットの種類)**] という特別なプロパティも含まれています。これは、タグキーペア `Finance:TestEnv` が異なるタイプのリソース (EC2 インスタンス、Amazon EBS ボリューム、Amazon EBS スナップショットなど) を返す場合、Amazon EBS ボリュームのみが使用されることを意味します。

**重要**  
ターゲットのパラメータ名では大文字と小文字が区別されます。AWS Command Line Interface (AWS CLI) または AWS Tools for Windows PowerShell を使用してオートメーションを実行する場合は、ランブックで定義されているとおり、ターゲットパラメータ名を正確に入力する必要があります。指定しないと、システムは `InvalidAutomationExecutionParametersException` エラーを返します。[DescribeDocument](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeDocument.html) API オペレーションを使用すると、特定のランブックで使用可能なターゲットパラメータに関する情報を表示できます。次に、`AWS-DeleteSnapshot` ドキュメントに関する情報を提供する AWS CLI コマンドの例を示します。  

```
aws ssm describe-document \
    --name AWS-DeleteSnapshot
```

さらに、タグを使用してリソースをターゲットにする AWS CLI コマンドの例を示します。

**例 1: Amazon EC2 インスタンスを再起動するために、キーと値のペアを使用してタグをターゲットにする**

この例では、*Department* のキーと *HumanResources* の値でタグ付けされたすべての Amazon EC2 インスタンスを再起動します。ターゲットパラメータは、ランブックの *InstanceId* パラメータを使用します。この例では、Automation サービスロール (*引き受けロール*) を使用して、自動化を実行するための追加のパラメータを使用しています。

```
aws ssm start-automation-execution \
    --document-name AWS-RestartEC2Instance \
    --targets Key=tag:Department,Values=HumanResources \
    --target-parameter-name InstanceId \
    --parameters "AutomationAssumeRole=arn:aws:iam::111122223333:role/AutomationServiceRole"
```

**例 2: Amazon EBS スナップショットを削除するために、キーと値のペアを使用してタグをターゲットにする**

以下の例では、`AWS-DeleteSnapshot` ランブックを使用して、*Name* キーと、*January2018Backups* 値のすべてのスナップショットを削除します。ターゲットのパラメータは、*VolumeId* パラメータを使用します。

```
aws ssm start-automation-execution \
    --document-name AWS-DeleteSnapshot \
    --targets Key=tag:Name,Values=January2018Backups \
    --target-parameter-name VolumeId
```

## AWS Resource Groups をターゲットにする
<a name="target-resource-groups"></a>

オートメーションのターゲットとして、1 つの AWS リソースグループを指定できます。Systems Manager は、ターゲットリソースグループ内のすべてのオブジェクトに対して子オートメーションを作成します。

たとえば、リソースグループの 1 つに PatchedAMI という名前が付けられているとします。この Resource Group には、定期的にパッチ適用される 25 個の Windows Amazon Machine Images (AMIs) のリストが含まれています。`AWS-CreateManagedWindowsInstance` ランブックを使用し、この Resource Group をターゲットとするオートメーションを実行すると、Systems Manager は 25 個の AMIs ごとに子オートメーションを作成します。つまり、PatchedAMIs Resource Group をターゲットとすることで、オートメーションはパッチを適用した AMIs のリストから 25 個のインスタンスを作成します。親オートメーションは、すべての子オートメーションが処理を完了するか、最終状態に達すると完了します。

次の AWS CLI コマンドは、PatchAMI リソースグループの例に適用されます。このコマンドは、`--target-parameter-name` オプションの *AmiId* パラメータを受け取ります。このコマンドには、各 AMI から作成するインスタンスのタイプを定義する追加のパラメータは含まれていません。`AWS-CreateManagedWindowsInstance` ランブックはデフォルトで t2.medium インスタンスタイプになっているため、このコマンドは Windows Server に 25 個の t2.medium Amazon EC2 インスタンスを作成します。

```
aws ssm start-automation-execution \
    --document-name AWS-CreateManagedWindowsInstance \
    --targets Key=ResourceGroup,Values=PatchedAMIs  \
    --target-parameter-name AmiId
```

次のコンソールの例では、t2-micro-instances というリソースグループを使用しています。

![\[Systems Manager Automation による AWS リソースグループのターゲット設定\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/automation-rate-control-resource-groups-new.png)


## パラメータ値のターゲット設定
<a name="target-parameter-values"></a>

パラメータ値をターゲットにすることもできます。`ParameterValues` をキーとして入力し、オートメーションを実行する特定のリソース値を入力します。複数の値を指定すると、Systems Manager は指定された各値に対して子オートメーションを実行します。

たとえば、ランブックに ** instanceID ** パラメーターが含まれているとします。オートメーションを実行するときに [**InstanceID**] パラメータの値を指定すると、Systems Manager は指定された各インスタンス ID 値に対して子オートメーションを実行します。オートメーションが指定された各インスタンスの実行を終了するか、オートメーションが失敗した場合、親オートメーションは完了します。最大 50 個のパラメータ値を対象にすることができます。

次の例では、`AWS-CreateImage` ランブックを使用します 指定されたターゲットパラメータ名は *InstanceId* です。キーは *ParameterValues* を使用します。値は 2 つの Amazon EC2 インスタンス ID です。このコマンドは、インスタンスごとにオートメーションを作成し、各インスタンスから AMI を生成します。

```
aws ssm start-automation-execution 
    --document-name AWS-CreateImage \
    --target-parameter-name InstanceId \
    --targets Key=ParameterValues,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE
```

**注記**  
`AutomationAssumeRole` は有効なパラメータではありません。パラメータ値をターゲットにするオートメーションを実行するときは、この項目を選択しないでください。

### パラメータ値マップをターゲットにする
<a name="target-maps"></a>

`TargetMaps` オプションは、`ParameterValues` をターゲットにする機能を拡張します。コマンドラインで `TargetMaps` を使用すると、パラメータ値の配列を入力できます。コマンドラインでは、最大 50 のパラメータ値を指定できます。50 を超えるパラメータ値を指定するコマンドを実行する場合は、値を JSON ファイルに入力できます。その後、コマンドラインからファイルを呼び出すことができます。

**注記**  
コンソールでは、`TargetMaps` オプションはサポートされていません。

コマンドで `TargetMaps` オプションを使用して複数のパラメータ値を指定するには、次の形式を使用します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

```
aws ssm start-automation-execution \
    --document-name runbook name \
    --target-maps “parameter=value, parameter 2=value, parameter 3=value”  “parameter 4=value, parameter 5=value, parameter 6=value”
```

`TargetMaps` オプションに 50 以上のパラメータ値を入力する場合は、次の JSON 形式を使用してファイル内の値を指定します。JSON ファイルを使用すると、複数のパラメータ値を提供する際の読みやすさも向上します。

```
[

    {“parameter”: "value", “parameter 2”: "value", “parameter 3”: "value"},

    {“parameter 4”: "value", “parameter 5”: "value", "parameter 6": "value"}

]
```

.json ファイル拡張子でこのファイルを保存します。次のコマンドを使用してファイルを呼び出すことができます。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

```
aws ssm start-automation-execution \
    --document-name runbook name \
    –-parameters input parameters \
    --target-maps path to file/file name.json
```

またはバケットからデータを読み取るアクセス権限を持っている限り、Amazon Simple Storage Service (Amazon S3) バケットからファイルをダウンロードすることもできます。次のコマンド形式を使用します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

```
aws ssm start-automation-execution \
    --document-name runbook name \
    --target-maps http://amzn-s3-demo-bucket.s3.amazonaws.com/file_name.json
```

以下は、`TargetMaps` オプションを理解するのに役立つシナリオの例です。このシナリオでは、ユーザーは異なる AMIs から異なるタイプの Amazon EC2 インスタンスを作成する必要があります。このタスクを実行するには、AMI\$1Testing という名前のランブックを作成します。このランブックでは、`instanceType` と `imageId` の 2 つの入力パラメータを定義しています。

```
{
  "description": "AMI Testing",
  "schemaVersion": "0.3",
  "assumeRole": "{{assumeRole}}",
  "parameters": {
    "assumeRole": {
      "type": "String",
      "description": "Role under which to run the automation",
      "default": ""
    },
    "instanceType": {
      "type": "String",
      "description": "Type of EC2 Instance to launch for this test"
    },
    "imageId": {
      "type": "String",
      "description": "Source AMI id from which to run instance"
    }
  },
  "mainSteps": [
    {
      "name": "runInstances",
      "action": "aws:runInstances",
      "maxAttempts": 1,
      "onFailure": "Abort",
      "inputs": {
        "ImageId": "{{imageId}}",
        "InstanceType": "{{instanceType}}",
        "MinInstanceCount": 1,
        "MaxInstanceCount": 1
      }
    }
  ],
  "outputs": [
    "runInstances.InstanceIds"
  ]
}
```

次に、ユーザーは `AMI_instance_types.json` という名前のファイルで次のターゲットパラメータ値を指定します。

```
[
  {
    "instanceType" : ["t2.micro"],     
    "imageId" : ["ami-b70554c8"]     
  },
  {
    "instanceType" : ["t2.small"],     
    "imageId" : ["ami-b70554c8"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  }
]
```

ユーザーはオートメーションを実行し、次のコマンドを実行して `AMI_instance_types.json` で定義された 5 つの EC2 インスタンスを作成できます。

```
aws ssm start-automation-execution \
    --document-name AMI_Testing \
    --target-parameter-name imageId \
    --target-maps file:///home/TestUser/workspace/runinstances/AMI_instance_types.json
```

## すべての Amazon EC2 インスタンスをターゲットにする
<a name="target-all-instances"></a>

**[ターゲット]** リストで **[すべてのインスタンス]** をクリックすることにより、現在の AWS アカウント と AWS リージョン のすべての Amazon EC2 インスタンスで自動化を実行できます。例えば、AWS アカウント と現在の AWS リージョン にあるすべての Amazon EC2 インスタンスを再起動する場合は、`AWS-RestartEC2Instance` ランブックを選択した上で、**[ターゲット]** のリストから **[すべてのインスタンス]** を選択します。

![\[ランブックのすべての Amazon EC2 インスタンスをターゲットにする\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/automation-rate-control-target-all-instances.png)


[**すべてのインスタンス**] を選択すると、[**インスタンス**] フィールドにアスタリスク (\$1) が入力され、フィールドを変更できなくなります (フィールドはグレー表示されます)。また、Systems Manager では、[**入力パラメータ**] フィールドの [**InstanceId**] フィールドを変更できなくなります。すべてのインスタンスをターゲットにするよう選択する場合、これらのフィールドが変更できなくなることは想定される動作となります。

# オートメーションを大規模に制御する
<a name="running-automations-scale-controls"></a>

同時実行値とエラーのしきい値を指定することで、AWS リソースのフリート全体でオートメーションのデプロイを制御できます。同時実行数とエラーのしきい値は、まとめて*レート制御*と呼ばれます。

**同時実行**  
Concurrency (同時実行) を使用すると、オートメーションを同時に実行できるリソースの数を指定できます。同時実行数は、オートメーションを処理する際のリソースへの影響やダウンタイムを制限するのに役立ちます。リソースの絶対数 (20 など) またはターゲットセットのパーセント数 (10% など) を指定できます。

キューシステムにより、オートメーションは 1 つのリソースに送信され、この最初の呼び出しが完了するのを待ってから、さらに 2 つのリソースにオートメーションが送信されます。同時実行値の値に達するまで、システムはオートメーションをより多くのリソースに指数関数的に送信します。

**エラーしきい値**  
エラーしきい値を使用すると、AWS Systems Manager が他のリソースへオートメーションの送信を停止するまでの、オートメーションの失敗の許容量を決定できます。エラーの絶対数 (10 など) またはターゲットセットのパーセント数 (10% など) を指定できます。

たとえば、エラーの絶対数として 3 を指定すると、4 番目のエラーを受信した際に、システムはオートメーションの実行を停止します。値として 0 を指定した場合、最初のエラー結果が返されると、システムから他のターゲットでオートメーションが実行されなくなります。

たとえば、50 のインスタンスにオートメーションを送信し、エラーしきい値を 10% に設定した場合、5 番目のエラーが受信されると、システムから他のインスタンスにコマンドが送信されなくなります。エラーのしきい値に達したときに既にオートメーションを実行中の呼び出しについては、完了を許可されますが、これらのオートメーションも失敗する可能性があります。エラーのしきい値に指定された数より多くのエラーが発生しないようにする必要がある場合は、[**Concurrency (同時実行数)**] 値を 1 に設定して、オートメーションを 1 つずつ進めるようにします。

# 複数の AWS リージョン とアカウントでのオートメーションの実行
<a name="running-automations-multiple-accounts-regions"></a>

中央アカウントから、複数の AWS リージョン および AWS アカウント または AWS Organizations 組織単位 (OU) で AWS Systems Manager オートメーションを実行することができます。Automation は AWS Systems Manager のツールです。複数のリージョンやアカウント、または OU でオートメーションを実行すると、AWS リソースの管理に必要な時間が短縮され、コンピューティング環境のセキュリティが強化されます。

例えば、オートメーションランブックを使用して次を実行できます。
+ パッチ適用とセキュリティ更新を一元的に実装します。
+ VPC 設定や Amazon S3 バケットポリシーでコンプライアンスの問題を修正します。
+ Amazon Elastic Compute Cloud (Amazon EC2) EC2 インスタンスなどのリソースを、大規模に管理します。

次の図は、中央アカウントから、複数のリージョンおよびアカウントで `AWS-RestartEC2Instances` ランブックを実行しているユーザーの例を示しています。オートメーションは、対象のリージョンおよびアカウントで指定されたタグを使用してインスタンスを検索します。

![\[次の図は、複数のリージョンおよび複数のアカウントで実行されている Systems Manager Automation を示しています。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/automation-multi-region-and-multi-account.png)


**オートメーション用の中央アカウントを選択する**  
OU 全体でオートメーションを実行する場合、中央アカウントには OU 内のすべてのアカウントを一覧表示する権限が必要です。これは、委任された管理者アカウントまたは組織の管理アカウントからのみ可能です。AWS Organizations ベストプラクティスに従い、委任された管理者アカウントを使用することをお勧めします。AWS Organizations ベストプラクティスの詳細については、「AWS Organizations ユーザーガイド」の「[管理アカウントのベストプラクティス](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html)」を参照してください。Systems Manager 用に委任された管理者アカウントを作成するには、次の例のように、`register-delegated-administrator` コマンドと AWS CLI を使用できます。

```
aws organizations register-delegated-administrator \
    --account-id delegated admin account ID \
    --service-principal ssm.amazonaws.com
```

AWS Organizations で管理されていない複数のアカウントでオートメーションを実行したい場合は、オートメーション管理専用のアカウントを作成することをお勧めします。すべてのクロスアカウントオートメーションを専用アカウントから実行すると、IAM 権限管理やトラブルシューティング作業が簡単になり、運用と管理が分離されます。この方法は、AWS Organizations を使用し、OU ではなく個々のアカウントのみを対象とする場合にも推奨されます。

**オートメーション実行の仕組み**  
複数のリージョンとアカウント、または OU でオートメーションを実行すると、次のように動作します。

1. オートメーション中央アカウントとして設定するアカウントにサインインします。

1. このトピックの [マルチリージョンおよびマルチアカウントのオートメーションのための管理アカウントアクセス許可の設定](#setup-management-account-iam-roles) 手順を使用して、次の IAM ロールを作成します。
   + `AWS-SystemsManager-AutomationAdministrationRole` - このロールは、複数のアカウントと OU でオートメーションを実行するアクセス許可をユーザーに付与します。
   + `AWS-SystemsManager-AutomationExecutionRole` - このロールは、ターゲットアカウントでオートメーションを実行するアクセス許可をユーザーに付与します。

1. オートメーションを実行するランブック、リージョン、およびアカウント、または OU を選択します。
**注記**  
ターゲット OU に目的のアカウントが含まれていることを確認します。カスタムランブックを選択した場合は、ランブックをすべてのターゲットアカウントと共有する必要があります。ランブック共有の詳細については、「[SSM ドキュメントの共有](documents-ssm-sharing.md)」を参照してください。共有ランブックの使用については、「[共有 SSM ドキュメントを使用する](documents-ssm-sharing.md#using-shared-documents)」を参照してください。

1. オートメーションを実行します。

1. AWS Systems Manager コンソール、または AWS CLI から [GetAutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetAutomationExecution.html)、[DescribeAutomationStepExecutions](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAutomationStepExecutions.html)、および [DescribeAutomationExecutions](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAutomationExecutions.html) API オペレーションを使用して、オートメーションの進行状況をモニタリングします。プライマリアカウントのオートメーションのステップの出力は、子オートメーションの `AutomationExecutionId` になります。ターゲットアカウントで作成された子オートメーションの出力を表示するには、リクエストで適切なアカウント、リージョン、および `AutomationExecutionId` を指定してください。

## マルチリージョンおよびマルチアカウントのオートメーションのための管理アカウントアクセス許可の設定
<a name="setup-management-account-iam-roles"></a>

 を使用して、Systems Manager Automation のマルチリージョンおよびマルチアカウントのオートメーションに必要な IAM ロールを作成するには、次の手順に従いますAWS CloudFormation ここでは、`AWS-SystemsManager-AutomationAdministrationRole` ロールの作成方法について説明します。オートメーション中央アカウントでこのロールを作成するだけで済みます。この手順では、`AWS-SystemsManager-AutomationExecutionRole` ロールの作成方法についても説明します。マルチリージョンおよびマルチアカウントのオートメーションを実行するために、ターゲットとする*すべて*のアカウントでこのロールを作成する必要があります。CloudFormation StackSet を使用して、マルチリージョンおよびマルチアカウントのオートメーションを実行するターゲットとするアカウントに `AWS-SystemsManager-AutomationExecutionRole` ロールを作成することをお勧めします。

**CloudFormation を使用してマルチリージョンおよびマルチアカウントのオートメーションに必要な IAM 管理ロールを作成するには**

1. [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole.zip) をダウンロードして、解凍します。

   -または-

   アカウントが AWS Organizations によって管理されている場合、[https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole (org).zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole (org).zip) をダウンロードして解凍します。

   これらのファイルには、それぞれ `AWS-SystemsManager-AutomationAdministrationRole.yaml` および `AWS-SystemsManager-AutomationAdministrationRole (org).yaml` CloudFormation テンプレートファイルが含まれています。

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

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

1. **[Specify template]** (テンプレートの指定) セクションで、**[Upload a template]** (テンプレートのアップロード)] を選択します。

1. **[ファイルを選択]** を選択し、ステップ 1 で選択した内容に応じて `AWS-SystemsManager-AutomationAdministrationRole.yaml` または `AWS-SystemsManager-AutomationAdministrationRole (org).yaml` CloudFormation テンプレートファイルを選択します。

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

1. [**Specify stack details (スタックの詳細の指定)**] ページの [**Stack Name (スタック名)**] フィールドに名前を入力します。

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

1. [**Configure stack options**] (スタックオプションの設定) ページで、使用するオプションの値を入力します。[**次へ**] を選択します。

1. **[確認]** ページをスクロールダウンして、**[CloudFormation がカスタム名で IAM リソースを作成する可能性があることを承認します]** オプションを選択します。

1. **[スタックの作成]** を選択してください。

CloudFormation は、[**CREATE\$1IN\$1PROGRESS**] の状態を約 3 分間表示します。状態が [**CREATE\$1COMPLETE**] に変わります。

マルチリージョンおよびマルチアカウントのオートメーションを実行するために、ターゲットとするすべてのアカウントで以下の手順を繰り返す必要があります。

**CloudFormation を使用してマルチリージョンおよびマルチアカウントのオートメーションに必要な IAM オートメーションロールを作成するには**

1. [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole.zip)をダウンロードします。

   または

   アカウントが AWS Organizations によって管理されている場合、[https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole (org).zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole (org).zip) をダウンロードして解凍します。

   これらのファイルには、それぞれ `AWS-SystemsManager-AutomationExecutionRole.yaml` および `AWS-SystemsManager-AutomationExecutionRole (org).yaml`CloudFormation テンプレートファイルが含まれています。

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

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

1. **[Specify template]** (テンプレートの指定) セクションで、**[Upload a template]** (テンプレートのアップロード)] を選択します。

1. **[ファイルを選択]** を選択し、ステップ 1 で選択した内容に応じて `AWS-SystemsManager-AutomationExecutionRole.yaml` または `AWS-SystemsManager-AutomationExecutionRole (org).yaml` CloudFormation テンプレートファイルを選択します。

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

1. [**Specify stack details (スタックの詳細の指定)**] ページの [**Stack Name (スタック名)**] フィールドに名前を入力します。

1. **[Parameters]** (パラメータ) セクションの **[AdminAccountId]** フィールドに、オートメーション中央アカウントの ID を入力します。

1. AWS Organizations 環境でこのロールを設定する場合、**[OrganizationID]** というセクションには別のフィールドがあります。AWS 組織の ID を入力します。

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

1. [**Configure stack options**] (スタックオプションの設定) ページで、使用するオプションの値を入力します。[**次へ**] を選択します。

1. **[確認]** ページをスクロールダウンして、**[CloudFormation がカスタム名で IAM リソースを作成する可能性があることを承認します]** オプションを選択します。

1. **[スタックの作成]** を選択してください。

CloudFormation は、[**CREATE\$1IN\$1PROGRESS**] の状態を約 3 分間表示します。状態が [**CREATE\$1COMPLETE**] に変わります。

## 複数のリージョンとアカウントでのオートメーションを実行する (コンソール)
<a name="multiple-console"></a>

次の手順では、Systems Manager コンソールを使用して、オートメーション管理アカウントから複数のリージョンおよびアカウントでオートメーションを実行する方法を説明します。

**開始する前に**  
次の手順を完了する前に、次の情報を書き留めます。
+ マルチリージョンまたはマルチアカウントのオートメーションの実行に使用するユーザーまたはロールには、`AWS-SystemsManager-AutomationAdministrationRole` ロールの `iam:PassRole` アクセス許可が必要です。
+ AWS アカウントオートメーションを実行する ID または OU。
+ オートメーションを実行する [Systems Manager でサポートされているリージョン](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)。
+ オートメーションを実行するタグキーとタグ値、またはリソースグループの名前。

**複数のリージョンとアカウントでオートメーションを実行する**

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

1. [**Execute automation document (自動化ドキュメントの実行)**] ページで、[**Multi-account and Region (複数のアカウントとリージョン)**] を選択します。

1. **[ターゲットのアカウントとリージョン]** セクションで、**[アカウント、組織単位 (OU)、およびルート]** フィールドを使用して、オートメーションを実行する別の AWS アカウント または AWS 組織単位 (OU) を指定します。カンマで複数のアカウントまたは OU を区切ります。

   1. (オプション) **[子 OU を含める]** チェックボックスを選択して、指定された OU 内のすべての子組織単位を含めます。

   1. (オプション) **[アカウントおよび組織単位 (OU) の除外]** フィールドに、上記の展開されたエンティティから除外するアカウント ID と OU ID のカンマ区切りリストを入力します。

1. **[リージョン]** リストを使用して、1 つ以上のリージョンを選択してオートメーションを実行します。

1. [**Multi-Region and account rate control (複数のリージョンとアカウントのレート制御)**] オプションを使用して、オートメーションを、限定された数のリージョンで実行されている限られた数のアカウントに制限します。これらのオプションは、オートメーションの実行が可能な AWS リソースの数を制限するわけではありません。

   1. [**Location (account-Region pair) concurrency (場所 (アカウントとリージョンのペア) の同時実行)**] セクションで、複数のアカウントとリージョンで同時に実行できるオートメーションの数を制限するオプションを選択します。例えば、4 つの AWS リージョン にある、5 つの AWS アカウント でオートメーションを実行すると、Systems Manager は合計 20 のアカウントとリージョンのペアでオートメーションを実行します。このオプションを使用して、オートメーションが 2 つのアカウントとリージョンのペアで同時に実行されるように、絶対数 (**2** など) を指定することができます。または、同時に実行できるアカウントとリージョンのペアのパーセント値を指定することもできます。例えば、20 のアカウントとリージョンのペアに 20% と指定すると、オートメーションは同時に最大 5 つのアカウントとリージョンのペアで実行されます。
      + [**targets (ターゲット)**] を選択して、オートメーションを同時に実行できるアカウントとリージョンのペアの絶対数を入力します。
      + [**percent (パーセント)**] を選択して、オートメーションを同時に実行できるアカウントとリージョンのペアの合計数のパーセント値を入力します。

   1. [**Error threshold (エラーのしきい値)**] セクションでオプションを選択します。
      + [**errors (エラー)**] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーの絶対数を入力します。
      + [**percent (パーセント)**] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーのパーセント値を入力します。

1. [**Targets (ターゲット)**] セクションで、オートメーションを実行する AWS リソースをどのようにターゲットにするかを選択します。これらのオプションは必須です。

   1. [**Parameter (パラメータ)**] リストを使用してパラメータを選択します。[**Parameter (パラメータ)**] リストの項目は、この手順の開始時に選択した自動化ドキュメントのランブックによって決まります。パラメータを選択して、自動化ワークフローが実行されるリソースの種類を定義します。

   1. [**Targets (ターゲット)**] リストを使用して、リソースをターゲットにする方法を選択します。

      1. パラメータ値を使用してターゲットリソースを選択した場合は、[**Input parameters (パラメータの入力)**] セクションで選択したパラメータのパラメータ値を入力します。

      1. AWS Resource Groups を使用してターゲットリソースを選択した場合、[**Resource Group (リソースグループ)**] リストからグループの名前を選択します。

      1. タグを使用してターゲットリソースを選択した場合は、タグキーと (オプションとして) タグ値をフィールドに入力します。[**Add**] (追加) をクリックします。

      1. 現在の AWS アカウント および AWS リージョン にあるすべてのインスタンスでオートメーションランブックを実行する場合、[**All instances (すべてのインスタンス)**] を選択します。

1. [**Input parameters (入力パラメータ)**] セクションで、必要な入力を指定します。**AutomationAssumeRole** リストから `AWS-SystemsManager-AutomationAdministrationRole` IAM サービスロールを選択します。
**注記**  
[**Input parameters (入力パラメータ)**] セクションでオプションを選択する必要はありません。これは、タグまたはリソースグループを使用して複数のリージョンおよびアカウントのリソースをターゲットとしたためです。例えば、`AWS-RestartEC2Instance` ランブックを選択した場合、[**Input parameters (入力パラメータ)**] セクションでインスタンス ID を指定または選択する必要はありません。オートメーションでは、指定したタグを使用してインスタンスを再起動します。

1. (オプション) モニタリング用のオートメーションに適用する CloudWatch アラームを選択します。CloudWatch アラームをオートメーションにアタッチするには、コマンドを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。アラームがアクティブになると、自動化は実行されず、定義したすべての `OnCancel` ステップが実行されます。AWS CloudTrail を使用する場合、トレイルに API コールが表示されます。

1. [**Rate control (レート制御)**] セクションのオプションを使用して、各アカウントとリージョンのペア内でオートメーションを実行できる AWS リソースの数を制限します。

   [**Concurrency (同時実行数)**] セクションでオプションを選択します。
   + [**targets (ターゲット)**] を選択して、自動化ワークフローを同時に実行できるターゲットの絶対数を入力します。
   + [**percentage (パーセント値)**] を選択して、自動化ワークフローを同時に実行できるターゲットセットのパーセント値を入力します。

1. [**Error threshold (エラーのしきい値)**] セクションでオプションを選択します。
   + [**errors (エラー)**] を選択して、自動化が他のリソースへのワークフローの送信を停止するまでに許容されるエラーの絶対数を入力します。
   + [**percentage (パーセント値)**] を選択して、自動化が他のリソースへのワークフローの送信を停止するまでに許容されるエラーのパーセント値を入力します。

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

オートメーション実行が完了したら、同じパラメータまたは変更されたパラメータを使用して実行を再実行できます。詳細については、「[オートメーション実行の再実行](automation-rerun-executions.md)」を参照してください。

## 複数のリージョンとアカウントでの自動化を実行する (コマンドライン)
<a name="multiple-cli"></a>

次の手順では、AWS CLI (Linux または Windows) または AWS Tools for PowerShell を使用して、オートメーション管理アカウントから複数のリージョンおよびアカウントでオートメーションを実行する方法を説明します。

**開始する前に**  
次の手順を完了する前に、次の情報を書き留めます。
+ AWS アカウントオートメーションを実行する ID または OU。
+ オートメーションを実行する [Systems Manager でサポートされているリージョン](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)。
+ オートメーションを実行するタグキーとタグ値、またはリソースグループの名前。

**複数のリージョンとアカウントでオートメーションを実行する**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. 次のフォーマットを使用して、複数のリージョンとアカウントでオートメーションを実行するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name runbook name \
           --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name parameter name \
           --targets Key=tag key,Values=value \
           --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name runbook name ^
           --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name parameter name ^
           --targets Key=tag key,Values=value ^
           --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "tag key"
       $Targets.Values = "value"
       
       Start-SSMAutomationExecution `
           -DocumentName "runbook name" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "parameter name" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="account ID","account ID 2";
           "Regions"="Region","Region 2";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

**例 : 複数のリージョンとアカウントでのオートメーションの実行**  
以下は、AWS CLI と PowerShell を使用して、1 つのコマンドで複数のアカウントとリージョンでオートメーションを実行する方法の例を示しています。

   **例 1**: この例では、AWS Organizations 組織全体の 3 つのリージョンで EC2 インスタンスを再起動します。これを行うには、組織のルート ID をターゲットにして、子 OU を含めます。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" \
           --target-parameter-name InstanceId \
           --targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]' \
           --target-locations '[{
               "Accounts": ["r-example"],
               "IncludeChildOrganizationUnits": true,
               "Regions": ["us-east-1", "us-east-2", "us-west-2"]
           }]'
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" ^
           --target-parameter-name InstanceId ^
           --targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]' ^
           --target-locations '[{
               "Accounts": ["r-example"],
               "IncludeChildOrganizationUnits": true,
               "Regions": ["us-east-1", "us-east-2", "us-west-2"]
           }]'
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -TargetParameterName "InstanceId" `
           -Targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]'
           -TargetLocation @{
               "Accounts"="r-example";
               "Regions"="us-east-1", "us-east-2", "us-west-2";
               "IncludeChildOrganizationUnits"=true}
   ```

------

   **例 2**: この例では、異なるアカウントおよびリージョンの特定の EC2 インスタンスを再起動します。
**注記**  
`TargetLocationMaxConcurrency` オプションは、AWS CLI および AWS SDK を使用して利用できます。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" \
           --target-parameter-name InstanceId \
           --target-locations '[{
               "Accounts": ["123456789012"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-1"]
           }, {
               "Accounts": ["987654321098"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-2"]
           }]'
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name "AWS-RestartEC2Instance" ^
           --target-parameter-name InstanceId ^
           --target-locations '[{
               "Accounts": ["123456789012"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-1"]
           }, {
               "Accounts": ["987654321098"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-2"]
           }]'
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -TargetParameterName "InstanceId" `
           -Targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]'
           -TargetLocation @({
               "Accounts"="123456789012",
               "Targets"= @{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               },
               "TargetLocationMaxConcurrency"="100%",
               "Regions"=["us-east-1"]
           }, {
               "Accounts"="987654321098",
               "Targets": @{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               },
               "TargetLocationMaxConcurrency": "100%",
               "Regions"=["us-east-2"]
           })
   ```

------

   **例 3**: この例では、`--target-locations-url` オプションを使用して、オートメーションを実行する複数の AWS アカウント およびリージョンを指定する方法を示します。このオプションの値は、パブリックアクセス可能な[署名付き Amazon S3 URL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) の JSON ファイルである必要があります。
**注記**  
`--target-locations-url` は、AWS CLI および AWS SDK を使用する際に利用可能です。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "MyCustomAutomationRunbook" \
       --target-locations-url "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "MyCustomAutomationRunbook" ^
       --target-locations-url "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName "MyCustomAutomationRunbook" `
       -TargetLocationsUrl "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------

   JSON ファイルのサンプルコンテンツ :

   ```
   [
   { 
            "Accounts": [ "123456789012", "987654321098", "456789123012" ],
            "ExcludeAccounts": [ "111222333444", "999888444666" ],
            "ExecutionRoleName": "MyAutomationExecutionRole",
            "IncludeChildOrganizationUnits": true,
            "Regions": [ "us-east-1", "us-west-2", "ap-south-1", "ap-northeast-1" ],
            "Targets": ["Key": "AWS::EC2::Instance", "Values": ["i-2"]],
            "TargetLocationMaxConcurrency": "50%",
            "TargetLocationMaxErrors": "10",
            "TargetsMaxConcurrency": "20",
            "TargetsMaxErrors": "12"
    }
   ]
   ```

   **例 4**: この例では、`us-east-2` および `us-west-1` リージョンにある `123456789012` アカウントと `987654321098` アカウントの EC2 インスタンスを再起動します。インスタンスは `Env-PROD` のキーペア値でタグ付けされている必要があります。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=tag:Env,Values=PROD \
           --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=tag:Env,Values=PROD ^
           --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "tag:Env"
       $Targets.Values = "PROD"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="123456789012","987654321098";
           "Regions"="us-east-2","us-west-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   **例 5**: この例では、`eu-central-1` リージョンにある `123456789012` アカウントと `987654321098` アカウントの EC2 インスタンスを再起動します。これらのインスタンスは、`prod-instances` AWS リソースグループのメンバーである必要があります。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=ResourceGroup,Values=prod-instances \
           --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=ResourceGroup,Values=prod-instances ^
           --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "ResourceGroup"
       $Targets.Values = "prod-instances"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="123456789012","987654321098";
           "Regions"="eu-central-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   **例 6**: この例では、`ou-1a2b3c-4d5e6c` AWS 組織単位 (OU) の EC2 インスタンスを再起動します。インスタンスは `us-west-1` および `us-west-2` リージョンにあります。これらのインスタンスは、`WebServices` AWS リソースグループのメンバーである必要があります。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=ResourceGroup,Values=WebServices \
           --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=ResourceGroup,Values=WebServices ^
           --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "ResourceGroup"
       $Targets.Values = "WebServices"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="ou-1a2b3c-4d5e6c";
           "Regions"="us-west-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   システムは以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
           "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
       }
   ```

------
#### [ Windows ]

   ```
   {
           "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
       }
   ```

------
#### [ PowerShell ]

   ```
   4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
           --filters Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
           --filters Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
           Where {$_.AutomationExecutionId -eq "automation execution ID"}
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   aws ssm get-automation-execution \
           --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm get-automation-execution ^
           --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecution `
           -AutomationExecutionId a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   ```

------
**注記**  
コンソールで、オートメーションのステータスをモニタリングすることもできます。[**Automation executions (オートメーション実行)**] リストで、先ほど開始した実行を選択し、[**Execution steps (実行ステップ)**] タブを選択します。このタブには、オートメーションアクションのステータスが表示されます。

**詳細情報**  
[AWS Systems Manager Automation を使用した集中型マルチアカウントおよびマルチリージョンパッチ](https://aws.amazon.com/blogs/mt/centralized-multi-account-and-multi-region-patching-with-aws-systems-manager-automation/)

# EventBridge イベントに基づくオートメーションを実行する
<a name="running-automations-event-bridge"></a>

ランブックを Amazon EventBridge イベントのターゲットとして指定することで、オートメーションを開始できます。オートメーションは、スケジュールに従って、または特定の AWS システムイベントが発生したときに開始できます。たとえば、インスタンスの起動時にインスタンスにソフトウェアをインストールする *BootStrapInstances* というランブックを作成するとします。*BootStrapInstances* ランブック (および対応するオートメーション) を EventBridge イベントのターゲットとして指定するには、まず新しい EventBridge ルールを作成します。(ルール例は次のとおりです: **Service name**: EC2、**Event Type**: EC2 Instance State-change Notification、**Specific state(s)**: running、**Any instance**。) 次に、以下の手順により、EventBridge コンソールおよび AWS Command Line Interface (AWS CLI) を使用し、*BootStrapInstances* ランブックをイベントのターゲットに指定します。新しいインスタンスが起動すると、システムによってオートメーションが実行されソフトウェアがインストールされます。

ランブックの作成の詳細については、「[独自のランブックの作成](automation-documents.md)」を参照してください。

## ランブックを使用する EventBridge イベントを作成する (コンソール)
<a name="automation-cwe-target-console"></a>

ランブックを EventBridge イベントのターゲットとして設定するには、以下の手順を使用します。

**EventBridge イベントルールのターゲットとしてランブックを設定するには**

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

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

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

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

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

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

1. ルールをトリガーする方法を選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/running-automations-event-bridge.html)

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

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

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

1. [**Document (ドキュメント)**] で、ターゲットが呼び出されたときに使用するランブックを選択します。

1. [**Configure automation parameter(s)**] (自動化パラメータの設定) を展開して、デフォルトのパラメータ値 (使用可能な場合) のままにするか、独自の値を入力します。
**注記**  
ターゲットを作成するには、各必須パラメータの値を指定する必要があります。指定しない場合、ルールは作成されますが、実行はされません。

1. 多くのターゲットタイプでは、EventBridge はターゲットにイベントを送信するためのアクセス許可が必要です。これらの場合、EventBridge は、イベントの実行に必要な IAM ロールを作成できます。次のいずれかを行います。
   + 自動的に IAM ロールを作成するには、**この特定のリソースに対して新しいロールを作成する** を選択します。
   + 以前に作成した IAM ロールを使用するには、**[Use existing role]** (既存のロールの使用) を選択し、ドロップダウンから既存のロールを選択します。EventBridge を含むように IAM ロールの信頼ポリシーを更新する必要がある場合があります。以下に例を示します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "events.amazonaws.com",
                       "ssm.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

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

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

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

1. ルールの詳細を確認し、**ルールの作成** を選択します。

## ランブックを使用する EventBridge イベントの作成 (コマンドライン)
<a name="automation-cwe-target-commandline"></a>

次の手順では、AWS CLI (Linux または Windows の場合) または AWS Tools for PowerShell を使用して、EventBridge イベントルールを作成し、ランブックをターゲットとして設定する方法を説明します。

**ランブックを EventBridge イベントルールのターゲットとして設定するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. 新しい EventBridge イベントルールを指定するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   *スケジュールに基づいてトリガー*

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "rule name" \
   --schedule-expression "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "rule name" ^
   --schedule-expression "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "rule name" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   次の例では、毎日午前 9:00 (UTC) に開始される EventBridge イベントルールを作成します。

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "DailyAutomationRule" \
   --schedule-expression "cron(0 9 * * ? *)"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "DailyAutomationRule" ^
   --schedule-expression "cron(0 9 * * ? *)"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "DailyAutomationRule" `
   -ScheduleExpression "cron(0 9 * * ? *)"
   ```

------

   *イベントに基づいてトリガー*

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "rule name" \
   --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service event detail type\"]}"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "rule name" ^
   --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service event detail type\"]}"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "rule name" `
   -EventPattern '{"source":["aws.service"],"detail-type":["service event detail type"]}'
   ```

------

   次の例では、リージョン内の任意の EC2 インスタンスの状態が変更されたときに開始される EventBridge イベントルールを作成します。

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "EC2InstanceStateChanges" \
   --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "EC2InstanceStateChanges" ^
   --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "EC2InstanceStateChanges" `
   -EventPattern '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"]}'
   ```

------

   このコマンドでは、次のような新しい EventBridge ルールの詳細が返されます。

------
#### [ Linux & macOS ]

   ```
   {
   "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
   }
   ```

------
#### [ Windows ]

   ```
   {
   "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
   }
   ```

------
#### [ PowerShell ]

   ```
   arn:aws:events:us-east-1:123456789012:rule/EC2InstanceStateChanges
   ```

------

1. ステップ 2 で作成した EventBridge イベントルールのターゲットとして、ランブックを指定するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws events put-targets \
   --rule rule name \
   --targets '{"Arn": " arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"Message\":[\"{\\\"Key\\\":\\\"key name\\\",\\\"Values\\\":[\\\"value\\\"]}\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
   ```

------
#### [ Windows ]

   ```
   aws events put-targets ^
   --rule rule name ^
   --targets '{"Arn": "arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"Message\":[\"{\\\"Key\\\":\\\"key name\\\",\\\"Values\\\":[\\\"value\\\"]}\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
   ```

------
#### [ PowerShell ]

   ```
   $Target = New-Object Amazon.CloudWatchEvents.Model.Target
   $Target.Id = "target ID"
   $Target.Arn = "arn:aws:ssm:region:account ID:automation-definition/runbook name"
   $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/EventBridge service role"
   $Target.Input = '{"input parameter":["value"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}'
   
   Write-CWETarget `
   -Rule "rule name" `
   -Target $Target
   ```

------

   次の例では、ランブック `AWS-StartEC2Instance` を使用して指定されたインスタンス ID を起動する EventBridge イベントターゲットを作成します。

------
#### [ Linux & macOS ]

   ```
   aws events put-targets \
   --rule DailyAutomationRule \
   --targets '{"Arn": "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
   ```

------
#### [ Windows ]

   ```
   aws events put-targets ^
   --rule DailyAutomationRule ^
   --targets '{"Arn": "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
   ```

------
#### [ PowerShell ]

   ```
   $Target = New-Object Amazon.CloudWatchEvents.Model.Target
   $Target.Id = "Target1"
   $Target.Arn = "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance"
   $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"
   $Target.Input = '{"InstanceId":["i-02573cafcfEXAMPLE"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}'
   
   Write-CWETarget `
   -Rule "DailyAutomationRule" `
   -Target $Target
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
   "FailedEntries": [],
   "FailedEntryCount": 0
   }
   ```

------
#### [ Windows ]

   ```
   {
   "FailedEntries": [],
   "FailedEntryCount": 0
   }
   ```

------
#### [ PowerShell ]

   PowerShell のコマンドが成功した場合、出力はありません。

------

# オートメーションを段階的に実行する
<a name="automation-working-executing-manually"></a>

次の手順では、AWS Systems Manager コンソール、AWS Command Line Interface (AWS CLI) を使用して、手動実行モードでオートメーションを実行する方法を説明します。手動実行モードを使用すると、オートメーションは *Waiting* の状態で開始し、各ステップの間で *Waiting* の状態で一時停止します。これにより、オートメーションをいつ進めるかを制御できます。続行する前にステップの結果を確認する必要がある場合に役立ちます。

このオートメーションは、現在のユーザーのコンテキストで実行します。これは、ランブックおよびこのランブックが呼び出すアクションを使用するアクセス許可がある限り、追加の IAM アクセス許可を設定する必要がないことを意味しています。IAM での管理者権限がある場合、このオートメーションを実行するアクセス許可を既に保持しています。

## オートメーションをステップごとに実行する (コンソール)
<a name="automation-working-executing-manually-console"></a>

次の手順は、Systems Manager コンソールを使用してオートメーションをステップごとに手動で実行する方法を説明します。

**オートメーションをステップごとに実行するには**

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

1. [**Execution Mode (実行モード)**] セクションで、[**Manual execution (手動実行)**] を選択します。

1. [**Input parameters (入力パラメータ)**] セクションで、必要な入力を指定します。必要に応じて、[**AutomationAssumeRole**] リストから IAM サービスロールを選択できます。

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

1. オートメーションの最初のステップを開始する準備ができたとき、[**Execute this step (このステップを実行)**] を選択します。オートメーションは1 ステップだけ進み、この手順のステップ 3 で選択したランブックで指定した後続のステップを実行する前に一時停止します。ランブックに複数のステップがある場合は、オートメーションを続行するために各ステップに対して [**Execute this step (このステップを実行)**] を選択する必要があります。[**Execute this step (このステップを実行)**] を選択するたびに、アクションが実行されます。
**注記**  
オートメーションのステータスがコンソールに表示されます。オートメーションでステップの実行に失敗した場合は、「[Systems Manager Automation のトラブルシューティング](automation-troubleshooting.md)」を参照してください。

1. ランブックで指定されているすべてのステップを完了したら、[**Complete and view results (完了して結果を表示)**] を選択してオートメーションを終了し、結果を表示します。

オートメーション実行が完了したら、同じパラメータまたは変更されたパラメータを使用して実行を再実行できます。詳細については、「[オートメーション実行の再実行](automation-rerun-executions.md)」を参照してください。

## オートメーションをステップごとに実行する (コマンドライン)
<a name="automation-working-executing-manually-commandline"></a>

次の手順は、AWS CLI (Linux の場合、Windows の場合は macOS) または AWS Tools for PowerShell 使用して、オートメーションをステップごとに手動で実行する方法を説明しています。

**オートメーションをステップごとに実行するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. 以下のコマンドを実行して、オートメーションを手動で開始します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --mode Interactive \
       --parameters runbook parameters
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --mode Interactive ^
       --parameters runbook parameters
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName runbook name `
       -Mode Interactive `
       -Parameter runbook parameters
   ```

------

   ランブック `AWS-RestartEC2Instance` を使用して指定した EC2 インスタンスを再起動する例を次に示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-RestartEC2Instance" \
       --mode Interactive \
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-RestartEC2Instance" ^
       --mode Interactive ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName AWS-RestartEC2Instance `
       -Mode Interactive 
       -Parameter @{"InstanceId"="i-02573cafcfEXAMPLE"}
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "ba9cd881-1b36-4d31-a698-0123456789ab"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "ba9cd881-1b36-4d31-a698-0123456789ab"
   }
   ```

------
#### [ PowerShell ]

   ```
   ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------

1. オートメーションの最初のステップを開始する準備が整ったら、次のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。オートメーションは1 ステップだけ進み、この手順のステップ 1 で選択したランブックで指定した後続のステップを実行する前に一時停止します。ランブックに複数のステップがある場合は、オートメーションを続行するために各ステップに対して次のコマンドを実行する必要があります。

------
#### [ Linux & macOS ]

   ```
   aws ssm send-automation-signal \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab \
       --signal-type StartStep \
       --payload StepName="stopInstances"
   ```

------
#### [ Windows ]

   ```
   aws ssm send-automation-signal ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab ^
       --signal-type StartStep ^
       --payload StepName="stopInstances"
   ```

------
#### [ PowerShell ]

   ```
   Send-SSMAutomationSignal `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab `
       -SignalType StartStep 
       -Payload @{"StepName"="stopInstances"}
   ```

------

   コマンドが成功した場合、出力はありません。

1. 次のコマンドを実行して、オートメーションにおける各ステップ実行のステータスを取得します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-step-executions \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-step-executions ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationStepExecution `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
       "StepExecutions": [
           {
               "StepName": "stopInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167178.42,
               "ExecutionEndTime": 1557167220.617,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"stopped\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "stopped"
                   ]
               },
               "StepExecutionId": "654243ba-71e3-4771-b04f-0123456789ab",
               "OverriddenParameters": {},
               "ValidNextSteps": [
                   "startInstances"
               ]
           },
           {
               "StepName": "startInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167273.754,
               "ExecutionEndTime": 1557167480.73,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"running\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "running"
                   ]
               },
               "StepExecutionId": "8a4a1e0d-dc3e-4039-a599-0123456789ab",
               "OverriddenParameters": {}
           }
       ]
   }
   ```

------
#### [ Windows ]

   ```
   {
       "StepExecutions": [
           {
               "StepName": "stopInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167178.42,
               "ExecutionEndTime": 1557167220.617,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"stopped\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "stopped"
                   ]
               },
               "StepExecutionId": "654243ba-71e3-4771-b04f-0123456789ab",
               "OverriddenParameters": {},
               "ValidNextSteps": [
                   "startInstances"
               ]
           },
           {
               "StepName": "startInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167273.754,
               "ExecutionEndTime": 1557167480.73,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"running\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "running"
                   ]
               },
               "StepExecutionId": "8a4a1e0d-dc3e-4039-a599-0123456789ab",
               "OverriddenParameters": {}
           }
       ]
   }
   ```

------
#### [ PowerShell ]

   ```
   Action: aws:changeInstanceState
   ExecutionEndTime     : 5/6/2019 19:45:46
   ExecutionStartTime   : 5/6/2019 19:45:03
   FailureDetails       : 
   FailureMessage       : 
   Inputs               : {[DesiredState, "stopped"], [InstanceIds, ["i-02573cafcfEXAMPLE"]]}
   IsCritical           : False
   IsEnd                : False
   MaxAttempts          : 0
   NextStep             : 
   OnFailure            : 
   Outputs              : {[InstanceStates, Amazon.Runtime.Internal.Util.AlwaysSendList`1[System.String]]}
   OverriddenParameters : {}
   Response             : 
   ResponseCode         : 
   StepExecutionId      : 8fcc9641-24b7-40b3-a9be-0123456789ab
   StepName             : stopInstances
   StepStatus           : Success
   TimeoutSeconds       : 0
   ValidNextSteps       : {startInstances}
   ```

------

1. 選択したランブック内のすべての指定されているステップが終了したら、次のコマンドを実行してオートメーションを完了します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm stop-automation-execution \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab \
       --type Complete
   ```

------
#### [ Windows ]

   ```
   aws ssm stop-automation-execution ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab ^
       --type Complete
   ```

------
#### [ PowerShell ]

   ```
   Stop-SSMAutomationExecution `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab `
       -Type Complete
   ```

------

   コマンドが成功した場合、出力はありません。

# State Manager 関連付けでのオートメーションのスケジュール設定
<a name="scheduling-automations-state-manager-associations"></a>

ランブックと State Manager との関連付けを作成することにより、オートメーションを開始できます。State Manager は AWS Systems Manager のツールです。ランブックと State Manager との関連付けを作成することにより、異なるタイプの AWS リソースをターゲットにすることができます。たとえば、以下のような、AWS リソースに目的の状態を強制する関連付けを作成できます。
+ Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに Systems Manager ロールをアタッチして、*マネージドインスタンス*にします。
+ セキュリティグループに Ingress ルールと Egress ルールを適用します。
+ Amazon DynamoDB バックアップを作成または削除します。
+ Amazon Elastic Block Store (Amazon EBS) スナップショットを作成または削除します。
+ Amazon Simple Storage Service (Amazon S3) バケットの読み取りおよび書き込みのアクセス許可をオフにします。
+ マネージドインスタンスと Amazon Relational Database Service (Amazon RDS) インスタンスを開始、再起動、または停止します。
+ Linux、macOS、Window AMIs にパッチを適用します。

次の手順により、AWS Systems Manager コンソールおよび AWS Command Line Interface (AWS CLI) を使用してオートメーションを実行する State Manager 関連付けを作成します。関連付けに関する一般的な情報と、SSM `Command` ドキュメントまたは SSM `Policy` ドキュメントを使用する関連付けの作成については、「[関連付けの作成](state-manager-associations-creating.md)」を参照してください。

**[開始する前に]**  
State Manager を使用してオートメーションを実行する前に、以下の重要な詳細に注意してください。
+ ランブックを使用する関連付けを作成する前に、AWS Systems Manager のツールである Automation に必要なアクセス許可を設定したことを確認してください。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。
+ ランブックを使用する State Manager 関連付けは、AWS アカウント で同時に実行されるオートメーションの最大数に反映されます。同時に最大 100 のオートメーションを実行できます。詳細については、「Amazon Web Services 全般のリファレンス」の「[System Manager Service Quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。
+ オートメーションを実行する場合、State Manager は AWS CloudTrail のオートメーションによって開始された API オペレーションをログ記録しません。
+ Systems Manager は、サービスにリンクされたロールを自動的に作成します。これにより、State Manager が Systems Manager Automation API オペレーションを呼び出すアクセス許可を持つようにします。必要に応じて AWS CLI または AWS Tools for PowerShell から次のコマンドを実行し、ユーザー自身がサービスにリンクされたロールを作成できます。

------
#### [ Linux & macOS ]

  ```
  aws iam create-service-linked-role \
  --aws-service-name ssm.amazonaws.com
  ```

------
#### [ Windows ]

  ```
  aws iam create-service-linked-role ^
  --aws-service-name ssm.amazonaws.com
  ```

------
#### [ PowerShell ]

  ```
  New-IAMServiceLinkedRole `
  -AWSServiceName ssm.amazonaws.com
  ```

------

  サービスにリンクされたロールの詳細については、「[Systems Manager のサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。

## オートメーションを実行する関連付けを作成する (コンソール)
<a name="create-automation-association-console"></a>

次の手順では、Systems Manager コンソールを使用して、オートメーションを実行する State Manager の関連付けを作成する方法について説明します。

**オートメーションを実行する State Manager 関連付けを作成するには**

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

1. ナビゲーションペインで、[**State Manager**] を選択し、[**Create association (関連付けの作成)**] を選択します。

1. [**Name (名前)**] フィールドで名前を指定します。これはオプションですが推奨されます。

1. [**Document (ドキュメント)**] リストで、ランブックを選択します。検索バーを使用して [**Document type : Equal : Automation**] ランブックでフィルタリングします。検索バーの右側にある数字を使用して、さらに多くのランブックを表示できます。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. ターゲットのリソース ID を指定して 1 つ以上のターゲットで自動化を実行するには、[**Simple execution (シンプルな実行)**] を選択します。タグや AWS などのターゲット設定のオプションを指定して AWS Resource Groups リソースのフリート全体で自動化を実行するには、[**Rate control (レート制御)**]を選択します。同時実行とエラーのしきい値を指定することによって、リソース全体でオートメーションの操作を制御することもできます。

   [**Rate control (レート制御)**] を選択した場合は [**Targets (ターゲット)**] セクションが表示されます。

1. [**Targets (ターゲット)**] セクションで、リソースをターゲットとするメソッドを選択します。

   1. (必須) [**Parameter (パラメータ)**] リストでパラメータを選択します。[**Parameter (パラメータ)**] リストの項目は、この手順の開始時に選択したランブックのパラメータによって決まります。パラメータを選択することで、オートメーションが実行されるリソースのタイプを定義します。

   1. (必須) [**Targets (ターゲット)**] リストで、リソースをターゲットとするメソッドを選択します。
      + [**Resource Group (リソースグループ)**]: [**Resource Group (リソースグループ)**] リストからのグループの名前を選択します。ランブックでの AWS Resource Groups のターゲット設定の詳細については、「[AWS Resource Groups をターゲットにする](running-automations-map-targets.md#target-resource-groups)」を参照してください。
      + [**Tags (タグ)**]: 表示されたフィールドにタグキーと (オプションで) タグ値を入力します。[**Add**] (追加) をクリックします。ランブックでのタグのターゲット設定の詳細については、「[タグをターゲットにする](running-automations-map-targets.md#target-tags)」を参照してください。
      + [**Parameter Values (パラメータ値)**]: [**Input parameters (入力パラメータ)**] セクションに値を入力します。複数の値を指定すると、Systems Manager は指定された各値に対して子オートメーションを実行します。

        たとえば、ランブックに ** instanceID ** パラメーターが含まれているとします。オートメーションを実行するときに [**InstanceID**] パラメータの値を指定すると、Systems Manager は指定された各インスタンス ID 値に対して子オートメーションを実行します。オートメーションが指定された各インスタンスの実行を終了するか、オートメーションが失敗した場合、親オートメーションは完了します。最大 50 個のパラメータ値を対象にすることができます。ランブックでのパラメータ値のターゲット設定の詳細については、「[パラメータ値のターゲット設定](running-automations-map-targets.md#target-parameter-values)」を参照してください。

1. [**Input Parameters (入力パラメータ)**] セクションで、必須の入力パラメータを指定します。

   タグまたはリソースグループを使用してターゲットリソースを選択した場合は、[**Input parameters (入力パラメータ)**] セクションでオプションを選択する必要はありません。例えば、`AWS-RestartEC2Instance` ランブックを選択し、タグを使用してインスタンスのターゲットを選択した場合、[**Input parameters (入力パラメータ)**] セクションでインスタンス ID を指定または選択する必要はありません。オートメーションでは、指定したタグを使用してインスタンスを再起動します。
**重要**  
[**AutomationAssumeRole**] フィールドでロール ARN を指定する必要があります。State Manager は、継承されたロールを使用しランブックで指定されている AWS のサービスを呼び出し、お客様に代わってオートメーション関連付けを実行します。

1. 定期的に関連付けを実行する場合は、[**Specify schedule (スケジュールを指定)**] セクションで [**On Schedule (スケジュール通り)**] を選択します。このオプションを選択した場合は、提供されているオプションを使用して、Cron 式または Rate 式を使用してスケジュールを作成します。State Manager 用のCron 式と Rate 式の詳細については、[関連付のための cron および rate 式](reference-cron-and-rate-expressions.md#reference-cron-and-rate-expressions-association) を参照してください。
**注記**  
Rate 式は、ランブックを使用する State Manager 関連付けに適したスケジューリングメカニズムです。Rate 式を使用すると、オートメーションの同時実行の最大数に達した場合に、関連付けを実行する際の柔軟性が高まります。Rate スケジュールを使用すると、Systems Manager は、同時オートメーションが最大に達してスロットルされたという通知を受け取った後で、オートメーションを再試行できます。

   関連付けを 1 回だけ実行する場合は、[**No schedule (スケジュールなし)**] を選択します。

1. (オプション) [**Rate Control**] (レート制御) セクションで、[**Concurrency**] (同時実行数) および [**Error threshold**] (エラーのしきい値) オプションを選択して、AWS リソース全体のオートメーションのデプロイを制御できます。

   1. [**Concurrency (同時実行数)**] セクションでオプションを選択します。
      + [**targets (ターゲット)**] を選択して、オートメーションを同時に実行できるターゲットの絶対数を入力します。
      + [**percentage (パーセント値)**] を選択して、オートメーションを同時に実行できるターゲットセットのパーセント値を入力します。

   1. [**Error threshold (エラーのしきい値)**] セクションでオプションを選択します。
      + [**errors (エラー)**] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーの絶対数を入力します。
      + [**percentage (パーセント値)**] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーのパーセント値を入力します。

   オートメーションでターゲットとレート制御を使用する方法の詳細については、「[自動オペレーションを大規模に実行する](running-automations-scale.md)」を参照してください。

1. [**関連付けの作成**] を選択します。
**重要**  
関連付けを作成すると、関連付けはただちに指定されたターゲットに対して実行されます。その後、選択された Cron 式または Rate 式に基づいて関連付けが実行されます。[**No schedule (スケジュールなし)**] を選択した場合、関連付けは再び実行されません。

## オートメーションワークフローを実行する関連付けを作成する (コマンドライン)
<a name="create-automation-association-cli"></a>

以下の手順では、AWS CLI (Linux または Windows Server) または AWS Tools for PowerShell を使用して、オートメーションを実行する State Manager 関連付けを作成する方法について説明します。

**[開始する前に]**  
次の手順を完了する前に、ランブックの実行に必要な許可を含む IAM サービスロールを作成し、AWS Systems Manager のツールである Automation の信頼関係を設定していることを確認してください。詳細については、「[タスク 1: 自動化のサービスロールを作成する](automation-setup-iam.md#create-service-role)」を参照してください。

**オートメーションを実行する関連付けを作成するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. ドキュメントのリストを表示するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

   関連付けに使用するランブックの名前を記録します。

1. 以下のコマンドを実行して、ランブックの詳細を表示します。次のコマンドで、*[Runbook name]* (ランブック名) をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
   --name runbook name
   ```

   `InstanceId` オプションに使用するパラメータ名 (例: `--automation-target-parameter-name`) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
   --name runbook name
   ```

   `InstanceId` オプションに使用するパラメータ名 (例: `--automation-target-parameter-name`) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
   -Name runbook name
   ```

   `InstanceId` オプションに使用するパラメータ名 (例: `AutomationTargetParameterName`) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

------

1. State Manager 関連付けを使用してオートメーションを実行するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   *タグを使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=tag:key name,Values=value \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

**注記**  
AWS CLI を使用して関連付けを作成する場合は、`--targets` パラメータを使用して、インスタンスを関連付けのターゲットにします。`--instance-id` パラメータは使用しないでください。`--instance-id` パラメータはレガシーパラメータです。

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=tag:key name,Values=value ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

**注記**  
AWS CLI を使用して関連付けを作成する場合は、`--targets` パラメータを使用して、インスタンスを関連付けのターゲットにします。`--instance-id` パラメータは使用しないでください。`--instance-id` パラメータはレガシーパラメータです。

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "tag:key name"
   $Targets.Values = "value"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole" } `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

**注記**  
AWS Tools for PowerShell を使用して関連付けを作成する場合は、`Target` パラメータを使用して、インスタンスを関連付けのターゲットにします。`InstanceId` パラメータは使用しないでください。`InstanceId` パラメータはレガシーパラメータです。

------

   *パラメータ値を使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ParameterValues,Values=value,value 2,value 3 \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ParameterValues,Values=value,value 2,value 3 ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ParameterValues"
   $Targets.Values = "value","value 2","value 3"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   *AWS Resource Groups を使用したターゲット設定*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ResourceGroup,Values=resource group name \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ResourceGroup,Values=resource group name ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "resource group name"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   *複数のアカウントとリージョンをターゲットにする *

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ResourceGroup,Values=resource group name \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression" \ 
   --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ResourceGroup,Values=resource group name ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression" ^ 
   --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "resource group name"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression" `
   -TargetLocations @{
       "Accounts"=["111122223333,444455556666,444455556666"],
       "Regions"=["region,region"]
   ```

------

   このコマンドでは、次のような新しい関連付けの詳細が返されます。

------
#### [ Linux & macOS ]

   ```
   {
   "AssociationDescription": {
       "ScheduleExpression": "cron(0 7 ? * MON *)",
       "Name": "AWS-StartEC2Instance",
       "Parameters": {
           "AutomationAssumeRole": [
               "arn:aws:iam::123456789012:role/RunbookAssumeRole"
           ]
       },
       "Overview": {
           "Status": "Pending",
           "DetailedStatus": "Creating"
       },
       "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
       "DocumentVersion": "$DEFAULT",
       "AutomationTargetParameterName": "InstanceId",
       "LastUpdateAssociationDate": 1564686638.498,
       "Date": 1564686638.498,
       "AssociationVersion": "1",
       "AssociationName": "CLI",
       "Targets": [
           {
               "Values": [
                   "DEV"
               ],
               "Key": "tag:ENV"
           }
       ]
   }
   }
   ```

------
#### [ Windows ]

   ```
   {
   "AssociationDescription": {
       "ScheduleExpression": "cron(0 7 ? * MON *)",
       "Name": "AWS-StartEC2Instance",
       "Parameters": {
           "AutomationAssumeRole": [
               "arn:aws:iam::123456789012:role/RunbookAssumeRole"
           ]
       },
       "Overview": {
           "Status": "Pending",
           "DetailedStatus": "Creating"
       },
       "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
       "DocumentVersion": "$DEFAULT",
       "AutomationTargetParameterName": "InstanceId",
       "LastUpdateAssociationDate": 1564686638.498,
       "Date": 1564686638.498,
       "AssociationVersion": "1",
       "AssociationName": "CLI",
       "Targets": [
           {
               "Values": [
                   "DEV"
               ],
               "Key": "tag:ENV"
           }
       ]
   }
   }
   ```

------
#### [ PowerShell ]

   ```
   Name                  : AWS-StartEC2Instance
   InstanceId            : 
   Date                  : 8/1/2019 7:31:38 PM
   Status.Name           : 
   Status.Date           : 
   Status.Message        : 
   Status.AdditionalInfo :
   ```

------

**注記**  
タグを使用して 1 つ以上のターゲットインスタンスで関連付けを作成した後インスタンスからタグを削除すると、そのインスタンスは関連付けを実行しなくなります。インスタンスは State Manager ドキュメントから関連付けを解除されます。

## State Manager 関連付けによって実行されるトラブルシューティングのオートメーション
<a name="troubleshooting-automation-associations"></a>

Systems Manager Automation は、リージョンごと、アカウントごとに 100 の同時オートメーションの制限、1,000 のキューに入れられたオートメーションの制限を適用します。ランブックを使用する State Manager 関連付けのステータスが **[Failed]** (失敗) となっており、ステータス詳細が [**AutomationExecutionLimitExceeded**] の場合、オートメーションの数が上限に達している可能性があります。その結果、Systems Manager はオートメーションを制限します。この問題を解決するには、以下の手順を実行します。
+ 別の Rate 式または Cron 式を使用して関連付けます。たとえば、関連付けが 30 分ごとに実行されるようにスケジュールされている場合は、1〜2 時間ごとに実行されるように式を変更します。
+ ステータスが [**Pending (保留中)**] の既存のオートメーションを削除します。これらのオートメーションを削除すると、現在のキューがクリアされます。

# メンテナンスウィンドウによるオートメーションのスケジュール設定
<a name="scheduling-automations-maintenance-windows"></a>

ランブックをメンテナンスウィンドウの登録済みタスクとして設定することで、オートメーションを開始できます。ランブックを登録済みタスクとして登録することにより、メンテナンスウィンドウはスケジュールされたメンテナンス期間中にオートメーションを実行します。

例えば、メンテナンスウィンドウのターゲットとして登録されたインスタンスの Amazon Machine Image (AMI) を作成する `CreateAMI` という名前のランブックを作成するとします。`CreateAMI` ランブック (および対応するオートメーション) をメンテナンスウィンドウの登録済みタスクとして指定するには、まずメンテナンスウィンドウを作成してターゲットを登録します。次に、以下の手順を使用して、メンテナンスウィンドウ内で登録済みタスクとして `CreateAMI` ドキュメントを指定します。スケジュールされた期間中にメンテナンスウィンドウが開始されると、システムはオートメーションを実行し、登録されたターゲットの AMI を作成します。

オートメーションランブックの作成については、「[独自のランブックの作成](automation-documents.md)」を参照してください。Automation は AWS Systems Manager のツールです。

以下の手順を使用し、AWS Systems Manager コンソール、AWS Command Line Interface (AWS CLI)、または AWS Tools for Windows PowerShell を使用して、オートメーションをメンテナンスウィンドウの登録済みタスクとして設定します。

## オートメーションタスクをメンテナンスウィンドウに登録する (コンソール)
<a name="register-automation-task-maintenance-window-console"></a>

次の手順では、Systems Manager コンソールを使用して、オートメーションをメンテナンスウィンドウの登録済みタスクとして設定する方法を説明します。

**開始する前に**  
次の手順を完了する前に、メンテナンスウィンドウを作成し、少なくとも 1 つのターゲットを登録する必要があります。詳細については、次の手順を参照してください。
+ [コンソールを使用してメンテナンスウィンドウを作成する](sysman-maintenance-create-mw.md).
+ [コンソールを使用してメンテナンスウィンドウにターゲットを割り当てる](sysman-maintenance-assign-targets.md)

**メンテナンスウィンドウの登録されたタスクとしてオートメーションを設定するには**

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

1. 左側のナビゲーションペインで、[**Maintenance Windows**] を選択してから、自動化タスクの登録に使用するメンテナンスウィンドウを選択します。

1. [**Actions**] を選択します。次に、[**Register Automation task (オートメーションタスクの登録)**] を選択して、ランブックを使用してターゲット上でオートメーションを選択して実行します。

1. [**Name (名前)**] に、タスクの名前を入力します。

1. [**説明**] に説明を入力します。

1. [**Document (ドキュメント)**] で、実行するタスクを定義するランブックを選択します。

1. [**Document version (ドキュメントのバージョン)**] で、使用するランブックのバージョンを選択します。

1. **[Task priority (タスクの優先度)**] で、このタスクの優先度を指定します。`1` が最高の優先度です。メンテナンスウィンドウのタスクは、優先度順にスケジュールされ、優先度が同じタスクは並行してスケジュールされます。

1. [**Targets (ターゲット)**] セクションで、リソース上でタスクを実行するランブックを選択した場合は、タグを指定するか、インスタンスを手動で選択して、このオートメーションを実行するターゲットを特定します。
**注記**  
ターゲットではなく入力パラメータを介してリソースを渡す場合は、メンテナンスウィンドウターゲットを指定する必要はありません。  
多くの場合、オートメーションタスクのターゲットを明示的に指定する必要はありません。例えば、`AWS-UpdateLinuxAmi` ランブックを使用して Linux 用の Amazon Machine Image (AMI) を更新するためのオートメーションタイプのタスクを作成するとします。このタスクが実行されると、AMI は最新の利用可能な Linux ディストリビューションパッケージと Amazon ソフトウェアを反映して更新されます。AMI から作成した新しいインスタンスには、これらの更新がインストール済みです。更新する AMI の ID はランブックの入力パラメータで指定されるため、メンテナンスウィンドウタスクでターゲットを再度指定する必要はありません。

   ターゲットを必要としないメンテナンスウィンドウタスクについては、[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md) を参照してください。

1. (オプション) [**レートの制御**] で、以下の操作を行います。
**注記**  
実行中のタスクでターゲットが指定されていない場合は、レートコントロールを指定する必要はありません。
   + [**Concurrency (同時実行数)**] には、オートメーションを同時に実行するターゲットの数または割合 (%) を指定します。

     タグのキーと値のペアを選択してターゲットを選択し、選択したタグを使用するターゲットの数がわからない場合は、割合を指定して同時に実行できるオートメーションの数を制限します。

     メンテナンスウィンドウが実行されると、ターゲットごとに新しいオートメーションが開始されます。1 つのにつき 100 の同時オートメーションの制限がありますAWS アカウント 100 個を超える同時実行率を指定した場合、100 個を超える同時オートメーションはオートメーションキューに自動的に追加されます。詳細については、「Amazon Web Services 全般のリファレンス」の「[System Manager Service Quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。
   + [**Error threshold (エラーしきい値)**] には、ターゲットの失敗後に他のターゲットでオートメーションの実行を停止するタイミングを、ターゲットの数または割合によって指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると Systems Manager はオートメーションの実行を停止します。まだオートメーションを処理しているターゲットもエラーを送信する可能性があります。

1. [**Input Parameters (入力パラメータ)**] セクションで、ランブックのパラメータを指定します。ランブックの場合、システムによって一部の値が自動的に設定されます。これらの値はそのままにすることも置き換えることもできます。
**重要**  
ランブックの場合、オプションでオートメーションの引き受けロールを指定できます。このパラメータにロールを指定しない場合、オートメーションは、ステップ 11 で選択したメンテナンスウィンドウサービスロールを継承します。そのため、選択したメンテナンスウィンドウサービスロールに、ランブック内で定義されているアクションを実行するための適切な AWS Identity and Access Management (IAM) アクセス許可があることを確認する必要があります。  
例えば、Systems Manager のサービスにリンクされたロールには、ランブック `ec2:CreateSnapshot` を実行するために必要な IAM アクセス許可 `AWS-CopySnapshot` がありません。このシナリオでは、カスタムのメンテナンスウィンドウサービスロールを使用するか、または `ec2:CreateSnapshot` アクセス許可を持つ自動化継承ロールを指定する必要があります。詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。

1. **[IAM service role]** (IAM サービスロール) 領域でロールを選択し、Systems Manager がオートメーションを開始するためのアクセス許可を付与します。

   メンテナンスウィンドウのタスク用にサービスロールを作成するには、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

1. [**Register Automation task (自動化タスクの登録)**] を選択します。

## オートメーションタスクをメンテナンスウィンドウに登録する (コマンドライン)
<a name="register-automation-task-maintenance-window-cli"></a>

次の手順では、AWS CLI (Linux または Windows Server) または AWS Tools for PowerShell を使用して、オートメーションをメンテナンスウィンドウの登録済みタスクとして設定する方法を説明します。

**[開始する前に]**  
次の手順を完了する前に、メンテナンスウィンドウを作成し、少なくとも 1 つのターゲットを登録する必要があります。詳細については、次の手順を参照してください。
+ [ステップ 1: AWS CLI を使用してメンテナンスウィンドウを作成する](mw-cli-tutorial-create-mw.md).
+ [ステップ 2: AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録する](mw-cli-tutorial-targets.md)

**メンテナンスウィンドウの登録されたタスクとしてオートメーションを設定するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. オートメーションをメンテナンスウィンドウの登録済みタスクとして設定するコマンドを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
   --window-id window ID \
   --name task name \
   --task-arn runbook name \
   --targets Key=targets,Values=value \
   --service-role-arn IAM role arn \
   --task-type AUTOMATION \
   --task-invocation-parameters task parameters \
   --priority task priority \
   --max-concurrency 10% \
   --max-errors 5
   ```

**注記**  
AWS CLI を使用してオートメーションを登録済みタスクとして設定する場合、`--Task-Invocation-Parameters` パラメータを使用して、実行時にタスクに渡すパラメータを指定します。`--Task-Parameters` パラメータは使用しないでください。`--Task-Parameters` パラメータはレガシーパラメータです。  
ターゲットが指定されていないメンテナンスウィンドウタスクの場合、`--max-errors` と `--max-concurrency` の値は指定できません。代わりに、システムはプレースホルダ値として `1` を挿入します。これは [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) や [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html) などのコマンドへのレスポンスで報告されることがあります。これらの値は、タスクの実行には影響しないため、無視できます。  
ターゲットを必要としないメンテナンスウィンドウタスクについては、[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md) を参照してください。

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
   --window-id window ID ^
   --name task name ^
   --task-arn runbook name ^
   --targets Key=targets,Values=value ^
   --service-role-arn IAM role arn ^
   --task-type AUTOMATION ^
   --task-invocation-parameters task parameters ^
   --priority task priority ^
   --max-concurrency 10% ^
   --max-errors 5
   ```

**注記**  
AWS CLI を使用してオートメーションを登録済みタスクとして設定する場合、`--task-invocation-parameters` パラメータを使用して、実行時にタスクに渡すパラメータを指定します。`--task-parameters` パラメータは使用しないでください。`--task-parameters` パラメータはレガシーパラメータです。  
ターゲットが指定されていないメンテナンスウィンドウタスクの場合、`--max-errors` と `--max-concurrency` の値は指定できません。代わりに、システムはプレースホルダ値として `1` を挿入します。これは [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) や [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html) などのコマンドへのレスポンスで報告されることがあります。これらの値は、タスクの実行には影響しないため、無視できます。  
ターゲットを必要としないメンテナンスウィンドウタスクについては、[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md) を参照してください。

------
#### [ PowerShell ]

   ```
   Register-SSMTaskWithMaintenanceWindow `
   -WindowId window ID `
   -Name "task name" `
   -TaskArn "runbook name" `
   -Target @{ Key="targets";Values="value" } `
   -ServiceRoleArn "IAM role arn" `
   -TaskType "AUTOMATION" `
   -Automation_Parameter @{ "task parameter"="task parameter value"} `
   -Priority task priority `
   -MaxConcurrency 10% `
   -MaxError 5
   ```

**注記**  
AWS Tools for PowerShell を使用してオートメーションを登録済みタスクとして設定する場合、`-Automation_Parameter` パラメータを使用して、タスクの実行時にタスクに渡すパラメータを指定します。`-TaskParameters` パラメータは使用しないでください。`-TaskParameters` パラメータはレガシーパラメータです。  
ターゲットが指定されていないメンテナンスウィンドウタスクの場合、`-MaxError` と `-MaxConcurrency` の値は指定できません。代わりに、システムはプレースホルダ値として 1 を挿入します。これは `Get-SSMMaintenanceWindowTaskList` や `Get-SSMMaintenanceWindowTask` などのコマンドへのレスポンスで報告されることがあります。これらの値は、タスクの実行には影響しないため、無視できます。  
ターゲットを必要としないメンテナンスウィンドウタスクについては、[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md) を参照してください。

------

   次の例では、優先度 1 のメンテナンスウィンドウの登録済みタスクとしてオートメーションを設定します。また、ターゲットレスメンテナンスウィンドウタスクの `--targets`、`--max-errors`、`--max-concurrency` オプションの省略についても説明します。オートメーションは `AWS-StartEC2Instance` ランブックおよび指定されたオートメーション継承ロールを使用して、メンテナンスウィンドウにターゲットとして登録済みの EC2 インスタンスを起動します。メンテナンスウィンドウは、所定の時点で最大 5 個のインスタンスでオートメーションを同時に実行します。また、エラー数が 1 を超えた場合、この登録済みタスクは特定の間隔で、それ以上のインスタンスで実行されなくなります。

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
   --window-id mw-0c50858d01EXAMPLE \
   --name StartEC2Instances \
   --task-arn AWS-StartEC2Instance \
   --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole \
   --task-type AUTOMATION \
   --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" \
   --priority 1
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
   --window-id mw-0c50858d01EXAMPLE ^
   --name StartEC2Instances ^
   --task-arn AWS-StartEC2Instance ^
   --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole ^
   --task-type AUTOMATION ^
   --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" ^
   --priority 1
   ```

------
#### [ PowerShell ]

   ```
   Register-SSMTaskWithMaintenanceWindow `
   -WindowId mw-0c50858d01EXAMPLE `
   -Name "StartEC2" `
   -TaskArn "AWS-StartEC2Instance" `
   -ServiceRoleArn "arn:aws:iam::123456789012:role/MaintenanceWindowRole" `
   -TaskType "AUTOMATION" `
   -Automation_Parameter @{ "InstanceId"="{{TARGET_ID}}";"AutomationAssumeRole"="arn:aws:iam::123456789012:role/AutomationAssumeRole" } `
   -Priority 1
   ```

------

   このコマンドでは、次のような新しい登録済みタスクの詳細が返されます。

------
#### [ Linux & macOS ]

   ```
   {
   "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

------
#### [ Windows ]

   ```
   {
   "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

------
#### [ PowerShell ]

   ```
   4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

1. 登録済みタスクを表示するには、次のコマンドを実行します。*[Maintenance windows ID]* (メンテナンスウィンドウ ID) をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-tasks \
   --window-id maintenance window ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-tasks ^
   --window-id maintenance window ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMMaintenanceWindowTaskList `
   -WindowId maintenance window ID
   ```

------

   システムが以下のような情報を返します。

------
#### [ Linux & macOS ]

   ```
   {
   "Tasks": [
       {
           "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
           "MaxErrors": "1",
           "TaskArn": "AWS-StartEC2Instance",
           "MaxConcurrency": "1",
           "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
           "TaskParameters": {},
           "Priority": 1,
           "WindowId": "mw-0c50858d01EXAMPLE",
           "Type": "AUTOMATION",
           "Targets": [
           ],
           "Name": "StartEC2"
       }
   ]
   }
   ```

------
#### [ Windows ]

   ```
   {
   "Tasks": [
       {
           "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
           "MaxErrors": "1",
           "TaskArn": "AWS-StartEC2Instance",
           "MaxConcurrency": "1",
           "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
           "TaskParameters": {},
           "Priority": 1,
           "WindowId": "mw-0c50858d01EXAMPLE",
           "Type": "AUTOMATION",
           "Targets": [
           ],
           "Name": "StartEC2"
       }
   ]
   }
   ```

------
#### [ PowerShell ]

   ```
   Description    : 
   LoggingInfo    : 
   MaxConcurrency : 5
   MaxErrors      : 1
   Name           : StartEC2
   Priority       : 1
   ServiceRoleArn : arn:aws:iam::123456789012:role/MaintenanceWindowRole
   Targets        : {}
   TaskArn        : AWS-StartEC2Instance
   TaskParameters : {}
   Type           : AUTOMATION
   WindowId       : mw-0c50858d01EXAMPLE
   WindowTaskId   : 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

# Systems Manager Automation アクションのリファレンス
<a name="automation-actions"></a>

このリファレンスでは、オートメーションランブックで指定できるAutomation アクションについて説明します。Automation は AWS Systems Manager のツールです。これらのアクションは他のタイプの Systems Manager (SSM) ドキュメントでは使用できません。SSM の他のドキュメントタイプのプラグインについては、「[コマンドドキュメントプラグインリファレンス](documents-command-ssm-plugin-reference.md)」を参照してください。

Systems Manager Automation は、オートエアコンランブックで定義されたステップを実行します。各ステップは、特定のオペレーションに関連付けられます。このアクションは、ステップの入力、動作、出力を決定します。ステップは、ランブックの `mainSteps` セクションで定義されます。

アクションまたはステップの出力を指定する必要はありません。出力は、ステップに関係付けられるアクションで事前判断されます。Runbook でステップ入力を指定すると、前のステップの 1 つあるいは複数の出力を参照できます。たとえば、`aws:runInstances` の出力は後続の `aws:runCommand` アクションで利用できます。Runbook の `Output` セクションで前のステップの出力を参照することもできます。

**重要**  
AWS Identity and Access Management (IAM) サービスロールを使用して他のサービスを呼び出す自動化ワークフローを実行する場合は、それらのサービスを呼び出すためのアクセス許可をサービスロールに設定する必要がある点に注意してください。この要件は、`AWS-ConfigureS3BucketLogging`、`AWS-CreateDynamoDBBackup`、`AWS-RestartEC2Instance` ランブックなど、すべての AWS オートメーションランブック (`AWS-*` ランブック) に適用されます。この要件は、他のサービスを呼び出すアクションを使用して他の AWS のサービスを呼び出すように作成したカスタムオートメーションランブックにも適用されます。例えば、`aws:executeAwsApi`、`aws:createStack`、または `aws:copyImage` のアクションを使用する場合は、それらのサービスを呼び出すためのアクセス許可を持つサービスロールを設定します。ロールに IAM インラインポリシーを追加することで、他の AWS のサービスへのアクセス許可を有効にできます。詳細については、「[(オプション) 他の AWS のサービス を呼び出すためのオートメーションインラインポリシーまたはカスタマー管理ポリシーを追加する](automation-setup-iam.md#add-inline-policy)」を参照してください。

**Topics**
+ [すべてのアクションで共有されるプロパティ](#automation-common)
+ [`aws:approve` - 手動承認のためにオートメーションを一時停止する](automation-action-approve.md)
+ [`aws:assertAwsResourceProperty` – AWS リソースの状態またはイベントの状態をアサートする](automation-action-assertAwsResourceProperty.md)
+ [`aws:branch` – 条件付きオートメーションステップを実行する](automation-action-branch.md)
+ [`aws:changeInstanceState` – インスタンスの状態を変更またはアサートする](automation-action-changestate.md)
+ [`aws:copyImage` — Amazon Machine Image のコピーまたは暗号化](automation-action-copyimage.md)
+ [`aws:createImage` – Amazon マシンイメージ (AMI) を作成する](automation-action-create.md)
+ [`aws:createStack` – CloudFormation スタックを作成する](automation-action-createstack.md)
+ [`aws:createTags` – AWS リソースのタグを作成する](automation-action-createtag.md)
+ [`aws:deleteImage` – Amazon Machine Image を削除する](automation-action-delete.md)
+ [`aws:deleteStack` – CloudFormation スタックを削除する](automation-action-deletestack.md)
+ [`aws:executeAutomation` – 別のオートメーションを実行する](automation-action-executeAutomation.md)
+ [`aws:executeAwsApi` — AWS API オペレーションの呼び出しと実行](automation-action-executeAwsApi.md)
+ [`aws:executeScript` – スクリプトを実行する](automation-action-executeScript.md)
+ [`aws:executeStateMachine` – AWS Step Functions ステートマシンを実行する](automation-action-executeStateMachine.md)
+ [`aws:invokeWebhook` – オートメーションのウェブフック統合を呼び出す](invoke-webhook.md)
+ [`aws:invokeLambdaFunction` – AWS Lambda 関数を呼び出す](automation-action-lamb.md)
+ [`aws:loop` — オートメーション内のステップを反復処理します。](automation-action-loop.md)
+ [`aws:pause` – オートメーションを一時停止する](automation-action-pause.md)
+ [`aws:runCommand` – マネージドインスタンスでコマンドを実行する](automation-action-runcommand.md)
+ [`aws:runInstances` – Amazon EC2 インスタンスの起動](automation-action-runinstance.md)
+ [`aws:sleep` – オートメーションを遅らせる](automation-action-sleep.md)
+ [`aws:updateVariable` — ランブック変数の値を更新します。](automation-action-update-variable.md)
+ [`aws:waitForAwsResourceProperty` – AWS リソースプロパティを待つ](automation-action-waitForAwsResourceProperty.md)
+ [オートメーションシステム変数](automation-variables.md)

## すべてのアクションで共有されるプロパティ
<a name="automation-common"></a>

共通プロパティは、すべてのアクションで見つかるパラメータまたはオプションです。一部のオプションは、ステップの動作を定義します。たとえば、ステップが完了するまで待機する時間や、ステップが失敗した場合の対処方法などです。以下のプロパティは、すべてのアクションに共通です。

[description](#descriptProp)  
ランブックまたはステップの目的を説明するために提供する情報。  
タイプ: 文字列  
必須: いいえ

[name](#nameProp)  
Runbook のすべてのステップ名にわたって一意でなければならない識別子。  
タイプ: 文字列  
使用できるパターン: [a-zA-Z0-9\$1]\$1\$1  
必須: はい

[action](#actProp)  
ステップが実行するアクションの名前です。[`aws:runCommand` – マネージドインスタンスでコマンドを実行する](automation-action-runcommand.md) はここで指定できるアクションの例です。このドキュメントは、使用可能なすべてのアクションの詳細情報を提供します。  
型: 文字列  
必須: はい

[maxAttempts](#maxProp)  
ステップが失敗した場合は再試行する回数。指定した値が 1 より大きい場合、すべての再試行が失敗するまでステップは失敗したと見なされません。デフォルト値は 1 です。  
タイプ: 整数  
必須: いいえ

[timeoutSeconds](#timeProp)  
ステップのタイムアウト値。タイムアウトが達したときに `maxAttempts` の値が 1 以上の場合、すべての再試行が実行されるまでこのステップはタイムアウトとは見なされません。  
タイプ: 整数  
必須: いいえ

[onFailure](#failProp)  
失敗時にオートメーションを中止するか、続行するか、別のステップに移行するかを示します。このオプションのデフォルト値は中止です。  
型: 文字列  
有効な値: Abort \$1 Continue \$1 step:*step\$1name*  
必須: いいえ

[onCancel](#canProp)  
ユーザーがオートメーションをキャンセルした場合に、オートメーションがどのステップに進むべきかを示します。Automation は、最大で 2 分間、キャンセルワークフローを実行します。  
型: 文字列  
有効な値: Abort \$1 step:*step\$1name*  
必須: いいえ  
`onCancel` プロパティでは、次のアクションへの移動はサポートされていません。  
+ `aws:approve`
+ `aws:copyImage`
+ `aws:createImage`
+ `aws:createStack`
+ `aws:createTags`
+ `aws:loop`
+ `aws:pause`
+ `aws:runInstances`
+ `aws:sleep`

[isEnd](#endProp)  
このオプションでは、特定のステップの最後にオートメーションを停止します。ステップが失敗または成功した場合に、オートメーションが停止します。デフォルト値は false です。  
タイプ: ブール値  
有効な値: true \$1 false  
必須: いいえ

[nextStep](#nextProp)  
ステップを正常に完了した後に、次に処理するオートメーションのステップを指定します。  
型: 文字列  
必須: いいえ

[isCritical](#critProp)  
自動化の正常な完了のために、ステップを critical として指定します。この指定のステップが失敗した場合、自動化は自動化の失敗の最終的なステータスをレポートします。このプロパティは、ステップで明示的に定義した場合のみ評価されます。ステップで `onFailure` プロパティが `Continue` に設定されている場合、値はデフォルトで false になります。それ以外の場合、このオプションのデフォルト値は true です。  
タイプ: ブール値  
有効な値: true \$1 false  
必須: いいえ

[inputs](#inProp)  
アクション固有のプロパティ。  
型: マップ  
必須: はい

### 例
<a name="automation-demo"></a>

```
---
description: "Custom Automation Example"
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 run this runbook."
    default: ''
  InstanceId:
      type: String
      description: "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot."
      default: ''
mainSteps:
- name: getInstanceDetails
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
    - Name: availabilityZone
      Selector: "$.Reservations[0].Instances[0].Placement.AvailabilityZone"
      Type: String
    - Name: rootDeviceName
      Selector: "$.Reservations[0].Instances[0].RootDeviceName"
      Type: String
  nextStep: getRootVolumeId
- name: getRootVolumeId
  action: aws:executeAwsApi
  maxAttempts: 3
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    -  Name: attachment.device
       Values: ["{{ getInstanceDetails.rootDeviceName }}"]
    -  Name: attachment.instance-id
       Values: ["{{ InstanceId }}"]
  outputs:
    - Name: rootVolumeId
      Selector: "$.Volumes[0].VolumeId"
      Type: String
  nextStep: getSnapshotsByStartTime
- name: getSnapshotsByStartTime
  action: aws:executeScript
  timeoutSeconds: 45
  onFailure: Abort
  inputs:
    Runtime: python3.8
    Handler: getSnapshotsByStartTime
    InputPayload:
      rootVolumeId : "{{ getRootVolumeId.rootVolumeId }}"
    Script: |-
      def getSnapshotsByStartTime(events,context):
        import boto3

        #Initialize client
        ec2 = boto3.client('ec2')
        rootVolumeId = events['rootVolumeId']
        snapshotsQuery = ec2.describe_snapshots(
          Filters=[
            {
              "Name": "volume-id",
              "Values": [rootVolumeId]
            }
          ]
        )
        if not snapshotsQuery['Snapshots']:
          noSnapshotFoundString = "NoSnapshotFound"
          return { 'noSnapshotFound' : noSnapshotFoundString }
        else:
          jsonSnapshots = snapshotsQuery['Snapshots']
          sortedSnapshots = sorted(jsonSnapshots, key=lambda k: k['StartTime'], reverse=True)
          latestSortedSnapshotId = sortedSnapshots[0]['SnapshotId']
          return { 'latestSnapshotId' : latestSortedSnapshotId }
  outputs:
  - Name: Payload
    Selector: $.Payload
    Type: StringMap
  - Name: latestSnapshotId
    Selector: $.Payload.latestSnapshotId
    Type: String
  - Name: noSnapshotFound
    Selector: $.Payload.noSnapshotFound
    Type: String 
  nextStep: branchFromResults
- name: branchFromResults
  action: aws:branch
  onFailure: Abort
  onCancel: step:startInstance
  inputs:
    Choices:
    - NextStep: createNewRootVolumeFromSnapshot
      Not:
        Variable: "{{ getSnapshotsByStartTime.noSnapshotFound }}"
        StringEquals: "NoSnapshotFound"
  isEnd: true
- name: createNewRootVolumeFromSnapshot
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: CreateVolume
    AvailabilityZone: "{{ getInstanceDetails.availabilityZone }}"
    SnapshotId: "{{ getSnapshotsByStartTime.latestSnapshotId }}"
  outputs:
    - Name: newRootVolumeId
      Selector: "$.VolumeId"
      Type: String
  nextStep: stopInstance
- name: stopInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StopInstances
    InstanceIds:
    - "{{ InstanceId }}"
  nextStep: verifyVolumeAvailability
- name: verifyVolumeAvailability
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: verifyInstanceStopped
- name: verifyInstanceStopped
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
    PropertySelector: "$.Reservations[0].Instances[0].State.Name"
    DesiredValues:
    - "stopped"
  nextStep: detachRootVolume
- name: detachRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  isCritical: true
  inputs:
    Service: ec2
    Api: DetachVolume
    VolumeId: "{{ getRootVolumeId.rootVolumeId }}"
  nextStep: verifyRootVolumeDetached
- name: verifyRootVolumeDetached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ getRootVolumeId.rootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: attachNewRootVolume
- name: attachNewRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: AttachVolume
    Device: "{{ getInstanceDetails.rootDeviceName }}"
    InstanceId: "{{ InstanceId }}"
    VolumeId: "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
  nextStep: verifyNewRootVolumeAttached
- name: verifyNewRootVolumeAttached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].Attachments[0].State"
    DesiredValues:
    - "attached"
  nextStep: startInstance
- name: startInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StartInstances
    InstanceIds:
    - "{{ InstanceId }}"
```

# `aws:approve` - 手動承認のためにオートメーションを一時停止する
<a name="automation-action-approve"></a>

指定されたプリンシパルによってアクションか承認または拒否されるまで、一時的にオートメーションを停止します。必要な承認数が得られると、オートメーションが再開されます。Runbook の `mainSteps` セクションの任意の場所に承認ステップを挿入できます。

**注記**  
このアクションは、マルチアカウントとリージョンオートメーションをサポートしていません。このアクションのデフォルトのタイムアウトは 7 日間 (604800 秒) で、最大値は 30 日間 (2592000 秒) です。`timeoutSeconds` ステップで `aws:approve` パラメータを指定して、タイムアウトを制限または延長することができます。

次の例では、1 つの承認者がアクションを許可または拒否するまで、`aws:approve` アクションによって一時的にオートメーションが停止します。承認されると、オートメーションはシンプルな PowerShell コマンドを実行します。

------
#### [ YAML ]

```
---
description: RunInstancesDemo1
schemaVersion: '0.3'
assumeRole: "{{ assumeRole }}"
parameters:
  assumeRole:
    type: String
  message:
    type: String
mainSteps:
- name: approve
  action: aws:approve
  timeoutSeconds: 1000
  onFailure: Abort
  inputs:
    NotificationArn: arn:aws:sns:us-east-2:12345678901:AutomationApproval
    Message: "{{ message }}"
    MinRequiredApprovals: 1
    Approvers:
    - arn:aws:iam::12345678901:user/AWS-User-1
- name: run
  action: aws:runCommand
  inputs:
    InstanceIds:
    - i-1a2b3c4d5e6f7g
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - date
```

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

```
{
   "description":"RunInstancesDemo1",
   "schemaVersion":"0.3",
   "assumeRole":"{{ assumeRole }}",
   "parameters":{
      "assumeRole":{
         "type":"String"
      },
      "message":{
         "type":"String"
      }
   },
   "mainSteps":[
      {
         "name":"approve",
         "action":"aws:approve",
         "timeoutSeconds":1000,
         "onFailure":"Abort",
         "inputs":{
            "NotificationArn":"arn:aws:sns:us-east-2:12345678901:AutomationApproval",
            "Message":"{{ message }}",
            "MinRequiredApprovals":1,
            "Approvers":[
               "arn:aws:iam::12345678901:user/AWS-User-1"
            ]
         }
      },
      {
         "name":"run",
         "action":"aws:runCommand",
         "inputs":{
            "InstanceIds":[
               "i-1a2b3c4d5e6f7g"
            ],
            "DocumentName":"AWS-RunPowerShellScript",
            "Parameters":{
               "commands":[
                  "date"
               ]
            }
         }
      }
   ]
}
```

------

コンソールで承認を待機中の自動化を承認または拒否できます。

**待機中の自動化を許可または拒否するには**

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

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

1. ステータスが [**待機中**] の自動化の横にあるオプションを選択します。  
![\[[Approve/Deny Automation (自動化承認/拒否)] ページへのアクセス\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/automation-approve-action-aws.png)

1. [**Approve/Deny**] (承認/拒否) を選択します。

1. 自動化の詳細を確認します。

1. [**承認**] または [**拒否**] を選択し、オプションでコメントを入力して、[**送信**] を選択します。

**入力例**

------
#### [ YAML ]

```
NotificationArn: arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest
Message: Please approve this step of the Automation.
MinRequiredApprovals: 3
Approvers:
- IamUser1
- IamUser2
- arn:aws:iam::12345678901:user/IamUser3
- arn:aws:iam::12345678901:role/IamRole
```

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

```
{
   "NotificationArn":"arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest",
   "Message":"Please approve this step of the Automation.",
   "MinRequiredApprovals":3,
   "Approvers":[
      "IamUser1",
      "IamUser2",
      "arn:aws:iam::12345678901:user/IamUser3",
      "arn:aws:iam::12345678901:role/IamRole"
   ]
}
```

------

NotificationArn  
オートメーションの承認のための Amazon Simple Notification Service (Amazon SNS) トピックの Amazon リソースネーム (ARN)。Runbook で `aws:approve` ステップを指定すると、オートメーションステップを承認または拒否する必要があることを知らせるメッセージが、このトピックに送信されます。Amazon SNS トピックのタイトルは「Automation」というプレフィックスをつける必要があります。  
型: 文字列  
必須: いいえ

メッセージ  
承認リクエストが送信されるときに Amazon SNS トピックに含める情報。メッセージの最大長は 4096 文字です。  
型: 文字列  
必須: いいえ

MinRequiredApprovals  
オートメーションが再開されるために必要な承認の最小数。値を指定しない場合、システムによるデフォルトは 1 です。このパラメータの値は、正の数にする必要があります。このパラメータの値は、`Approvers` パラメータで定義された承認者の数を超えることはできません。  
タイプ: 整数  
必須: いいえ

Approvers  
アクションを承認または拒否できる AWS の認証プリンシパルのリスト。承認者の最大数は 10 です。プリンシパルは、次のいずれかの形式を使用して指定できます。  
+ ユーザー名
+ ユーザー ARN
+ IAM ロール ARN
+ IAM 継承ロール ARN
タイプ: StringList  
必須: はい

EnhancedApprovals  
Change Manager テンプレートにのみ使用される入力。アクションを承認または拒否できる AWS 認証済みプリンシパルのリスト、IAM プリンシパルのタイプ、および承認者の最小数。以下に例を示します。  

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
    - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
        Message: Please approve this change request
        MinRequiredApprovals: 3
        EnhancedApprovals:
        Approvers:
            - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 0
            - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 0
            - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 0
            - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 0
```
タイプ: StringList  
必須: はい

**出力**

ApprovalStatus  
ステップの承認ステータス。ステータスは、Approved、Rejected、または Waiting のいずれかです。Waiting は自動化が承認者の入力を待っていることを意味します。  
型: 文字列

ApproverDecisions  
各承認者の承認状況を含む JSON マップです。  
タイプ: MapList

# `aws:assertAwsResourceProperty` – AWS リソースの状態またはイベントの状態をアサートする
<a name="automation-action-assertAwsResourceProperty"></a>

`aws:assertAwsResourceProperty` アクションを使用すると、特定の Automation ステップの、特定のリソース状態またはイベント状態をアサートできます。

**注記**  
`aws:assertAwsResourceProperty` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

このアクションの使用例については、「[その他のランブックの例](automation-document-examples.md)」を参照してください。

**Input**  
入力は、選択した API オペレーションによって定義されます。

------
#### [ YAML ]

```
action: aws:assertAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property values
```

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

```
{
  "action": "aws:assertAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property values"
    ]
  }
}
```

------

サービス  
実行する API オペレーションを含む AWS のサービスの名前空間。例えば、Systems Manager の名前空間は `ssm` です。Amazon EC2 の名前空間は `ec2` です。サポートされている AWS のサービスの名前空間のリストは、 AWS CLI コマンドリファレンスの「[Available Services (利用可能なサービス)](https://docs.aws.amazon.com/cli/latest/reference/#available-services)」セクションを参照してください。  
タイプ: 文字列  
必須: はい

Api  
実行する API オペレーションの名前。API オペレーション (メソッド) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon Relational Database Service (Amazon RDS) のすべての API オペレーション (メソッド) は、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)のページに一覧表示されます。  
型: 文字列  
必須: はい

API オペレーション入力  
1 つ以上の API オペレーションを入力します。使用できる入力 (パラメータ) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、下にスクロールして、[**DBInstanceIdentifier**]、[**Name (名前)**]、および [**Values (値)**] などの使用可能なパラメータを表示します。複数の入力を指定するには、次の形式を使用します。  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
型: 選択した API オペレーションによって決まります  
必須: はい

PropertySelector  
応答オブジェクト内の特定の属性への JSONPath。レスポンスオブジェクトは、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、[**Response Structure (レスポンス構造)**] セクションまで下にスクロールします。[**DBInstances**] は応答オブジェクトとして表示されます。  
型: 文字列  
必須: はい

DesiredValues  
予定の状態、またはオートメーションを継続する状態。ブール値を指定する場合は、True または False などのように大文字を使用する必要があります。  
タイプ: StringList  
必須: はい

# `aws:branch` – 条件付きオートメーションステップを実行する
<a name="automation-action-branch"></a>

`aws:branch` アクションを使用すると、1 つのステップでさまざまな選択肢を評価し、その評価結果に基づいてランブックの別のステップにジャンプする、動的なオートメーションを作成できます。

ステップの `aws:branch` アクションを指定する場合、オートメーションが評価する必要のある `Choices` を指定します。`Choices` は、Runbook の `Parameters` セクションで指定した値、または前述のステップの出力として生成された動的値のいずれかをベースにすることができます。自動化は、ブール式を使用して各選択肢を評価します。最初の選択肢が true である場合、オートメーションはその選択肢に指定されたステップにジャンプします。最初の選択肢が false の場合、オートメーションは次の選択肢を評価します。オートメーションは、選択肢が true になるまで、各選択肢の評価を続けます。オートメーションは、true の選択肢に指定されたステップにジャンプします。

true の選択肢がない場合、オートメーションはステップに `default` 値が含まれているかどうかを確認します。デフォルト値は、true の選択肢がない場合にオートメーションがジャンプするステップを定義します。ステップに `default` 値が指定されていない場合、オートメーションはランブックの次のステップを処理します。

`aws:branch` アクションは、`And`、`Not`、および `Or` 演算子の組み合わせを使用して複雑な選択肢の評価をサポートします。サンプルのランブックや、さまざまな演算子を使用する例を含む `aws:branch` の使用方法については、「[ランブックでの条件文の使用](automation-branch-condition.md)」を参照してください。

**Input**  
ステップに 1 つ以上の `Choices` を指定します。`Choices` は、Runbook の `Parameters` セクションで指定した値、または前述のステップの出力として生成された動的値のいずれかをベースにすることができます。ここでは、パラメータを評価する YAML サンプルを示します。

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: linux
    Default:
      sleep3
```

前のステップからの出力を評価する YAML サンプルを示します。

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Linux
    Default:
      sleep3
```

選択肢  
次のステップを決定し処理する際に、自動化が評価する 1 つ以上の式。選択肢はブール式を使用して評価されます。各選択肢は、次のオプションを定義する必要があります。  
+ **NextStep**: 指定された選択肢が true である場合に処理する、Runbook の次のステップ。
+ **Variable**: Runbook の `Parameters` セクションで定義されているパラメータの名前を指定します。または、Runbook の前述のステップからの出力オブジェクトを指定します。`aws:branch` の変数作成の詳細については、「[出力変数の作成について](automation-branch-condition.md#branch-action-output)」を参照してください。
+ **Operation**: 選択肢を評価するために使用される基準。`aws:branch` アクションは、次の操作をサポートします。

**文字列演算子**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + Contains

**数値演算子**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**ブール演算子**
  + BooleanEquals
**重要**  
ランブックを作成すると、システムはランブック内の各オペレーションを検証します。オペレーションがサポートされていない場合は、ランブックの作成時にエラーが返されます。

デフォルト  
true の `Choices` がない場合にオートメーションがジャンプするステップの名前。  
型: 文字列  
必須: いいえ

**注記**  
`aws:branch` アクションは、`And`、`Or`、および `Not` 演算子をサポートします。演算子を使用する `aws:branch` の例については、「[ランブックでの条件文の使用](automation-branch-condition.md)」を参照してください。

# `aws:changeInstanceState` – インスタンスの状態を変更またはアサートする
<a name="automation-action-changestate"></a>

インスタンスの状態を変更またはアサートします。

このアクションは、アサートモードで使用できます (API は実行して状態を変更することはしませんが、インスタンスが目的の状態であることを検証します)。アサートモードを使用するには、`CheckStateOnly` パラメータを true に設定します。このモードは、Windows Server で Sysprep (バックグラウンドで長期に実行できる非同期コマンド) を実行するときに役立ちます。Amazon Machine Image (AMI) を作成する前に、インスタンスが停止していることを確認できます。

**注記**  
このアクションのデフォルトのタイムアウト値は 3600 秒 (1 時間) です。`timeoutSeconds` ステップで `aws:changeInstanceState` パラメータを指定して、タイムアウトを制限または延長することができます。

**注記**  
`aws:changeInstanceState` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input** (入力)

------
#### [ YAML ]

```
name: stopMyInstance
action: aws:changeInstanceState
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  InstanceIds:
  - i-1234567890abcdef0
  CheckStateOnly: true
  DesiredState: stopped
```

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

```
{
    "name":"stopMyInstance",
    "action": "aws:changeInstanceState",
    "maxAttempts": 3,
    "timeoutSeconds": 3600,
    "onFailure": "Abort",
    "inputs": {
        "InstanceIds": ["i-1234567890abcdef0"],
        "CheckStateOnly": true,
        "DesiredState": "stopped"
    }
}
```

------

InstanceIds  
インスタンスの ID。  
タイプ: StringList  
必須: はい

CheckStateOnly  
false の場合、インスタンスの状態は目的の状態に設定されます。true の場合、ポーリングを使用して目的の状態をアサートします。  
デフォルト: `false`  
タイプ: ブール値  
必須: いいえ

DesiredState  
目的の状態。`running` に設定されている場合、このアクションは Amazon EC2 の状態が `Running`、インスタンスの状態が `OK`、および完了する前にシステム状態が `OK` になるのを待ちます。  
型: 文字列  
有効な値: `running` \$1 `stopped` \$1 `terminated`  
必須: はい

Force  
設定した場合、インスタンスが強制的に停止されます。インスタンスによって、ファイルシステムキャッシュまたはファイルシステムメタデータがフラッシュされることはありません。このオプションを使用する場合は、ファイルシステムのチェックと修復の手順を手動で実行する必要があります。このオプションは Windows Server の EC2 インスタンスにはお勧めしません。  
タイプ: ブール値  
必須: いいえ

AdditionalInfo  
リザーブド。  
型: 文字列  
必須: いいえ

**Output**  
なし

# `aws:copyImage` — Amazon Machine Image のコピーまたは暗号化
<a name="automation-action-copyimage"></a>

任意の AWS リージョン から現在のリージョンに Amazon Machine Image (AMI) をコピーします。このアクションでは、新しい AMI を暗号化することもできます。

**注記**  
`aws:copyImage` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは、ほとんどの `CopyImage` パラメータがサポートされています。詳細については、「[CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CopyImage.html)」を参照してください。

次の例では、ソウルリージョンで AMI のコピーを作成します (`SourceImageID`: ami-0fe10819. `SourceRegion`: ap-northeast-2)。新しい AMI が、Automation アクションを開始したリージョンにコピーされます。オプションの `Encrypted` フラグが `true` に設定されているため、コピーされた AMI は暗号化されます。

------
#### [ YAML ]

```
name: createEncryptedCopy
action: aws:copyImage
maxAttempts: 3
onFailure: Abort
inputs:
  SourceImageId: ami-0fe10819
  SourceRegion: ap-northeast-2
  ImageName: Encrypted Copy of LAMP base AMI in ap-northeast-2
  Encrypted: true
```

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

```
{   
    "name": "createEncryptedCopy",
    "action": "aws:copyImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "SourceImageId": "ami-0fe10819",
        "SourceRegion": "ap-northeast-2",
        "ImageName": "Encrypted Copy of LAMP base AMI in ap-northeast-2",
        "Encrypted": true
    }   
}
```

------

SourceRegion  
ソース AMI が存在するリージョン。  
型: 文字列  
必須: はい

SourceImageId  
ソースリージョンからコピーする AMI ID。  
型: 文字列  
必須: はい

ImageName  
新しいイメージの名前。  
型: 文字列  
必須: はい

ImageDescription  
ターゲットイメージの説明。  
型: 文字列  
必須: いいえ

暗号化された  
ターゲット AMI を暗号化します。  
タイプ: ブール値  
必須: いいえ

KmsKeyId  
コピーオペレーション中にイメージのスナップショットを暗号化するときに使用する AWS KMS key の Amazon リソースネーム (ARN)。詳細については、「[CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html)」を参照してください。  
型: 文字列  
必須: いいえ

ClientToken  
リクエストのべき等のために割り当てる一意の識別子 (大文字と小文字を区別)。詳細については、「[CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html)」を参照してください。  
型: 文字列  
必須: いいえOutput

ImageId  
コピーされたイメージの ID。

ImageState  
コピーされたイメージの状態。  
有効な値: `available` \$1 `pending` \$1 `failed`

# `aws:createImage` – Amazon マシンイメージ (AMI) を作成する
<a name="automation-action-create"></a>

実行中、停止中、または停止済みのインスタンスから Amazon Machine Image (AMI) を作成し、`ImageState` が `available` になるまでポーリングします。

**注記**  
`aws:createImage` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは、次の `CreateImage` パラメータがサポートされています。詳細については、「[CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)」を参照してください

------
#### [ YAML ]

```
name: createMyImage
action: aws:createImage
maxAttempts: 3
onFailure: Abort
inputs:
  InstanceId: i-1234567890abcdef0
  ImageName: AMI Created on{{global:DATE_TIME}}
  NoReboot: true
  ImageDescription: My newly created AMI
```

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

```
{
    "name": "createMyImage",
    "action": "aws:createImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "InstanceId": "i-1234567890abcdef0",
        "ImageName": "AMI Created on{{global:DATE_TIME}}",
        "NoReboot": true,
        "ImageDescription": "My newly created AMI"
    }
}
```

------

InstanceId  
インスタンスの ID。  
型: 文字列  
必須: はい

ImageName  
イメージの名前。  
型: 文字列  
必須: はい

ImageDescription  
イメージの説明。  
型: 文字列  
必須: いいえ

NoReboot  
ブールリテラルです。  
デフォルトでは、Amazon Elastic Compute Cloud (Amazon EC2) はインスタンスをシャットダウンして再起動してからイメージを作成します。**再起動しない**オプションが `true` に設定されている場合、Amazon EC2 はイメージの作成前にインスタンスをシャットダウンしません。このオプションを使用すると、作成したイメージのファイルシステムの完全性は保証できません。  
AMI を作成した後、そのイメージからインスタンスを実行しない場合、まず、[`aws:changeInstanceState` – インスタンスの状態を変更またはアサートする](automation-action-changestate.md) アクションを使用してインスタンスを停止します。次に、[**NoReboot**] オプションを `true` に設定して、この `aws:createImage` アクションを使用します。  
タイプ: ブール値  
必須: いいえ

BlockDeviceMappings  
インスタンスのブロックデバイス。  
型: マップ  
必須: いいえOutput

ImageId  
新しく作成したイメージの ID。  
タイプ: 文字列。

ImageState  
イメージの現在の状態。この状態が available の場合、イメージは正常に登録されており、インスタンスの作成に使用できます。  
タイプ: 文字列

# `aws:createStack` – CloudFormation スタックを作成する
<a name="automation-action-createstack"></a>

テンプレートから AWS CloudFormation スタックを作成します。

**注記**  
`aws:createStack` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

CloudFormation スタックの作成に関する補足情報については、*AWS CloudFormation API リファレンス*の「[CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)」を参照してください。

**Input** (入力)

------
#### [ YAML ]

```
name: makeStack
action: aws:createStack
maxAttempts: 1
onFailure: Abort
inputs:
  Capabilities:
  - CAPABILITY_IAM
  StackName: myStack
  TemplateURL: http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate
  TimeoutInMinutes: 5
  Parameters:
    - ParameterKey: LambdaRoleArn
      ParameterValue: "{{LambdaAssumeRole}}"
    - ParameterKey: createdResource
      ParameterValue: createdResource-{{automation:EXECUTION_ID}}
```

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

```
{
    "name": "makeStack",
    "action": "aws:createStack",
    "maxAttempts": 1,
    "onFailure": "Abort",
    "inputs": {
        "Capabilities": [
            "CAPABILITY_IAM"
        ],
        "StackName": "myStack",
        "TemplateURL": "http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate",
        "TimeoutInMinutes": 5,
        "Parameters": [
          {
            "ParameterKey": "LambdaRoleArn",
            "ParameterValue": "{{LambdaAssumeRole}}"
          },
          {
            "ParameterKey": "createdResource",
            "ParameterValue": "createdResource-{{automation:EXECUTION_ID}}"
          }
    }
}
```

------

機能  
CloudFormation が特定のスタックを作成する前に指定する値のリスト。一部のスタックテンプレートには、 のアクセス許可に影響するリソースが含まれますAWS アカウント このようなスタックの場合は、このパラメータを指定して、それらの機能を明示的に認識する必要があります。  
有効な値は、`CAPABILITY_IAM`、`CAPABILITY_NAMED_IAM`、および `CAPABILITY_AUTO_EXPAND` です。  
**CAPABILITY\$1IAM および CAPABILITY\$1NAMED\$1IAM**  
IAM リソースがある場合、どちらの機能でも指定できます。カスタム名を持つ IAM リソースがある場合は、`CAPABILITY_NAMED_IAM` を指定する必要があります。このパラメータを指定しない場合、このアクションは `InsufficientCapabilities` エラーを返します。次のリソースでは、`CAPABILITY_IAM` または `CAPABILITY_NAMED_IAM` を指定する必要があります。
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html)
スタックテンプレートにこのリソースが含まれている場合、これらに関連付けられるすべてのアクセス許可を確認して、必要時にはそのアクセス許可を編集することが推奨されます。  
詳細については、「[CloudFormation テンプレートの IAM リソースの承認](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities)」を参照してください。  
**CAPABILITY\$1AUTO\$1EXPAND**  
一部のテンプレートにはマクロが含まれています。マクロはテンプレート上でカスタム処理を実行します。これには検索して置換操作のような単純なアクションからテンプレート全体の広範な変換までが含まれます。このためユーザーは通常、実際にスタックを作成する前に、マクロによって発生した変更を確認できるように、処理済みのテンプレートから変更セットを作成します。スタックテンプレートに 1 つ以上のマクロが含まれており、変更セットの結果を確認せずに、処理されたテンプレートから直接スタックを作成することを選択する場合、この機能を確認する必要があります。
詳細については、「*AWS CloudFormation ユーザーガイド」*の「[AWS CloudFormation マクロを使用したテンプレートのカスタム処理の実行](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html)」を参照してください。  
型: 文字列の配列  
有効な値: `CAPABILITY_IAM | CAPABILITY_NAMED_IAM | CAPABILITY_AUTO_EXPAND`  
必須: いいえ

ClientRequestToken  
この CreateStack リクエストの一意の識別子。このステップで、maxAttempts に 1 より大きい値を設定する場合、このトークンを指定します。このトークンを指定することによって、同じ名前で新しいスタックの作成を試行していないことを CloudFormation が認識します。  
型: 文字列  
必須: いいえ  
長さの制限: 最小長は 1 です。最大長は 128 です。  
パターン: [a-zA-Z0-9][-a-zA-Z0-9]\$1

DisableRollback  
スタックの作成に失敗した場合にスタックのロールバックをオフにするために、`true` を設定します。  
条件付き: `DisableRollback` パラメータ、あるいは `OnFailure` パラメータのどちらかを指定できますが、両方を指定することはできません。  
デフォルト: `false`  
タイプ: ブール値  
必須: いいえ

NotificationARNs  
スタック関連イベントを発行する Amazon Simple Notification Service (Amazon SNS) トピックの ARN。Amazon SNS コンソール ([https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)) を使用して SNS トピック ARN を検索できます。  
型: 文字列の配列  
配列メンバー: 5 つの項目の最大数。  
必須: いいえ

OnFailure  
スタックの作成に失敗した場合に実行するアクションを決定します。`DO_NOTHING`、`ROLLBACK` または `DELETE` を指定する必要があります。  
条件付き: `OnFailure` パラメータ、あるいは `DisableRollback` パラメータのどちらかを指定できますが、両方を指定することはできません。  
デフォルト: `ROLLBACK`  
型: 文字列  
有効な値: ` DO_NOTHING | ROLLBACK | DELETE`  
必須: いいえ

パラメータ  
スタック用の入力パラメータを指定する `Parameter` 構造のリスト。詳細については、「[パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html)」データタイプを参照してください。  
タイプ: 「[パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html)」オブジェクトの配列   
必須: いいえ

ResourceTypes  
作成したこのスタックアクションで動作するアクセス許可があるテンプレートリソースの種類。たとえば、`AWS::EC2::Instance`、`AWS::EC2::*`、または `Custom::MyCustomInstance` などです。次の構文を使用して、テンプレートリソースの種類を記述します。  
+ すべての AWS リソース用:

  ```
  AWS::*
  ```
+ すべてのカスタムリソース用:

  ```
  Custom::*
  ```
+ 特定のカスタムリソース用:

  ```
  Custom::logical_ID
  ```
+ 特定の AWS のサービスのすべてのリソース用:

  ```
  AWS::service_name::*
  ```
+ 特定の AWS リソース用:

  ```
  AWS::service_name::resource_logical_ID
  ```
リソースの種類のリストに作成しているリソースが含まれていない場合、スタックの作成は失敗します。デフォルトでは、CloudFormation によりすべてのリソースタイプにアクセス許可が付与されます。IAM は、IAM ポリシーで CloudFormation 固有の条件キーにこのパラメータを使用します。詳細については、「[AWS Identity and Access Management を使用したユーザーアクセスの制御](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)」を参照してください。  
型: 文字列の配列  
長さの制限: 最小長は 1 です。最大長は 256 です。  
必須: いいえ

RoleARN  
CloudFormation がスタックを作成するために引き受ける IAM ロールの Amazon リソースネーム (ARN)。CloudFormation は、ユーザーに代わって呼び出しを行うために、このロールの認証情報を使用します。CloudFormation は、このスタックにおけるこれからのすべてのオペレーションにこのロールを常に使用します。ユーザーにこのスタックで操作できるアクセス許可がある限り、ユーザーに渡す許可がない場合でも、CloudFormation はこのロールを使用します。ロールに最小限の特権が付与されていることを確認してください。  
値を指定しない場合、CloudFormation は以前にこのスタックに関連付けられたロールを使用します。利用できるロールがない場合、CloudFormation はユーザー認証情報から生成される一時セッションを使用します。  
型: 文字列  
長さの制限: 最小長は 20 です。最大長は 2048 です。  
必須: いいえ

StackName  
スタックに関連付けられた名前。この名前は、作成しているスタックのリージョン内で一意であることが必要です。  
スタック名には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字はアルファベット文字である必要があります。また、128 文字より長くすることはできません。
型: 文字列  
必須: はい

StackPolicyBody  
スタックポリシー本文を含む構造。詳細については、「[スタックのリソースが更新されないようにする](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html)」を参照してください。  
条件付き: `StackPolicyBody` パラメータ、あるいは `StackPolicyURL` パラメータのどちらかを指定できますが、両方を指定することはできません。  
型: 文字列  
長さの制限: 最小長は 1 です。最大長は 16384 です。  
必須: いいえ

StackPolicyURL  
スタックポリシーを含むファイルの場所。URL は、スタックと同じリージョンにある S3 バケット内のポリシーを指定する必要があります。スタックポリシーに許可される最大のファイルサイズは 16 KB になります。  
条件付き: `StackPolicyBody` パラメータ、あるいは `StackPolicyURL` パラメータのどちらかを指定できますが、両方を指定することはできません。  
型: 文字列  
長さの制限: 最小長は 1 です。最大長は 1350 です。  
必須: いいえ

タグ  
このスタックに関連付るキー値のペア。また、CloudFormation はスタックで作成されたリソースにこれらのタグを伝達します。最大で 10 個のタグを指定できます。  
タイプ: 「[タグ](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Tag.html)」オブジェクトの配列   
必須: いいえ

TemplateBody  
最少長が 1 バイトで最大長が 51,200 バイトのテンプレート本文がある構造。詳細については、「[テンプレートの分析](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)」を参照してください。  
条件付き: `TemplateBody` パラメータ、あるいは `TemplateURL` パラメータのどちらかを指定できますが、両方を指定することはできません。  
型: 文字列  
長さの制限: 最小長は 1 です。  
必須: いいえ

TemplateURL  
テンプレート本文を含むファイルの場所。URL は、S3 バケット内にあるテンプレートを指定する必要があります。テンプレートに許可される最大サイズは 460,800 バイトです。詳細については、「[テンプレートの分析](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)」を参照してください。  
条件付き: `TemplateBody` パラメータ、あるいは `TemplateURL` パラメータのどちらかを指定できますが、両方を指定することはできません。  
型: 文字列  
長さの制限: 最小長は 1 です。最大長は 1,024 です。  
必須: いいえ

TimeoutInMinutes  
スタックステータスが `CREATE_FAILED` になるまでに経過できる時間数。`DisableRollback` が設定されない、あるいは `false` に設定されている場合、スタックはロールバックされます。  
タイプ: 整数  
有効な範囲: 最小値 は 1 です。  
必須: いいえ

## アウトプット
<a name="automation-action-createstack-output"></a>

StackId  
スタックの一意の識別子です。  
型: 文字列

StackStatus  
スタックの現在のステータス。  
型: 文字列  
有効な値：`CREATE_IN_PROGRESS | CREATE_FAILED | CREATE_COMPLETE | ROLLBACK_IN_PROGRESS | ROLLBACK_FAILED | ROLLBACK_COMPLETE | DELETE_IN_PROGRESS | DELETE_FAILED | DELETE_COMPLETE | UPDATE_IN_PROGRESS | UPDATE_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_COMPLETE | UPDATE_ROLLBACK_IN_PROGRESS | UPDATE_ROLLBACK_FAILED | UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_ROLLBACK_COMPLETE | REVIEW_IN_PROGRESS`  
必須: はい

StackStatusReason  
スタックステータスに関連付けられる成功あるいは失敗のメッセージ。  
型: 文字列  
必須: いいえ  
詳細については、「[CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html)」を参照してください

## セキュリティに関する考慮事項
<a name="automation-action-createstack-security"></a>

`aws:createStack` アクションを使用できる前に、IAM オートメーションが継承するロールに次のポリシーを割り当てる必要があります。継承ロールの詳細については、「[タスク 1: 自動化のサービスロールを作成する](automation-setup-iam.md#create-service-role)」を参照してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:CreateStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:createTags` – AWS リソースのタグを作成する
<a name="automation-action-createtag"></a>

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは AWS Systems Manager マネージドインスタンスの新しいタグを作成します。

**注記**  
`aws:createTags` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは、ほとんどの Amazon EC2 `CreateTags` パラメータと Systems Manager `AddTagsToResource` パラメータがサポートされています。詳細については、「[CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_createtags.html)」および「[AddTagsToResource](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_addtagstoresource.html)」を参照してください。

次の例は、Amazon Machine Image (AMI) とインスタンスに、特定の部門の本番稼働用リソースとしてタグを付ける方法を示しています。

------
#### [ YAML ]

```
name: createTags
action: aws:createTags
maxAttempts: 3
onFailure: Abort
inputs:
  ResourceType: EC2
  ResourceIds:
  - ami-9a3768fa
  - i-02951acd5111a8169
  Tags:
  - Key: production
    Value: ''
  - Key: department
    Value: devops
```

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

```
{
    "name": "createTags",
    "action": "aws:createTags",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "ResourceType": "EC2",
        "ResourceIds": [
            "ami-9a3768fa",
            "i-02951acd5111a8169"
        ],
        "Tags": [
            {
                "Key": "production",
                "Value": ""
            },
            {
                "Key": "department",
                "Value": "devops"
            }
        ]
    }
}
```

------

ResourceIds  
タグを付けるリソースの ID。リソースタイプが「EC2」でない場合、このフィールドは 1 つの項目のみを含むことができます。  
型: 文字列のリスト  
必須: はい

タグ  
リソースに関連付けるタグ。  
型: マップのリスト  
必須: はい

ResourceType  
タグを付けるリソースのタイプ。指定しない場合は、デフォルト値の「EC2」が使用されます。  
型: 文字列  
必須: いいえ  
有効な値: `EC2` \$1 `ManagedInstance` \$1 `MaintenanceWindow` \$1 `Parameter`

**Output**  
なし

# `aws:deleteImage` – Amazon Machine Image を削除する
<a name="automation-action-delete"></a>

指定された Amazon Machine Image (AMI) およびすべての関連するスナップショットを削除します。

**注記**  
`aws:deleteImage` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは 1 つのパラメータのみがサポートされています。詳細については、[DeregisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterImage.html) と [DeleteSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteSnapshot.html) のドキュメントを参照してください。

------
#### [ YAML ]

```
name: deleteMyImage
action: aws:deleteImage
maxAttempts: 3
timeoutSeconds: 180
onFailure: Abort
inputs:
  ImageId: ami-12345678
```

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

```
{
    "name": "deleteMyImage",
    "action": "aws:deleteImage",
    "maxAttempts": 3,
    "timeoutSeconds": 180,
    "onFailure": "Abort",
    "inputs": {
        "ImageId": "ami-12345678"
    }
}
```

------

ImageId  
削除するイメージの ID。  
型: 文字列  
必須: はい

**Output**  
なし

# `aws:deleteStack` – CloudFormation スタックを削除する
<a name="automation-action-deletestack"></a>

AWS CloudFormation スタックを削除します。

**注記**  
`aws:deleteStack` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input** (入力)

------
#### [ YAML ]

```
name: deleteStack
action: aws:deleteStack
maxAttempts: 1
onFailure: Abort
inputs:
  StackName: "{{stackName}}"
```

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

```
{
   "name":"deleteStack",
   "action":"aws:deleteStack",
   "maxAttempts":1,
   "onFailure":"Abort",
   "inputs":{
      "StackName":"{{stackName}}"
   }
}
```

------

ClientRequestToken  
この `DeleteStack` リクエストの一意な識別子。お客様が同じ名前のスタックを削除しようとしていないと CloudFormation に認識させるためにリクエストを再試行する場合は、このトークンを指定します。`DeleteStack` リクエストを再試行して、CloudFormation がリクエストを受信したことを確認できます。  
型: 文字列  
長さの制限: 最小長は 1 です。最大長は 128 です。  
パターン: [a-zA-Z][a-zA-Z0-9]\$1  
必須: いいえ

RetainResources.member.N  
この入力は、`DELETE_FAILED` 状態にあるスタックにのみ適用されます。お客様が保持したいリソースの論理リソース ID のリストです。削除中、CloudFormation はスタックを削除しますが、保持したリソースは削除しません。  
空白でない S3 バケットなど、削除できないリソースは残すと便利ですが、スタックの削除が必要な場合もあります。  
型: 文字列の配列  
必須: いいえ

RoleARN  
CloudFormation がスタックを作成するために引き受ける AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN)。CloudFormation は、ユーザーに代わって呼び出しを行うために、このロールの認証情報を使用します。CloudFormation は、このスタックにおけるこれからのすべてのオペレーションにこのロールを常に使用します。ユーザーにこのスタックで操作できるアクセス許可がある限り、ユーザーに渡す許可がない場合でも、CloudFormation はこのロールを使用します。ロールに最小限の特権が付与されていることを確認してください。  
値を指定しない場合、CloudFormation は以前にこのスタックに関連付けられたロールを使用します。利用できるロールがない場合、CloudFormation はユーザー認証情報から生成される一時セッションを使用します。  
型: 文字列  
長さの制限: 最小長は 20 です。最大長は 2048 です。  
必須: いいえ

StackName  
スタックと関連付けられている名前または一意のスタック ID。  
型: 文字列  
必須: はい

## セキュリティに関する考慮事項
<a name="automation-action-deletestack-security"></a>

`aws:deleteStack` アクションを使用できる前に、IAM オートメーションが継承するロールに次のポリシーを割り当てる必要があります。継承ロールの詳細については、「[タスク 1: 自動化のサービスロールを作成する](automation-setup-iam.md#create-service-role)」を参照してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:DeleteStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:executeAutomation` – 別のオートメーションを実行する
<a name="automation-action-executeAutomation"></a>

セカンダリの Runbook を呼び出して、セカンダリのオートメーションを実行します。このアクションを使用すると、最も一般的な操作のための Runbook を作成でき、オートメーションを実行するときにこれらの Runbook を参照できます。このアクションでは、同じような Runbook で重複したステップが不要になり、 Runbook を簡素化できます。

セカンダリのオートメーションは、プライマリのオートメーションを開始したユーザーのコンテキストで実行されます。つまり、セカンダリオートメーションでは、最初のオートメーションを開始したユーザーと同じ AWS Identity and Access Management (IAM) ロールまたはユーザーが使用されます。

**重要**  
継承ロール (iam:passRole ポリシーを使用するロール) を使用するセカンダリオートメーションでパラメータを指定する場合、プライマリオートメーションを開始したユーザーまたはロールには、セカンダリオートメーションで指定されたロールの継承を渡すアクセス許可が必要です。自動化のロールの継承のセットアップについては、「[コンソールを使用して Automation 用のサービスロールを作成する](automation-setup-iam.md)」を参照してください。

**Input** (入力)

------
#### [ YAML ]

```
name: Secondary_Automation
action: aws:executeAutomation
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  DocumentName: secondaryAutomation
  RuntimeParameters:
    instanceIds:
    - i-1234567890abcdef0
```

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

```
{
   "name":"Secondary_Automation",
   "action":"aws:executeAutomation",
   "maxAttempts":3,
   "timeoutSeconds":3600,
   "onFailure":"Abort",
   "inputs":{
      "DocumentName":"secondaryAutomation",
      "RuntimeParameters":{
         "instanceIds":[
            "i-1234567890abcdef0"
         ]
      }
   }
}
```

------

DocumentName  
ステップ中に実行するセカンダリ Runbook の名前。同じ AWS アカウント 内のランブックの場合は、ランブック名を指定します。別の AWS アカウント により共有されたランブックの場合は、ランブックの Amazon リソースネーム (ARN) を指定します。共有ランブックの使用については、「[共有 SSM ドキュメントを使用する](documents-ssm-sharing.md#using-shared-documents)」を参照してください。  
型: 文字列  
必須: はい

DocumentVersion  
実行するセカンダリ Runbook のバージョン。指定しない場合、Automation はデフォルトの Runbook バージョンで実行されます。  
型: 文字列  
必須: いいえ

MaxConcurrency  
並列してこのタスクを実行できるターゲットの最大数。10 などの数値や、10% などの割合を指定できます。  
タイプ: 文字列。  
必須: いいえ

MaxErrors  
追加のターゲットでオートメーションの実行を停止するまでに許容されるエラー数。エラーの絶対数 (10 など) またはターゲットセットのパーセント数 (10% など) を指定できます。たとえば、3 を指定すると、4 番目のエラーを受信した際に、システムはオートメーションの実行を停止します。値として 0 を指定した場合、最初のエラー結果が返されると、システムから他のターゲットでオートメーションが実行されなくなります。50 のリソースでオートメーションを実行し、`MaxErrors` を 10% に設定した場合、6 番目のエラーを受信すると、システムは追加ターゲットでオートメーションの実行を停止します。  
`MaxErrors` のしきい値に達した時点で既に実行中のオートメーションについては完了を許可されますが、一部のオートメーションは失敗する可能性があります。失敗したオートメーションが指定された `MaxErrors` を上回っていないことを確認する必要がある場合は、`MaxConcurrency` を 1 に設定し、オートメーションが一度に 1 つずつ行われるようにします。  
タイプ: 文字列。  
必須: いいえ

RuntimeParameters  
セカンダ Runbook の実行に必要なパラメータ。マッピングでは次の形式を使用します: \$1"parameter1" : "value1", "parameter2" : "value2" \$1  
型: マップ  
必須: いいえ

タグ  
リソースに割り当てるオプションのメタデータ。オートメーション用に最大 5 つのタグを指定できます。  
タイプ: MapList  
必須: いいえ

TargetLocations  
ロケーションとは、オートメーションを実行する AWS リージョン や AWS アカウント の組み合わせです。1 つ以上の項目を指定する必要があります。指定可能な最大数は 100 個です。このパラメータの値を指定すると、出力は親オートメーションには返されません。必要に応じて、子オートメーションから出力を取得するために、API オペレーションを後続で呼び出す必要があります。  
タイプ: MapList  
必須: いいえ

TargetMaps  
ターゲットリソースに対するドキュメントパラメータのキー値マッピングのリスト。`Targets` と `TargetMaps` の両方を一緒に指定することはできません。  
タイプ: MapList  
必須: いいえ

TargetParameterName  
レート制御されたオートメーションのターゲットリソースとして使用されるパラメータの名前。`Targets` を指定する場合は必須です。  
タイプ: 文字列。  
必須: いいえ

ターゲット  
ターゲットリソースへのキー値マッピングのリスト。`TargetParameterName` を指定する場合は必須です。  
タイプ: MapList  
必須: いいえOutput

Output  
セカンダリオートメーションによって生成される出力。この出力は、次の形式を使って参照できます: *セカンダリ自動化ステップ名*.Output  
タイプ: StringList  
以下はその例です。  

```
- name: launchNewWindowsInstance
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: launchWindowsInstance
  nextStep: getNewInstanceRootVolume
- name: getNewInstanceRootVolume
  action: 'aws:executeAwsApi'
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    - Name: attachment.device
      Values:
      - /dev/sda1
    - Name: attachment.instance-id
      Values:
      - '{{launchNewWindowsInstance.Output}}'
  outputs:
  - Name: rootVolumeId
    Selector: '$.Volumes[0].VolumeId'
    Type: String
  nextStep: snapshotRootVolume
- name: snapshotRootVolume
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: AWS-CreateSnapshot
    RuntimeParameters:
    VolumeId:
    - '{{getNewInstanceRootVolume.rootVolumeId}}'
    Description:
    - 'Initial root snapshot for {{launchNewWindowsInstance.Output}}'
```

ExecutionId  
セカンダリオートメーションの ID。  
型: 文字列

ステータス  
セカンダリオートメーションのステータス。  
タイプ: 文字列

# `aws:executeAwsApi` — AWS API オペレーションの呼び出しと実行
<a name="automation-action-executeAwsApi"></a>

AWS API オペレーションを呼び出し、実行します。API 操作のほとんどはサポートされていますが、すべての API オペレーションがテストされているわけではありません。[GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) オペレーションなどのストリーミング API オペレーションはサポートされていません。使用する API オペレーションがストリーミングオペレーションかどうかわからない場合は、サービスの「[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ドキュメントを参照して、API でストリーミング入力または出力が必要かどうかを確認してください。このアクションで使用される Boto3 のバージョンは定期的に更新されます。ただし、新しい Boto3 バージョンのリリース後、変更がこのアクションに反映されるまでに最大で数週間かかる場合があります。各 `aws:executeAwsApi` アクションは、最大 25 秒間実行できます。このアクションの使用例については、「[その他のランブックの例](automation-document-examples.md)」を参照してください。

**注記**  
`aws:executeAwsApi` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**入力**  
入力は、選択した API オペレーションによって定義されます。

------
#### [ YAML ]

```
action: aws:executeAwsApi
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
outputs: # These are user-specified outputs
- Name: The name for a user-specified output key
  Selector: A response object specified by using jsonpath format
  Type: The data type
```

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

```
{
   "action":"aws:executeAwsApi",
   "inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation or method name",
      "API operation inputs or parameters":"A value"
   },
   "outputs":[ These are user-specified outputs
      {
         "Name":"The name for a user-specified output key",
         "Selector":"A response object specified by using JSONPath format",
         "Type":"The data type"
      }
   ]
}
```

------

サービス  
実行する API オペレーションを含む AWS のサービスの名前空間。サポートされている AWS のサービスの名前空間のリストは、AWS SDK for Python (Boto3) の[利用可能なサービス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)を参照してください。名前空間は、[**クライアント**] セクションにあります。例えば、Systems Manager の名前空間は `ssm` です。Amazon Elastic Compute Cloud (Amazon EC2) の名前空間は、`ec2` です。  
型: 文字列  
必須: はい

Api  
実行する API オペレーションの名前。API オペレーション (メソッド) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon Relational Database Service (Amazon RDS) のすべての API オペレーション (メソッド) は、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)のページに一覧表示されます。  
型: 文字列  
必須: はい

API オペレーション入力  
1 つ以上の API オペレーションを入力します。使用できる入力 (パラメータ) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、下にスクロールして、[**DBInstanceIdentifier**]、[**Name (名前)**]、および [**Values (値)**] などの使用可能なパラメータを表示します。  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
型: 選択した API オペレーションによって決まります  
必須: はい

**アウトプット**  
出力は、選択した API オペレーションからの応答に基づいてユーザーによって指定されます。

名前  
出力の名前。  
型: 文字列  
必須: はい

Selector  
応答オブジェクト内の特定の属性への JSONPath。レスポンスオブジェクトは、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、[**Response Structure (レスポンス構造)**] セクションまで下にスクロールします。[**DBInstances**] は応答オブジェクトとして表示されます。  
型: 整数型、ブール型、文字列型、StringList、StringMap、または MapList  
必須: はい

タイプ  
レスポンス要素のデータ型。  
型: 可変  
必須: はい

# `aws:executeScript` – スクリプトを実行する
<a name="automation-action-executeScript"></a>

指定されたランタイムとハンドラを使用して、提供された Python または PowerShell スクリプトを実行します。各 `aws:executeScript` アクションは、最大 600 秒 (10 分) 実行できます。`timeoutSeconds` ステップで `aws:executeScript` パラメータを指定して、タイムアウトを制限または延長することができます。

関数でリターンステートメントを使用して、出力ペイロードに出力を追加します。`aws:executeScript` アクションの出力の定義例については、「[例 2: スクリプト化されたランブック](automation-authoring-runbooks-scripted-example.md)」を参照してください。ランブック内にある `aws:executeScript` アクションからの出力は、指定した Amazon CloudWatch Logs ロググループに送信することもできます。詳しくは、「[CloudWatch Logs を使用した自動アクション出力のログ記録](automation-action-logging.md)」を参照してください。

`aws:executeScript` アクションからの出力を CloudWatch Logs に送信する場合、または `aws:executeScript` アクションに指定するスクリプトが AWS API オペレーションを呼び出す場合、ランブックを実行するには AWS Identity and Access Management (IAM) サービスロール (または引き受けロール) が常に必要です。

**注記**  
`aws:executeScript` アクションは、自動スロットリング再試行をサポートしていません。スロットリングが発生する可能性のある AWS API コールをスクリプトが行う場合は、スクリプトコードに独自の再試行ロジックを実装する必要があります。

`aws:executeScript` アクションには、次のプレインストールされた PowerShell Core モジュールが含まれています。
+ Microsoft.PowerShell.Host
+ Microsoft.PowerShell.Management
+ Microsoft.PowerShell.Security
+ Microsoft.PowerShell.Utility
+ PackageManagement
+ PowerShellGet

プレインストールされていない PowerShell Core モジュールを使用するには、次のコマンドに示すように、スクリプトで `-Force` フラグを使用してモジュールをインストールする必要があります。`AWSPowerShell.NetCore` モジュールはサポートされていません。インストールするモジュールの *ModuleName* を置き換えます。

```
Install-Module ModuleName -Force
```

スクリプトで PowerShell Core コマンドレットを使用するには、次のコマンドに示すように、`AWS.Tools` モジュールを使用することをお勧めします。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。
+ Amazon S3 コマンドレット。

  ```
  Install-Module AWS.Tools.S3 -Force
  Get-S3Bucket -BucketName amzn-s3-demo-bucket
  ```
+ Amazon EC2 コマンドレット。

  ```
  Install-Module AWS.Tools.EC2 -Force
  Get-EC2InstanceStatus -InstanceId instance-id
  ```
+ 共通またはサービスに依存しない AWS Tools for Windows PowerShell コマンドレット。

  ```
  Install-Module AWS.Tools.Common -Force
  Get-AWSRegion
  ```

スクリプトで PowerShell Core コマンドレットを使用するだけでなく、新しいオブジェクトを初期化する場合は、次のコマンドに示すように、モジュールもインポートする必要があります。

```
Install-Module AWS.Tools.EC2 -Force
Import-Module AWS.Tools.EC2

$tag = New-Object Amazon.EC2.Model.Tag
$tag.Key = "Tag"
$tag.Value = "TagValue"

New-EC2Tag -Resource i-02573cafcfEXAMPLE -Tag $tag
```

`AWS.Tools` モジュールのインストールとインポートの例、およびランブックにある PowerShell Core コマンドレットの使用例については、「[オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md)」を参照してください 。

**Input**  
スクリプトを実行するために必要な情報を入力します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

**注記**  
Python スクリプトの添付ファイルは、.py ファイルでも、スクリプトを含む .zip ファイルでもかまいません。PowerShell スクリプトは .zip ファイルに保存する必要があります。

------
#### [ YAML ]

```
action: "aws:executeScript"
inputs: 
 Runtime: runtime
 Handler: "functionName"
 InputPayload: 
  scriptInput: '{{parameterValue}}'
 Script: |-
   def functionName(events, context):
   ...
 Attachment: "scriptAttachment.zip"
```

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

```
{
    "action": "aws:executeScript",
    "inputs": {
        "Runtime": "runtime",
        "Handler": "functionName",
        "InputPayload": {
            "scriptInput": "{{parameterValue}}"
        },
        "Attachment": "scriptAttachment.zip"
    }
}
```

------

ランタイム  
指定されたスクリプトの実行に使用されるランタイム言語。`aws:executeScript` は、次の表のランタイムをサポートします。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-action-executeScript.html)
タイプ: 文字列  
必須: はい  
Python ランタイムの場合、環境は 512MB のメモリと 512MB のディスク容量を提供します。PowerShell ランタイムの場合、環境は 1,024 MB のメモリと 512 MB のディスク容量を提供します。

Handler  
 関数の名前。ハンドラで定義された関数に、`events` と `context` の 2 つのパラメータがあることを確認する必要があります。PowerShell ランタイムはこのパラメータをサポートしていません。  
タイプ: 文字列  
必須: はい (Python) \$1 サポートされていません (PowerShell)

InputPayload  
ハンドラの最初のパラメータに渡される JSON または YAML オブジェクト。これは、スクリプトに入力データを渡すために使用できます。  
型: 文字列  
必須: いいえ  

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
    AutomationAssumeRole:
        type: String
        description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
    InstanceId:
        type: String
        description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: 'aws:executeScript'
    inputs:
        Runtime: "python3.11"
        Handler: tagInstance
        InputPayload:
            instanceId: '{{InstanceId}}'
        Script: |-
          def tagInstance(events,context):
            import boto3

            #Initialize client
            ec2 = boto3.client('ec2')
            instanceId = events['instanceId']
            tag = {
                "Key": "Env",
                "Value": "ExamplePython"
            }
            print(f"Adding tag {tag} to instance id {instanceId}")
            ec2.create_tags(
                Resources=[instanceId],
                Tags=[tag]
            )
            return tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.
  InstanceId:
    type: String
    description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: aws:executeScript
    isEnd: true
    inputs:
      Runtime: PowerShell 7.4
      InputPayload:
        instanceId: '{{InstanceId}}'
      Script: |-
        Install-Module AWS.Tools.EC2 -Force
        Import-Module AWS.Tools.EC2

        $input = $env:InputPayload | ConvertFrom-Json

        $tag = New-Object Amazon.EC2.Model.Tag
        $tag.Key = "Env"
        $tag.Value = "ExamplePowerShell"

        Write-Information "Adding tag key: $($tag.Key) and value: $($tag.Value) to instance id $($input.instanceId)"
        New-EC2Tag -Resource $input.instanceId -Tag $tag

        return $tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

Script  
オートメーションで実行する埋め込みスクリプト。  
タイプ: 文字列  
必須: いいえ (Python) \$1 はい (PowerShell)

Attachment  
アクションによって呼び出すことができるスタンドアロンスクリプトファイルまたは .zip ファイルの名前。`Attachments` のリクエストパラメータで指定したドキュメント添付ファイルの `Name` と同じ値を指定します。詳細については、「AWS Systems Manager API リファレンス」の「[Attachments](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments)」(アタッチメント) を参照してください。アタッチメントを使用してスクリプトを提供する場合は、ランブックのトップレベル要素にある `files` セクションも定義する必要があります。詳しくは、「[スキーマバージョン 0.3](documents-schemas-features.md#automation-doc-syntax-examples)」を参照してください。  
Python 用のファイルを呼び出すには、`filename.method_name` の `Handler` 形式を使用します。  
Python スクリプトの添付ファイルは、.py ファイルでも、スクリプトを含む .zip ファイルでもかまいません。PowerShell スクリプトは .zip ファイルに保存する必要があります。
添付ファイルに Python ライブラリを含める場合は、各モジュールディレクトリに空の `__init__.py` ファイルを追加することをお勧めします。これにより、スクリプトコンテンツ内の添付ファイルのライブラリからモジュールをインポートできます。例: `from library import module`  
型: 文字列  
必須: いいえOutput

ペイロード  
関数によって返されるオブジェクトの JSON 形式です。最大 100KB が返されます。リストを出力する場合、最大 100 個の項目が返されます。

## aws:executeScript でアタッチメントを使用する
<a name="automation-action-executeScript-attachments"></a>

アタッチメントは、複雑なスクリプト、複数のモジュール、外部の依存関係を `aws:executeScript` アクションでパッケージ化して再利用する強力な方法を提供します。次を行う必要がある場合は、アタッチメントを使用します。
+ 複数の Python モジュールまたは PowerShell スクリプトを一緒にパッケージ化する。
+ 複数のランブックで同じスクリプトロジックを再利用する。
+ スクリプトに外部ライブラリまたは依存関係を含める。
+ 複雑なスクリプトロジックを分離してランブック定義をクリーンに保つ。
+ 複数のチームまたは自動化ワークフロー間でスクリプトパッケージを共有する。

### アタッチメントの構造とパッケージ化
<a name="automation-action-executeScript-attachment-structure"></a>

単一のファイルまたは複数のファイルを含む zip パッケージをアタッチできます。構造はユースケースに応じて異なります。

**単一ファイルのアタッチメント**  
シンプルなスクリプトの場合、単一の `.py` ファイル (Python) または単一の PowerShell スクリプトを含む `.zip` ファイルをアタッチできます。

**マルチモジュールパッケージ**  
複数のモジュールを必要とする複雑な自動化の場合は、次の推奨構造で zip パッケージを作成します。

```
my-automation-package.zip
├── main.py                    # Entry point script
├── utils/
│   ├── __init__.py           # Required for Python module imports
│   ├── helper_functions.py   # Utility functions
│   └── aws_operations.py     # AWS-specific operations
├── config/
│   ├── __init__.py
│   └── settings.py           # Configuration settings
└── requirements.txt          # Optional: document dependencies
```

**重要**  
Python パッケージの場合、Python モジュールを含む各ディレクトリに空の `__init__.py` ファイルを含める必要があります。これにより、`from utils import helper_functions` のような標準の Python インポート構文を使用してモジュールをインポートできます。

**PowerShell パッケージの構造**  
PowerShell アタッチメントは、次の構造で zip ファイルにパッケージ化する必要があります。

```
my-powershell-package.zip
├── Main.ps1                  # Entry point script
├── Modules/
│   ├── HelperFunctions.ps1   # Utility functions
│   └── AWSOperations.ps1     # AWS-specific operations
└── Config/
    └── Settings.ps1          # Configuration settings
```

### アタッチメントを含むランブックを作成する
<a name="automation-action-executeScript-attachment-workflow"></a>

アタッチメントを使用するランブックを作成するには、次の手順に従います。

1. **Amazon S3 にアタッチメントをアップロードします**

   自動化ロールがアクセスできる S3 バケットにスクリプトファイルまたは zip パッケージをアップロードします。後のステップで使用するために S3 の URI を記録します。

   ```
   aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
   ```

1. **アタッチメントチェックサムを計算します**

   セキュリティ検証のためにアタッチメントファイルの SHA-256 チェックサムを計算します。

   ```
   # Linux/macOS
   shasum -a 256 my-automation-package.zip
   
   # Windows PowerShell
   Get-FileHash -Algorithm SHA256 my-automation-package.zip
   ```

1. **ランブックのファイルセクションを定義します**

   ランブックの最上位に `files` セクションを追加してアタッチメントを参照します。

   ```
   files:
     my-automation-package.zip:
       checksums:
         sha256: "your-calculated-checksum-here"
   ```

1. **executeScript ステップでアタッチメントを参照します**

   `Attachment` パラメータを使用して、アップロードしたファイルを参照します。

   ```
   - name: runMyScript
     action: aws:executeScript
     inputs:
       Runtime: python3.11
       Handler: main.process_data
       Attachment: my-automation-package.zip
       InputPayload:
         inputData: "{{InputParameter}}"
   ```

## aws:executeScript アタッチメントの例
<a name="automation-action-executeScript-examples"></a>

次の例は、`aws:executeScript` アクションでアタッチメントを使用するさまざまな方法を示します。

### 例 1: 単一ファイルのアタッチメント
<a name="automation-action-executeScript-single-file-example"></a>

この例では、単一の Python ファイルをアタッチメントとして使用して EC2 インスタンスデータを処理する方法を示します。

**アタッチメントファイル: process\$1instance.py**  
以下のコンテンツを含む Python ファイルを作成します。

```
import boto3
import json

def process_instance_data(events, context):
    """Process EC2 instance data and return formatted results."""
    try:
        instance_id = events.get('instanceId')
        if not instance_id:
            raise ValueError("instanceId is required")
        
        ec2 = boto3.client('ec2')
        
        # Get instance details
        response = ec2.describe_instances(InstanceIds=[instance_id])
        instance = response['Reservations'][0]['Instances'][0]
        
        # Format the response
        result = {
            'instanceId': instance_id,
            'instanceType': instance['InstanceType'],
            'state': instance['State']['Name'],
            'availabilityZone': instance['Placement']['AvailabilityZone'],
            'tags': {tag['Key']: tag['Value'] for tag in instance.get('Tags', [])}
        }
        
        print(f"Successfully processed instance {instance_id}")
        return result
        
    except Exception as e:
        print(f"Error processing instance: {str(e)}")
        raise
```

**完全なランブック**  
単一のファイルアタッチメントを使用する完全なランブックを次に示します。

```
description: Process EC2 instance data using single file attachment
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) IAM role for automation execution
  InstanceId:
    type: String
    description: (Required) EC2 instance ID to process

files:
  process_instance.py:
    checksums:
      sha256: "abc123def456..."

mainSteps:
  - name: processInstance
    action: aws:executeScript
    inputs:
      Runtime: python3.11
      Handler: process_instance.process_instance_data
      Attachment: process_instance.py
      InputPayload:
        instanceId: '{{InstanceId}}'
    outputs:
      - Type: StringMap
        Name: InstanceData
        Selector: $.Payload

outputs:
  - processInstance.InstanceData
```

### 例 2: マルチモジュールパッケージ
<a name="automation-action-executeScript-multi-module-example"></a>

この例では、複雑な S3 バケットオペレーションで複数の Python モジュールを含む zip パッケージを使用する方法を示します。

**パッケージ構造**  
次の構造で zip パッケージを作成します。

```
s3-operations.zip
├── main.py
├── utils/
│   ├── __init__.py
│   ├── s3_helper.py
│   └── validation.py
└── config/
    ├── __init__.py
    └── settings.py
```

**main.py (エントリポイント)**  
オペレーションをオーケストレーションするメインスクリプト:

```
from utils.s3_helper import S3Operations
from utils.validation import validate_bucket_name
from config.settings import get_default_settings

def cleanup_s3_bucket(events, context):
    """Clean up S3 bucket based on specified criteria."""
    try:
        bucket_name = events.get('bucketName')
        max_age_days = events.get('maxAgeDays', 30)
        
        # Validate inputs
        if not validate_bucket_name(bucket_name):
            raise ValueError(f"Invalid bucket name: {bucket_name}")
        
        # Initialize S3 operations
        s3_ops = S3Operations()
        settings = get_default_settings()
        
        # Perform cleanup
        deleted_objects = s3_ops.delete_old_objects(
            bucket_name, 
            max_age_days,
            settings['dry_run']
        )
        
        result = {
            'bucketName': bucket_name,
            'deletedCount': len(deleted_objects),
            'deletedObjects': deleted_objects[:10],  # Return first 10 for brevity
            'dryRun': settings['dry_run']
        }
        
        print(f"Cleanup completed for bucket {bucket_name}")
        return result
        
    except Exception as e:
        print(f"Error during S3 cleanup: {str(e)}")
        raise
```

## aws:executeScript アタッチメントのトラブルシューティング
<a name="automation-action-executeScript-troubleshooting"></a>

`aws:executeScript` アタッチメントに関する一般的な問題を解決するには、次のガイダンスを使用してください。

**モジュールのインポートエラー**  
マルチモジュールパッケージの使用時にインポートエラーが発生した場合:
+ Python モジュールを含む各ディレクトリに空の `__init__.py` ファイルが含まれていることを確認します。
+ インポートステートメントが zip パッケージの実際のファイルとディレクトリ構造と一致していることを確認します。
+ 相対インポート (`from .utils import helper` など) または絶対インポート (`from utils import helper` など) を一貫して使用します。

**アタッチメントが見つからないエラー**  
オートメーションでアタッチメントが見つからない場合:
+ `Attachment` パラメータ値が `files` セクションのキーに正確に一致することを確認します。
+ `files` セクションの S3 バケットパスとファイル名が正しいことを確認します。
+ 自動化ロールにアタッチメント S3 の場所に対する `s3:GetObject` アクセス許可があることを確認します。
+ ランブックのチェックサムが実際のファイルチェックサムと一致することを確認します。

**ハンドラー関数のエラー**  
ハンドラー関連のエラーが発生した場合:
+ Python の場合: `Handler` パラメータで `filename.function_name` の形式を使用します (`main.process_data` など)。
+ ハンドラー関数が `events` と `context` の 2 つのパラメータのみを受け入れることを確認します。
+ PowerShell の場合: `Handler` パラメータを指定しないでください。スクリプトは直接実行します。

**スクリプト実行の失敗**  
実行中にスクリプトが失敗した場合:
+ 詳細なエラーメッセージとスタックトレースのオートメーション実行履歴を確認します。
+ `print()` ステートメント (Python) または `Write-Information` (PowerShell) を使用してデバッグ出力を追加します。
+ 必要なすべての AWS アクセス許可が自動化ロールに付与されていることを確認します。
+ アタッチメントとしてパッケージ化する前にスクリプトロジックをローカルでテストします。

**終了コードとエラー処理**  
エラーを適切に処理して終了コードを返すには:
+ Python の場合: `raise Exception("error message")` を使用してスクリプトの失敗を示します。
+ PowerShell の場合: `throw "error message"` または `Write-Error` を使用して失敗を示します。
+ 関数から構造化データを返し、詳細な成功/失敗情報を提供します。
+ try-catch ブロックを使用して例外を適切に処理し、意味のあるエラーメッセージを提供します。

# `aws:executeStateMachine` – AWS Step Functions ステートマシンを実行する
<a name="automation-action-executeStateMachine"></a>

AWS Step Functions ステートマシンを実行します。

**注記**  
`aws:executeStateMachine` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input** (入力)

このアクションでは、Step Functions [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) API オペレーションのほとんどのパラメータがサポートされています。

**必要な AWS Identity and Access Management (IAM) アクセス許可**
+ `states:DescribeExecution`
+ `states:StartExecution`
+ `states:StopExecution`

------
#### [ YAML ]

```
name: executeTheStateMachine
action: aws:executeStateMachine
inputs:
  stateMachineArn: StateMachine_ARN
  input: '{"parameters":"values"}'
  name: name
```

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

```
{
    "name": "executeTheStateMachine",
    "action": "aws:executeStateMachine",
    "inputs": {
        "stateMachineArn": "StateMachine_ARN",
        "input": "{\"parameters\":\"values\"}",
        "name": "name"
    }
}
```

------

stateMachineArn  
Step Functions ステートマシンの Amazon Resource Name (ARN)。  
型: 文字列  
必須: はい

name  
実行の名前。  
型: 文字列  
必須: いいえ

input  
実行に必要な JSON 入力データを含む文字列。  
型: 文字列  
必須: いいえ

**アウトプット**  
このアクションでは、以下の出力が事前に定義されています。

executionArn  
実行の ARN。  
タイプ: 文字列

input  
実行の入力データ (JSON) を含む文字列。このデータ長は、ペイロードのサイズにより制約を受け、UTF-8 エンコーディングによりバイト数で表現されます。  
タイプ: 文字列

名前  
実行の名前。  
タイプ: 文字列

output  
実行の出力データ (JSON)。このデータ長は、ペイロードのサイズにより制約を受け、UTF-8 エンコーディングによりバイト数で表現されます。  
タイプ: 文字列

startDate  
実行が開始された日付。  
タイプ: 文字列

stateMachineArn  
実行されたステートマシンの ARN。  
タイプ: 文字列

ステータス  
実行に関する現在の状態。  
タイプ: 文字列

stopDate  
実行がすでに終了している場合の、その実行が停止した日付。  
タイプ: 文字列

# `aws:invokeWebhook` – オートメーションのウェブフック統合を呼び出す
<a name="invoke-webhook"></a>

オートメーションでウェブフック統合を指定して呼び出します。オートメーションのランブックの作成については、「[Automation 向けのウェブフック統合の作成](creating-webhook-integrations.md)」を参照してください。

**注記**  
`aws:invokeWebhook` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**注記**  
`aws:invokeWebhook` アクションを使用するには、ユーザーまたはサービスロールが、以下のアクションを許可している必要があります。  
ssm:GetParameter
kms:Decrypt
AWS Key Management Service (AWS KMS) `Decrypt` オペレーションに対するアクセス許可が必要になるのは、カスタマー管理キーを使用して統合のパラメータを暗号化する場合のみです。

**Input**  
呼び出すオートメーション統合の情報を入力します。

------
#### [ YAML ]

```
action: "aws:invokeWebhook"
inputs: 
 IntegrationName: "exampleIntegration"
 Body: "Request body"
```

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

```
{
    "action": "aws:invokeWebhook",
    "inputs": {
        "IntegrationName": "exampleIntegration",
        "Body": "Request body"
    }
}
```

------

IntegrationName  
オートメーション統合の名前。例えば、`exampleIntegration`。指定できるのは、既に存在している統合のみです。  
タイプ: 文字列。  
必須: はい

[Body] (本文)  
ウェブフック統合が呼び出された際に送信するペイロード。  
タイプ: 文字列。  
必須: いいえOutput

応答  
ウェブフックプロバイダーの応答から受信したテキスト。

ResponseCode  
ウェブフックプロバイダーの応答から受信した HTTP ステータスコード。

# `aws:invokeLambdaFunction` – AWS Lambda 関数を呼び出す
<a name="automation-action-lamb"></a>

指定した AWS Lambda 関数を呼び出します。

**注記**  
各 `aws:invokeLambdaFunction` アクションは、最大 300 秒 (5 分) 実行できます。`timeoutSeconds` ステップで `aws:invokeLambdaFunction` パラメータを指定して、タイムアウトを制限または延長することができます。

**注記**  
`aws:invokeLambdaFunction` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは、Lambda サービスのほとんどの呼び出しパラメータがサポートされています。詳細については、「[起動](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)」を参照してください。

------
#### [ YAML ]

```
name: invokeMyLambdaFunction
action: aws:invokeLambdaFunction
maxAttempts: 3
timeoutSeconds: 120
onFailure: Abort
inputs:
  FunctionName: MyLambdaFunction
```

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

```
{
    "name": "invokeMyLambdaFunction",
    "action": "aws:invokeLambdaFunction",
    "maxAttempts": 3,
    "timeoutSeconds": 120,
    "onFailure": "Abort",
    "inputs": {
        "FunctionName": "MyLambdaFunction"
    }
}
```

------

FunctionName  
Lambda 関数の名前。必須の関数です。  
型: 文字列  
必須: はい

Qualifier  
関数のバージョンまたはエイリアス名。  
型: 文字列  
必須: いいえ

InvocationType  
呼び出しタイプ。デフォルト値は `RequestResponse` です。  
型: 文字列  
有効な値: `Event` \$1 `RequestResponse` \$1 `DryRun`  
必須: いいえ

LogType  
デフォルト値が `Tail` の場合、呼び出しタイプは `RequestResponse` である必要があります。Lambda は、Lambda 関数で生成されたログデータの最後の 4 KB を base64 でエンコードして返します。  
型: 文字列  
有効な値: `None` \$1 `Tail`  
必須: いいえ

ClientContext  
クライアント固有の情報。  
必須: いいえ

InputPayload  
ハンドラの最初のパラメータに渡される JSON または YAML オブジェクト。この入力を使用して、関数にデータを渡すことができます。この入力は、従来の `Payload` 入力よりもより高い柔軟性とサポート性を提供します。アクションで `InputPayload` と `Payload` の両方を定義する場合、`InputPayload` が優先され、`Payload` 値は使用されません。  
型: StringMap  
必須: いいえ

ペイロード  
ハンドラの最初のパラメータに渡される JSON 文字列。これを使用して、関数に入力データを渡すことができます。追加機能では `InputPayload` 入力を使用することをお勧めします。  
タイプ: 文字列  
必須: いいえOutput

StatusCode  
HTTP ステータスコード

FunctionError  
エラーが存在する場合、関数の実行中にエラーが発生したことを示します。エラーの詳細は、レスポンスペイロードに含まれています。

LogResult  
Lambda 関数の呼び出しに対して base64 でエンコードされたログ。ログが存在するのは、呼び出しタイプが `RequestResponse` で、ログがリクエストされた場合のみです。

Payload  
Lambda 関数によって返されるオブジェクトの JSON 形式。ペイロードは、呼び出しタイプが `RequestResponse` の場合にのみ存在します。

以下は、`aws:invokeLambdaFunction` アクションから出力を参照する方法を示した `AWS-PatchInstanceWithRollback` ランブックの一部です。

------
#### [ YAML ]

```
- name: IdentifyRootVolume
  action: aws:invokeLambdaFunction
  inputs:
    FunctionName: "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}"
    Payload: '{"InstanceId": "{{InstanceId}}"}'
- name: PrePatchSnapshot
  action: aws:executeAutomation
  inputs:
    DocumentName: "AWS-CreateSnapshot"
    RuntimeParameters:
      VolumeId: "{{IdentifyRootVolume.Payload}}"
      Description: "ApplyPatchBaseline restoration case contingency"
```

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

```
{
    "name": "IdentifyRootVolume",
    "action": "aws:invokeLambdaFunction",
    "inputs": {
      "FunctionName": "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}",
      "Payload": "{\"InstanceId\": \"{{InstanceId}}\"}"
    }
  },
  {
    "name": "PrePatchSnapshot",
    "action": "aws:executeAutomation",
    "inputs": {
      "DocumentName": "AWS-CreateSnapshot",
      "RuntimeParameters": {
        "VolumeId": "{{IdentifyRootVolume.Payload}}",
        "Description": "ApplyPatchBaseline restoration case contingency"
      }
    }
  }
```

------

# `aws:loop` — オートメーション内のステップを反復処理します。
<a name="automation-action-loop"></a>

このアクションは、オートメーションランブック内のステップのサブセットを反復処理します。`do while` または `for each` スタイルループを選択できます。`do while` ループを作成するには、`LoopCondition` 入力パラメーターを使用します。`for each` ループを作成するには、`Iterators` と `IteratorDataType` 入力パラメーターを使用します。`aws:loop` アクションを使用するときは、`Iterators` または `LoopCondition` 入力パラメータのみを指定してください。最大反復回数は 100 です。

`onCancel` プロパティを使用できるのは、ループ内で定義されたステップのみです。`onCancel` プロパティは `aws:loop` アクションではサポートされていません。`aws:loop` アクションに `onFailure` プロパティを使用することはできますが、これが使用されるのは、ステップを失敗させる予期しないエラーが発生した場合のみです。ループ内のステップに `onFailure` プロパティを定義すると、`aws:loop` アクションがこれらのプロパティを継承し、失敗した場合に適切に対応します。

**例**  
さまざまなタイプのループアクションの作成方法の例を以下に示します。

------
#### [ do while ]

```
name: RepeatMyLambdaFunctionUntilOutputIsReturned
action: aws:loop
inputs:
    Steps:
    - name: invokeMyLambda
        action: aws:invokeLambdaFunction
        inputs:
        FunctionName: LambdaFunctionName
        outputs:
        - Name: ShouldRetry
            Selector: $.Retry
            Type: Boolean
    LoopCondition:
        Variable: "{{ invokeMyLambda.ShouldRetry }}"
        BooleanEquals: true
    MaxIterations: 3
```

------
#### [ for each ]

```
name: stopAllInstancesWithWaitTime
action: aws:loop
inputs:
    Iterators: "{{ DescribeInstancesStep.InstanceIds }}"
    IteratorDataType: "String"
    Steps:
    - name: stopOneInstance
        action: aws:changeInstanceState
        inputs:
        InstanceIds:
            - "{{stopAllInstancesWithWaitTime.CurrentIteratorValue}}"
        CheckStateOnly: false
        DesiredState: stopped
    - name: wait10Seconds
        action: aws:sleep
        inputs:
        Duration: PT10S
```

------

**Input**  
入力は次のとおりです。

イテレーター  
ステップを反復処理する項目のリスト。最大反復回数は 100 です。  
タイプ: StringList  
必須: いいえ

イテレータ/データタイプ  
`Iterators` のデータ型を指定するオプションのパラメータ。このパラメータの値は、`Iterators` 入力パラメータとともに提供できます。このパラメータ値と `Iterators` を指定しない場合、`LoopCondition` パラメータ値を指定する必要があります。  
タイプ: 文字列  
有効な値: ブール値 \$1 整数 \$1 文字列 \$1 StringMap  
デフォルト: 文字列  
必須: いいえ

ループ条件  
`Variable` と評価する演算子条件で構成されます。このパラメータ値を指定しない場合、`Iterators` と `IteratorDataType` パラメータ値を指定する必要があります。`And`、`Not` と `Or` 演算子の組み合わせを使用して、複雑な演算子の評価を使用できます。条件はループ内のステップが完了した後に評価されます。条件が `true` で、`MaxIterations` 値に達していない場合は、ループ内のステップが再び実行されます。オペレータの条件は以下のとおりです。  

**文字列演算子**
+ StringEquals
+ EqualsIgnoreCase
+ StartsWith
+ EndsWith
+ Contains

**数値演算子**
+ NumericEquals
+ NumericGreater
+ NumericLesser
+ NumericGreaterOrEquals
+ NumericLesser
+ NumericLesserOrEquals

**ブール演算子**
+ BooleanEquals
型: StringMap  
必須: いいえ

最大反復回数  
ループ内のステップの最大実行回数。この入力に指定された値に達すると、`LoopCondition` が `true` でも、または `Iterators` パラメータにオブジェクトが残っていても、ループの実行は停止します。  
タイプ: 整数  
有効な値: 1～100  
必須: いいえ

Steps  
ループで実行するステップのリスト。これらはネストされたランブックのように機能します。これらのステップでは、`{{loopStepName.CurrentIteratorValue}}` 構文を使用して `for each` ループの現在のイテレーター値にアクセスできます。`{{loopStepName.CurrentIteration}}` 構文を使用して、両方のループタイプの現在の反復の整数値にアクセスすることもできます。  
タイプ: ステップのリスト  
必須: はいOutput

CurrentIteration  
現在のループ反復を整数で表したもの。反復値は 1 から始まります。  
タイプ: 整数

現在のイテレータ値  
現在のイテレータの値を文字列で表したもの。この出力は `for each` ループ内にのみ存在します。  
タイプ: 文字列

# `aws:pause` – オートメーションを一時停止する
<a name="automation-action-pause"></a>

このアクションは、オートメーションを一時停止します。一時停止されると、オートメーションのステータスは [*待機中*] になります。オートメーションを続行するには、`Resume` シグナルタイプの [SendAutomationSignal](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendAutomationSignal.html) API オペレーションを使用します。ワークフローをよりきめ細かく制御する場合、`aws:sleep` または `aws:approve` アクションを使用することをお勧めします。

**注記**  
このアクションのデフォルトのタイムアウトは 7 日間 (604800 秒) で、最大値は 30 日間 (2592000 秒) です。`timeoutSeconds` ステップで `aws:pause` パラメータを指定して、タイムアウトを制限または延長することができます。

**Input**  
入力は次のとおりです。

------
#### [ YAML ]

```
name: pauseThis
action: aws:pause
timeoutSeconds: 1209600
inputs: {}
```

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

```
{
    "name": "pauseThis",
    "action": "aws:pause",
    "timeoutSeconds": "1209600",
    "inputs": {}
}
```

------Output

なし  


# `aws:runCommand` – マネージドインスタンスでコマンドを実行する
<a name="automation-action-runcommand"></a>

指定されたコマンドを実行します。

**注記**  
オートメーションは、1 つの AWS Systems Manager Run Command アクションの*Output*のみをサポートします。Runbook には、複数の Run Command アクションを含めることができますが、Output がサポートされるのは一度に 1 つのアクションに対してのみです。

**Input**  
このアクションでは、ほとんどの Send Command Parameters がサポートされています。詳細については、「[SendCommand](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html)」を参照してください。

------
#### [ YAML ]

```
- name: checkMembership
  action: 'aws:runCommand'
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - '{{InstanceIds}}'
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

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

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

------

DocumentName  
コマンドタイプドキュメントの所有者が、お客様または AWS の場合は、ドキュメントの名前を指定します。別の AWS アカウント から共有されたドキュメントを使用している場合は、そのドキュメントの Amazon リソースネーム (ARN) を指定します。共有ドキュメントの使用方法については、「[共有 SSM ドキュメントを使用する](documents-ssm-sharing.md#using-shared-documents)」を参照してください。  
型: 文字列  
必須: はい

InstanceIds  
コマンドを実行するインスタンス ID です。最大 50 の ID を指定できます。  
インスタンス ID の代わりに擬似パラメータ `{{RESOURCE_ID}}` を使用して、ターゲットグループ内のすべてのインスタンスでコマンドを実行することもできます。疑似 Parameters の詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。  
他に、`Targets` パラメータを使用して、コマンドをインスタンスのフリートに送信する方法もあります。`Targets` パラメータは、Amazon Elastic Compute Cloud (Amazon EC2) タグを受け入れます。`Targets` パラメータの使用方法の詳細については、「[コマンドを大規模に実行する](send-commands-multiple.md)」を参照してください。  
タイプ: StringList  
必須: いいえ (InstanceId を指定しない場合、または `{{RESOURCE_ID}}` 擬似パラメータを使用する場合は、`Targets` パラメータを指定する必要があります)。

Targets  
指定した Key、Value の組み合わせを使用してインスタンスを対象とする検索条件の配列です。呼び出しにインスタンス ID を 1 つも指定しない場合は、`Targets` が必要です。`Targets` パラメータの使用方法の詳細については、「[コマンドを大規模に実行する](send-commands-multiple.md)」を参照してください。  
タイプ: MapList (リスト内のマップのスキーマはオブジェクトと一致する必要があります)。詳細については、*AWS Systems Manager API リファレンス*の「[ターゲット](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_Target.html)」を参照してください。  
必須: いいえ (`Targets` を指定しない場合は、InstanceId を指定するか、`{{RESOURCE_ID}}` 擬似パラメータを使用する必要があります)。  
次に例を示します。  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    Targets:
      - Key: tag:Stage
        Values:
          - Gamma
          - Beta
      - Key: tag-key
        Values:
          - Suite
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "Targets": [                   
            {
                "Key": "tag:Stage",
                "Values": [
                    "Gamma", "Beta"
                ]
            },
            {
                "Key": "tag:Application",
                "Values": [
                    "Suite"
                ]
            }
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

Parameters  
ドキュメントに指定されている必須およびオプションの Parameters。  
型: マップ  
必須: いいえ

CloudWatchOutputConfig  
Amazon CloudWatch Logs にコマンド Output を送信するための設定オプション。CloudWatch Logs への Command Output 送信の詳細については、「[Run Command の Amazon CloudWatch Logs の設定](sysman-rc-setting-up-cwlogs.md)」を参照してください。  
タイプ: StringMap (マップのスキーマはオブジェクトと一致する必要があります。詳細については、*AWS Systems Manager API リファレンス*の「[CloudWatchOutputConfig](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CloudWatchOutputConfig.html)」を参照してください)。  
必須: いいえ  
次に例を示します。  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - "{{InstanceIds}}"
    Parameters:
      commands:
        - "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
    CloudWatchOutputConfig:
      CloudWatchLogGroupName: CloudWatchGroupForSSMAutomationService
      CloudWatchOutputEnabled: true
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        },
        "CloudWatchOutputConfig" : { 
                "CloudWatchLogGroupName": "CloudWatchGroupForSSMAutomationService",
                "CloudWatchOutputEnabled": true
        }
    }
}
```

Comment  
コマンドに関するユーザー定義情報。  
型: 文字列  
必須: いいえ

DocumentHash  
ドキュメントのハッシュ。  
型: 文字列  
必須: いいえ

DocumentHashType  
ハッシュの種類。  
型: 文字列  
有効な値: `Sha256` \$1 `Sha1`  
必須: いいえ

NotificationConfig  
通知を送信するための設定。  
必須: いいえ

OutputS3BucketName  
Command Output の応答を保存する S3 バケットの名前。マネージドノードには、S3 バケットが Output を正常にログに記録するためのアクセス許可が必要です。  
タイプ: 文字列  
必須: いいえ

OutputS3KeyPrefix  
プレフィックス。  
型: 文字列  
必須: いいえ

ServiceRoleArn  
AWS Identity and Access Management (IAM) ロールの ARN。  
型: 文字列  
必須: いいえ

TimeoutSeconds  
インスタンスの AWS Systems Manager SSM Agent にコマンドが配信されるまで待機する時間 (秒単位)。指定した値に達する前にインスタンスで SSM Agent が Command を受信しなかった場合、Command の Status は `Delivery Timed Out` に変わります。  
タイプ: 整数  
必須: いいえ  
有効な値: 30～2592000Output

CommandId  
コマンドの ID。

Status  
Command の Status。

ResponseCode  
コマンドのレスポンスコード。実行するドキュメントに複数のステップがある場合、この Output の値は返されません。

Output  
Command の Output。Command でタグまたは複数のインスタンスをターゲットにした場合、Output 値は返されません。`GetCommandInvocation` および `ListCommandInvocations` API オペレーションを使用して、個々のインスタンスの Output を取得できます。

# `aws:runInstances` – Amazon EC2 インスタンスの起動
<a name="automation-action-runinstance"></a>

新しい Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。

**注記**  
`aws:runInstances` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
このアクションでは、ほとんどの API パラメータがサポートされています。詳細については、[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API ドキュメントを参照してください。

------
#### [ YAML ]

```
name: launchInstance
action: aws:runInstances
maxAttempts: 3
timeoutSeconds: 1200
onFailure: Abort
inputs:
  ImageId: ami-12345678
  InstanceType: t2.micro
  MinInstanceCount: 1
  MaxInstanceCount: 1
  IamInstanceProfileName: myRunCmdRole
  TagSpecifications:
  - ResourceType: instance
    Tags:
    - Key: LaunchedBy
      Value: SSMAutomation
    - Key: Category
      Value: HighAvailabilityFleetHost
```

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

```
{
   "name":"launchInstance",
   "action":"aws:runInstances",
   "maxAttempts":3,
   "timeoutSeconds":1200,
   "onFailure":"Abort",
   "inputs":{
      "ImageId":"ami-12345678",
      "InstanceType":"t2.micro",
      "MinInstanceCount":1,
      "MaxInstanceCount":1,
      "IamInstanceProfileName":"myRunCmdRole",
      "TagSpecifications":[
         {
            "ResourceType":"instance",
            "Tags":[
               {
                  "Key":"LaunchedBy",
                  "Value":"SSMAutomation"
               },
               {
                  "Key":"Category",
                  "Value":"HighAvailabilityFleetHost"
               }
            ]
         }
      ]
   }
}
```

------

AdditionalInfo  
リザーブド。  
型: 文字列  
必須: いいえ

BlockDeviceMappings  
インスタンスのブロックデバイス。  
型: MapList  
必須: いいえ

ClientToken  
リクエストの多重実行を禁止するための識別子。  
型: 文字列  
必須: いいえ

DisableApiTermination  
インスタンス API の終了をオンまたはオフにします。  
タイプ: ブール値  
必須: いいえ

EbsOptimized  
Amazon Elastic Block Store (Amazon EBS) 最適化をオンまたはオフにします。  
タイプ: ブール値  
必須: いいえ

IamInstanceProfileArn  
インスタンスの AWS Identity and Access Management (IAM) インスタンスプロファイルの Amazon リソースネーム (ARN)。  
型: 文字列  
必須: いいえ

IamInstanceProfileName  
インスタンスの IAM インスタンスプロファイルの名前。  
型: 文字列  
必須: いいえ

ImageId  
Amazon Machine Image (AMI) の ID。  
型: 文字列  
必須: はい

InstanceInitiatedShutdownBehavior  
システムのシャットダウン時にインスタンスを停止するか終了するかを示します。  
型: 文字列  
必須: いいえ

InstanceType  
インスタンスタイプ。  
インスタンスタイプの値が指定されていない場合は、インスタンスタイプ m1.small を使用します。
型: 文字列  
必須: いいえ

KernelId  
カーネルの ID。  
型: 文字列  
必須: いいえ

KeyName  
キーペアの名前。  
型: 文字列  
必須: いいえ

MaxInstanceCount  
起動するインスタンスの最大数。  
型: 文字列  
必須: いいえ

MetadataOptions  
インスタンスのメタデータオプション。詳細については、「[InstanceMetadataOptionsRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceMetadataOptionsRequest.html)」を参照してください。  
型: StringMap  
必須: いいえ

MinInstanceCount  
起動するインスタンスの最小数。  
型: 文字列  
必須: いいえ

Monitoring  
詳細モニタリングをオンまたはオフにします。  
タイプ: ブール値  
必須: いいえ

NetworkInterfaces  
ネットワークインターフェイス。  
型: MapList  
必須: いいえ

Placement  
インスタンスのプレイスメント。  
型: StringMap  
必須: いいえ

PrivateIpAddress  
プライマリ IPv4 アドレス。  
型: 文字列  
必須: いいえ

RamdiskId  
RAM ディスクの ID。  
型: 文字列  
必須: いいえ

SecurityGroupIds  
インスタンスのセキュリティグループの ID。  
タイプ: StringList  
必須: いいえ

SecurityGroups  
インスタンスのセキュリティグループの名前。  
タイプ: StringList  
必須: いいえ

SubnetId  
サブネット ID。  
型: 文字列  
必須: いいえ

TagSpecifications  
タグは、起動中のリソースに適用されます。起動時にインスタンスとボリュームにのみタグを付けることができます。指定されたタグは、すべてのインスタンス、または起動時に作成されたボリュームに適用されます。インスタンスを起動した後にタグを付けるには、[`aws:createTags` – AWS リソースのタグを作成する](automation-action-createtag.md) アクションを使用します。  
タイプ: MapList (詳細については、「[TagSpecification](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TagSpecification.html)」を参照してください)。  
必須: いいえ

UserData  
文字列リテラル値として渡されるスクリプト。リテラル値を入力する場合、Base64 エンコードである必要があります。  
型: 文字列  
必須: いいえOutput

InstanceIds  
インスタンスの ID。

InstanceStates  
インスタンスの現在の状態。

# `aws:sleep` – オートメーションを遅らせる
<a name="automation-action-sleep"></a>

特定の時間数のオートメーションの遅延。このアクションは、国際標準化機構 (ISO) 8601 に日付と時刻形式を使用します。日付と時刻形式の詳細については、「[ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)」を参照してください。

**Input**  
指定する時間でオートメーションを遅延することができます。

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Duration: PT10M
```

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

```
{
   "name":"sleep",
   "action":"aws:sleep",
   "inputs":{
      "Duration":"PT10M"
   }
}
```

------

また、指定された日付や時間までオートメーションを遅延することもできます。指定した日付と時刻が経過すると、アクションはすぐに処理されます。

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Timestamp: '2020-01-01T01:00:00Z'
```

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

```
{
    "name": "sleep",
    "action": "aws:sleep",
    "inputs": {
        "Timestamp": "2020-01-01T01:00:00Z"
    }
}
```

------

**注記**  
自動化は、最大で 604,799 秒 (7 日間) までの遅延をサポートします。

時間  
ISO 8601 の時間。負の時間を指定することはできません。  
型: 文字列  
必須: いいえ

タイムスタンプ  
ISO 8601 のタイムスタンプ。このパラメータ値を指定しない場合、`Duration` パラメータ値を指定する必要があります。  
型: 文字列  
必須: いいえOutput

なし  


# `aws:updateVariable` — ランブック変数の値を更新します。
<a name="automation-action-update-variable"></a>

このアクションはランブック変数の値を更新します。値のデータ型は、更新元となる可変のデータ型に一致する必要があります。データ型変換はサポートされていません。`onCancel` プロパティは `aws:updateVariable` アクションではサポートされていません。

**Input**  
入力は次のとおりです。

------
#### [ YAML ]

```
name: updateStringList
action: aws:updateVariable
inputs:
    Name: variable:variable name
    Value:
    - "1"
    - "2"
```

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

```
{
    "name": "updateStringList",
    "action": "aws:updateVariable",
    "inputs": {
        "Name": "variable:variable name",
        "Value": ["1","2"]
    }
}
```

------

名前  
値の更新元となる変数の名前。次の形式を使用する必要があります。`variable:variable name`  
タイプ: 文字列  
必須: はい

値  
変数に代入する新しい値。値は、変数のデータ型に一致する必要があります。データ型変換はサポートされていません。  
型: ブール値｜整数｜マップリスト｜文字列｜文字列リスト｜文字列マップ  
必須: はい  
制約:  
+ マップリストには、最大数は 200 項目まで格納できます。
+ キーの長さは、最小長は 1、最大長は 50 です。
+ 文字列リストには、最小で 0 個のアイテムから最大で 50 個のアイテムを指定できます。
+ 文字列の長さは、最小長は 1、最大長は 512 です。Output

なし  


# `aws:waitForAwsResourceProperty` – AWS リソースプロパティを待つ
<a name="automation-action-waitForAwsResourceProperty"></a>

`aws:waitForAwsResourceProperty` アクションにより、続行する前にオートメーションが特定のリソース状態またはイベント状態を待てるようにします。このアクションの使用例については、「[その他のランブックの例](automation-document-examples.md)」を参照してください。

**注記**  
このアクションのデフォルトのタイムアウト値は 3600 秒 (1 時間) です。`timeoutSeconds` ステップで `aws:waitForAwsResourceProperty` パラメータを指定して、タイムアウトを制限または延長することができます。このアクションの使用方法の詳細と例については、「[ランブックでのタイムアウトの処理](automation-handling-timeouts.md)」を参照してください。

**注記**  
`aws:waitForAwsResourceProperty` アクションは、自動スロットリング再試行をサポートしています。詳細については、「[スロットリングされたオペレーションの自動再試行の設定](automation-throttling-retry.md)」を参照してください。

**Input**  
入力は、選択した API オペレーションによって定義されます。

------
#### [ YAML ]

```
action: aws:waitForAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property value
```

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

```
{
  "action": "aws:waitForAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property value"
    ]
  }
}
```

------

サービス  
実行する API オペレーションを含む AWS のサービスの名前空間。たとえば、AWS Systems Manager の名前空間は、`ssm` となります。Amazon Elastic Compute Cloud (Amazon EC2) の名前空間は、`ec2` です。サポートされている AWS のサービスの名前空間のリストは、AWS CLI コマンドリファレンスの「[Available Services (利用可能なサービス)](https://docs.aws.amazon.com/cli/latest/reference/#available-services)」セクションを参照してください。  
タイプ: 文字列  
必須: はい

Api  
実行する API オペレーションの名前。API オペレーション (メソッド) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon Relational Database Service (Amazon RDS) のすべての API オペレーション (メソッド) は、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)のページに一覧表示されます。  
型: 文字列  
必須: はい

API オペレーション入力  
1 つ以上の API オペレーションを入力します。使用できる入力 (パラメータ) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、下にスクロールして、[**DBInstanceIdentifier**]、[**Name (名前)**]、および [**Values (値)**] などの使用可能なパラメータを表示します。  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
型: 選択した API オペレーションによって決まります  
必須: はい

PropertySelector  
応答オブジェクト内の特定の属性への JSONPath。レスポンスオブジェクトは、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon RDS のすべてのメソッドは、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)ページに一覧表示されています。[describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) メソッドを選択し、[**Response Structure (レスポンス構造)**] セクションまで下にスクロールします。[**DBInstances**] は応答オブジェクトとして表示されます。  
型: 文字列  
必須: はい

DesiredValues  
予定の状態、またはオートメーションを継続する状態。  
タイプ: MapList、StringList  
必須: はい

# オートメーションシステム変数
<a name="automation-variables"></a>

AWS Systems Manager オートメーションランブックでは、以下の変数が使用されます。これらの変数の使用例については、`AWS-UpdateWindowsAmi` Runbook の JSON ソースを参照してください。

**`AWS-UpdateWindowsAmi` ランブックの JSON ソースを表示するには**

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

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

1. ドキュメントリストで、検索バーまたは検索バーの右側にある数字のいずれかを使用して、ランブック `AWS-UpdateWindowsAmi` を選択します。

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

**システム変数**  
オートメーションランブックでは、以下のシステム変数がサポートされています。


****  

| 変数 | 詳細 | 
| --- | --- | 
|  `global:ACCOUNT_ID`  |  オートメーションを実行するユーザーまたはロールの AWS アカウント ID です。  | 
|  `global:DATE`  |  yyyy-MM-dd 形式の日付 (実行時)。  | 
|  `global:DATE_TIME`  |  yyyy-MM-dd\$1HH.mm.ss 形式の日時 (実行時)。  | 
|  `global:AWS_PARTITION`  |  リソースが置かれているパーティションです。標準 AWS リージョン の場合、パーティションは `aws` です。他のパーティションのリソースについては、パーティションは `aws-partitionname` です。例えば、AWS GovCloud (米国西部) リージョンのリソースのパーティションは `aws-us-gov` です。  | 
|  `global:REGION`  |  Runbook が実行されるリージョン。たとえば、us-east-2 です。  | 

**オートメーション変数**  
オートメーションランブックでは、以下の Automation 変数がサポートされています。


****  

| 変数 | 詳細 | 
| --- | --- | 
|  `automation:EXECUTION_ID`  |  現在のオートメーションに割り当てられた一意の識別子 例えば、`1a2b3c-1a2b3c-1a2b3c-1a2b3c1a2b3c1a2b3c` と指定します。  | 

**Topics**
+ [用語](#automation-terms)
+ [サポートされるシナリオ](#automation-variables-support)
+ [サポートされないシナリオ](#automation-variables-unsupported)

## 用語
<a name="automation-terms"></a>

以下の用語では、変数とパラメータの解決方法について説明します。


****  

| 用語 | 定義 | 例 | 
| --- | --- | --- | 
|  定数 ARN  |  変数を含まない有効な Amazon リソースネーム (ARN)。  |  `arn:aws:iam::123456789012:role/roleName`  | 
|  Runbook パラメータ  |  Runbook レベル (`instanceId` など) で定義されたパラメータ。このパラメータは基本的な文字列置換で使用されます。その値は Start Execution 時に渡されます。  |  <pre>{ <br />   "description": "Create Image Demo",<br />   "version": "0.3",<br />   "assumeRole": "Your_Automation_Assume_Role_ARN",<br />   "parameters":{ <br />      "instanceId": { <br />         "type": "String",<br />         "description": "Instance to create image from"<br />   }<br />}</pre>  | 
|  システム変数  |  Runbook のいずれかの部分が評価されたときに Runbook に代入される一般的な変数。  |  <pre>"activities": [ <br />   { <br />      "id": "copyImage",<br />      "activityType": "AWS-CopyImage",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": { <br />         "ImageName": "{{imageName}}",<br />         "SourceImageId": "{{sourceImageId}}",<br />         "SourceRegion": "{{sourceRegion}}",<br />         "Encrypted": true,<br />         "ImageDescription": "Test CopyImage Description created on {{global:DATE}}"<br />      }<br />   }<br />]</pre>  | 
|  Automation 変数  |  Runbook のいずれかの部分が評価されたときに Runbook に代入される、オートメーションに関連した変数。  |  <pre>{ <br />   "name": "runFixedCmds",<br />   "action": "aws:runCommand",<br />   "maxAttempts": 1,<br />   "onFailure": "Continue",<br />   "inputs": { <br />      "DocumentName": "AWS-RunPowerShellScript",<br />      "InstanceIds": [ <br />         "{{LaunchInstance.InstanceIds}}"<br />      ],<br />      "Parameters": { <br />         "commands": [ <br />            "dir",<br />            "date",<br />            "“{{outputFormat}}” -f “left”,”right”,”{{global:DATE}}”,”{{automation:EXECUTION_ID}}”<br />         ]<br />      }<br />   }<br />}</pre>  | 
|  Systems Manager パラメータ  |  AWS Systems Manager Parameter Store 内で定義された変数。ステップ入力で直接参照することはできません。パラメータにアクセスするにはアクセス許可が必要な場合があります。  |  <pre><br />description: Launch new Windows test instance<br />schemaVersion: '0.3'<br />assumeRole: '{{AutomationAssumeRole}}'<br />parameters:<br />  AutomationAssumeRole:<br />    type: String<br />    default: ''<br />    description: >-<br />      (Required) The ARN of the role that allows Automation to perform the<br />      actions on your behalf. If no role is specified, Systems Manager<br />      Automation uses your IAM permissions to run this runbook.<br />  LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 

## サポートされるシナリオ
<a name="automation-variables-support"></a>


****  

| シナリオ | コメント | 例 | 
| --- | --- | --- | 
|  作成時の一定 ARN `assumeRole`。  |  権限付与チェックが実行されて、呼び出し元ユーザーが `assumeRole` の委譲を許可されていることが確認されます。  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "arn:aws:iam::123456789012:role/roleName",<br />  "parameters": { <br />  ...</pre>  | 
|  オートメーションの開始時に、`AssumeRole` に与えられる Runbook のパラメータ。  |  Runbook のパラメータリストで定義する必要があります。  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{dynamicARN}}",<br />  "parameters": {<br /> ...</pre>  | 
|  開始時に Runbook パラメータに渡される値  |  お客様がパラメータに使用する値を指定します。開始時に渡される入力は、Runbook のパラメータリストで定義する必要があります。  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-12345678",<br />      "description": "list of commands to run as part of first step"<br />    },<br />...</pre> Start Automation Execution への入力には `{"amiId" : ["ami-12345678"] }` を含めます。  | 
|  ランブックコンテンツ内で参照される Systems Manager パラメータ。  |  変数は、顧客のアカウント内に存在するか、パブリックにアクセス可能なパラメータであり、Runbook の `AssumeRole` に変数へのアクセスがあります。作成時にチェックが実行されて、`AssumeRole` が変数にアクセスできることが確認されます。パラメータは、ステップ入力で直接参照することはできません。  |  <pre><br />...<br />parameters:<br />    LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 
|  ステップ定義内で参照されるシステム変数  |  オートメーションが開始されると、システム変数が Runbook に代入されます。Runbook に挿入される値は、代入時の変数の値に対して相対的になります。たとえば、ステップ 1 で挿入される時間変数の値は、ステップの実行にかかる時間のため、ステップ 3 で挿入される時間変数の値とは異なります。システム変数は、ランブックのパラメータリストで設定する必要はありません。  |  <pre>...<br />  "mainSteps": [<br />    {<br />      "name": "RunSomeCommands",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS:RunPowerShell",<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "Parameters": {<br />            "commands" : [<br />                "echo {The time is now {{global:DATE_TIME}}}"<br />            ]<br />        }<br />    }<br />}, ... </pre>  | 
|  ステップ定義内で参照される自動化の変数  |  Automation 変数は、ランブックのパラメータリストで設定する必要はありません。サポートされる Automation 変数は **automation:EXECUTION\$1ID** のみです。  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "invokeLambdaFunction",<br />      "action": "aws:invokeLambdaFunction",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "FunctionName": "Hello-World-LambdaFunction",<br /><br />"Payload" : "{ "executionId" : "{{automation:EXECUTION_ID}}" }"<br />      }<br />    }<br />... </pre>  | 
|  次のステップ定義内からの前のステップの出力の参照  |  これはパラメータのリダイレクトです。前のステップの出力は、構文 `{{stepName.OutputName}}` を使用して参照されます。この構文は、お客様がランブックのパラメータに対して使用することはできません。これは、参照ステップの実行時に解決されます。ランブックのパラメータリストでは設定されません。  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "{{amiId}}",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br />    },<br />    {<br />      "name":"changeState",<br />      "action": "aws:changeInstanceState",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "DesiredState": "terminated"<br />      }<br />    }<br /><br />... </pre>  | 

## サポートされないシナリオ
<a name="automation-variables-unsupported"></a>


****  

| シナリオ | コメント | 例 | 
| --- | --- | --- | 
|  作成時に `assumeRole` に渡される Systems Manager パラメータ  |  サポート外。  |  <pre>...<br /><br />{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{ssm:administratorRoleARN}}",<br />  "parameters": {<br /><br />... </pre>  | 
|  ステップ入力で直接参照される Systems Manager パラメータ。  |  作成時に `InvalidDocumentContent` 例外を返します。  |  <pre><br />...<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}'<br />...</pre>  | 
|  変数によるステップの定義  |  Runbook 内のステップの定義は変数によって構成されます。  |  <pre>...<br /><br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "{{attemptModel}}": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "ami-12345678",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br /><br />...<br /><br />User supplies input : { "attemptModel" : "minAttempts" } </pre>  | 
|  Runbook パラメータの相互参照  |  ユーザーは開始時に入力パラメータとして、Runbook 内の別のパラメータへの参照を渡します。  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-7f2e6015",<br />      "description": "list of commands to run as part of first step"<br />    },<br />    "alternateAmiId": {<br />      "type": "String",<br />      "description": "The alternate AMI to try if this first fails".<br /><br />"default" : "{{amiId}}"<br />    },<br /><br />... </pre>  | 
|  複数レベルの展開  |  Runbook で、変数の名前に評価される変数を定義します。これは、変数区切り記号 (*\$1\$1 \$1\$1*) 内にあり、変数/パラメータの値に展開されます。  |  <pre>...<br />  "parameters": {<br />    "firstParameter": {<br />      "type": "String",<br />      "default": "param2",<br />      "description": "The parameter to reference"<br />    },<br />    "secondParameter": {<br />      "type": "String",<br />      "default" : "echo {Hello world}",<br />      "description": "What to run"<br />    }<br />  },<br />  "mainSteps": [{<br />      "name": "runFixedCmds",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS-RunPowerShellScript",<br /><br />"InstanceIds" : "{{LaunchInstance.InstanceIds}}",<br />        "Parameters": {<br />          "commands": [ "{{ {{firstParameter}} }}"]<br /><br />}<br /><br />...<br /><br />Note: The customer intention here would be to run a command of "echo {Hello world}" </pre>  | 
|  別の変数タイプであるRunbook ステップからの出力の参照  |  ユーザーは前のRunbook ステップからの出力を後続のステップ内で参照します。出力は、後続のステップのアクションの要件を満たしていない変数タイプです。  |  <pre>...<br />mainSteps:<br />- name: getImageId<br />  action: aws:executeAwsApi<br />  inputs:<br />    Service: ec2<br />    Api: DescribeImages<br />    Filters:  <br />    - Name: "name"<br />      Values: <br />      - "{{ImageName}}"<br />  outputs:<br />  - Name: ImageIdList<br />    Selector: "$.Images"<br />    Type: "StringList"<br />- name: copyMyImages<br />  action: aws:copyImage<br />  maxAttempts: 3<br />  onFailure: Abort<br />  inputs:<br />    SourceImageId: {{getImageId.ImageIdList}}<br />    SourceRegion: ap-northeast-2<br />    ImageName: Encrypted Copies of LAMP base AMI in ap-northeast-2<br />    Encrypted: true <br />... <br />Note: You must provide the type required by the Automation action. <br />In this case, aws:copyImage requires a "String" type variable but the preceding step outputs a "StringList" type variable.<br />                                        </pre>  | 

# 独自のランブックの作成
<a name="automation-documents"></a>

オートメーションランブックは、オートメーションの実行時にマネージドインスタンスおよびその他の AWS リソースで Systems Manager が実行する*アクション*を定義します。Automation は AWS Systems Manager のツールです。ランブックには、順次実行されるステップが 1 つ以上含まれています。各ステップは、1 つのアクションを中心に構築されます。1 つのステップからの出力は、後のステップで入力として使用できます。

これらのアクションとそのステップを実行するプロセスは、*オートメーション*と呼ばれます。

ランブックでサポートされているアクションタイプを使用すると、AWS 環境でのさまざまなオペレーションを自動化できます。たとえば、`executeScript` アクションタイプを使用すると、Python または PowerShell スクリプトをランブックに直接埋め込むことができます。(カスタムランブックを作成するときは、スクリプトをインラインで追加するか、S3 バケットまたはローカルマシンからアタッチできます)。AWS CloudFormation および `createStack` アクションタイプを使用すると、`deleteStack` リソースの管理を自動化できます。また、`executeAwsApi` アクションタイプを使用すると、ステップは AWS リソースの作成または削除、他のプロセスの開始、通知の開始など、任意の AWS のサービスで任意の API オペレーションを実行できます。

オートメーションでサポートされている 20 種類のアクションタイプの一覧については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

AWS Systems Manager Automation では、1 つ以上の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの再起動や、Amazon Machine Image (AMI) の作成といった一般的なタスクを実行する際に使用することができる事前定義されたステップを含むいくつかのランブックが用意されています。また、独自のランブックを作成して他の AWS アカウント と共有したり、すべての Automation ユーザーに公開したりすることもできます。

ランブックは YAML または JSON を使用して記述されます。ただし、Systems Manager Automation コンソールの [**Document Builder (ドキュメントビルダー)**] を使用すると、ネイティブの JSON または YAML で作成しなくても、ランブックを作成できます。

**重要**  
AWS Identity and Access Management (IAM) サービスロールを使用して他のサービスを呼び出す自動化ワークフローを実行する場合は、それらのサービスを呼び出すためのアクセス許可をサービスロールに設定する必要がある点に注意してください。この要件は、`AWS-ConfigureS3BucketLogging`、`AWS-CreateDynamoDBBackup`、`AWS-RestartEC2Instance` ランブックなど、すべての AWS オートメーションランブック (`AWS-*` ランブック) に適用されます。この要件は、他のサービスを呼び出すアクションを使用して他の AWS のサービスを呼び出すように作成したカスタムオートメーションランブックにも適用されます。例えば、`aws:executeAwsApi`、`aws:createStack`、または `aws:copyImage` のアクションを使用する場合は、それらのサービスを呼び出すためのアクセス許可を持つサービスロールを設定します。ロールに IAM インラインポリシーを追加することで、他の AWS のサービスへのアクセス許可を有効にできます。詳細については、「[(オプション) 他の AWS のサービス を呼び出すためのオートメーションインラインポリシーまたはカスタマー管理ポリシーを追加する](automation-setup-iam.md#add-inline-policy)」を参照してください。

ランブックで指定できるアクションまたはプラグインに関する情報を表示するには、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

AWS Toolkit for Visual Studio Code を使用してランブックを作成する方法については、 *AWS Toolkit for Visual Studio Code ユーザーガイド*の「[Systems Manager Automation ドキュメントの使用](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html)」を参照してください。

ビジュアルデザイナーを使用したカスタムランブックの作成については、「[オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md)」を参照してください。

**Contents**
+ [オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md)
  + [ビジュアルデザインエクスペリエンスのインターフェースの概要](visual-designer-interface-overview.md)
    + [アクションブラウザー](visual-designer-interface-overview.md#visual-designer-actions)
    + [キャンバス](visual-designer-interface-overview.md#visual-designer-canvas)
    + [フォーム](visual-designer-interface-overview.md#visual-designer-form)
    + [キーボードショートカット](visual-designer-interface-overview.md#visual-designer-keyboard-shortcuts)
  + [ビジュアルデザインエクスペリエンスの活用](visual-designer-use.md)
    + [ランブックワークフローを作成する](visual-designer-use.md#visual-designer-create-runbook-workflow)
    + [ランブックを作成する](visual-designer-use.md#visual-designer-build)
    + [ランブックを更新する](visual-designer-use.md#visual-designer-update-runbook)
    + [ランブックのエクスポート](visual-designer-use.md#visual-designer-export-runbook)
  + [アクションの入力と出力を構成する](visual-designer-action-inputs-outputs.md)
    + [アクションの入力データを提供する。](visual-designer-action-inputs-outputs.md#providing-input)
    + [アクションの出力データを定義します。](visual-designer-action-inputs-outputs.md#defining-output)
  + [ビジュアルデザインエクスペリエンスによるエラー処理](visual-designer-error-handling.md)
    + [エラー発生時にアクションを再試行してください。](visual-designer-error-handling.md#retry-actions)
    + [タイムアウト](visual-designer-error-handling.md#timeout-seconds)
    + [失敗したアクション](visual-designer-error-handling.md#failure-actions)
    + [キャンセルされたアクション](visual-designer-error-handling.md#cancel-actions)
    + [重要なアクション](visual-designer-error-handling.md#critical-actions)
    + [アクションを終了する](visual-designer-error-handling.md#end-actions)
  + [チュートリアル: ビジュアルデザインエクスペリエンスを使用したランブックの作成](visual-designer-tutorial.md)
    + [ステップ 1: ビジュアルデザインエクスペリエンスに移動](visual-designer-tutorial.md#navigate-console)
    + [ステップ 2: ワークフローを作成する](visual-designer-tutorial.md#create-workflow)
    + [ステップ 3: 自動生成されたコードを確認する](visual-designer-tutorial.md#view-generated-code)
    + [ステップ 4: 新しいランブックを実行する](visual-designer-tutorial.md#use-tutorial-runbook)
    + [ステップ 5：クリーンアップ](visual-designer-tutorial.md#cleanup-tutorial-runbook)
+ [オートメーションランブックのオーサリング](automation-authoring-runbooks.md)
  + [ユースケースの特定](automation-authoring-runbooks.md#automation-authoring-runbooks-use-case)
  + [開発環境をセットアップする](automation-authoring-runbooks.md#automation-authoring-runbooks-environment)
  + [ランブックコンテンツの開発](automation-authoring-runbooks.md#automation-authoring-runbooks-developing-content)
  + [例 1: 親子のランブックの作成](automation-authoring-runbooks-parent-child-example.md)
    + [子ランブックの作成](automation-authoring-runbooks-parent-child-example.md#automation-authoring-runbooks-child-runbook)
    + [親ランブックの作成](automation-authoring-runbooks-parent-child-example.md#automation-authoring-runbooks-parent-runbook)
  + [例 2: スクリプト化されたランブック](automation-authoring-runbooks-scripted-example.md)
  + [その他のランブックの例](automation-document-examples.md)
    + [VPC アーキテクチャと Microsoft Active Directory ドメインコントローラーのデプロイ](automation-document-architecture-deployment-example.md)
    + [最新のスナップショットからルートボリュームを復元する](automation-document-instance-recovery-example.md)
    + [AMI とクロスリージョンコピーの作成](automation-document-backup-maintenance-example.md)
+ [AWS リソースを設定する入力パラメーターの作成](populating-input-parameters.md)
+ [ランブック作成のためのドキュメントビルダーの使用](automation-document-builder.md)
  + [ドキュメントビルダーを使用してランブックを作成する](automation-document-builder.md#create-runbook)
  + [スクリプトを実行するランブックを作成する](automation-document-builder.md#create-runbook-scripts)
+ [ランブックでのスクリプトの使用](automation-document-script-considerations.md)
  + [ランブックを使用するためのアクセス許可](automation-document-script-considerations.md#script-permissions)
  + [スクリプトをランブックに追加する](automation-document-script-considerations.md#adding-scripts)
  + [ランブックのスクリプト制約](automation-document-script-considerations.md#script-constraints)
+ [ランブックでの条件文の使用](automation-branch-condition.md)
  + [`aws:branch` アクションの使用](automation-branch-condition.md#branch-action-explained)
    + [ランブック `aws:branch` でのステップの作成](automation-branch-condition.md#create-branch-action)
      + [出力変数の作成について](automation-branch-condition.md#branch-action-output)
    + [`aws:branch` ランブックの例](automation-branch-condition.md#branch-runbook-examples)
    + [演算子を使用した複雑な分岐オートメーションの作成](automation-branch-condition.md#branch-operators)
  + [条件オプションの使用例](automation-branch-condition.md#conditional-examples)
+ [アクション出力の入力としての使用](automation-action-outputs-inputs.md)
  + [ランブックでの JSONPath の使用](automation-action-outputs-inputs.md#automation-action-json-path)
+ [Automation 向けのウェブフック統合の作成](creating-webhook-integrations.md)
  + [統合の作成 (コンソール)](creating-webhook-integrations.md#creating-integrations-console)
  + [統合の作成 (コマンドライン)](creating-webhook-integrations.md#creating-integrations-commandline)
  + [統合用のウェブフックの作成](creating-webhook-integrations.md#creating-webhooks)
+ [ランブックでのタイムアウトの処理](automation-handling-timeouts.md)

# オートメーションランブックのビジュアルデザインエクスペリエンス
<a name="automation-visual-designer"></a>

AWS Systems Manager 自動化は、自動化ランブックの作成に役立つローコードのビジュアルデザイン体験を提供します。ビジュアルデザインエクスペリエンスでは、独自のコードを追加できるドラッグアンドドロップインターフェイスが提供されるため、ランブックをより簡単に作成および編集できます。ビジュアルデザインのエクスペリエンスを使用すると、次のことを実行できます。
+ 条件ステートメント
+ アクションごとに入力と出力をどのようにフィルタリングまたは変換するかを制御します。
+ エラー処理を設定する。
+ 新しいランブックを試作する。
+ AWS Toolkit for Visual Studio Code を使用したローカル開発の出発点として、プロトタイプランブックを使用してください。

ランブックを作成または編集すると、[オートメーションコンソール](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/)からビジュアルデザインエクスペリエンスにアクセスできます。ランブックを作成すると、ビジュアルデザインによって作業が検証され、コードが自動生成されます。ローカル開発または 用に生成されたコードをレビューまたはエクスポートできます。完了したら、ランブックを保存して実行し、Systems Manager Automation コンソールで結果を調べることができます。

**Topics**
+ [インターフェースの概要](visual-designer-interface-overview.md)
+ [ビジュアルデザインエクスペリエンスの活用](visual-designer-use.md)
+ [入力と出力を構成する](visual-designer-action-inputs-outputs.md)
+ [ビジュアルデザインエクスペリエンスによるエラー処理](visual-designer-error-handling.md)
+ [チュートリアル: ビジュアルデザインエクスペリエンスを使用したランブックの作成](visual-designer-tutorial.md)

# ビジュアルデザインエクスペリエンスのインターフェースの概要
<a name="visual-designer-interface-overview"></a>

Systems Manager Automation のビジュアルデザインエクスペリエンスは、自動化ランブックの作成に役立つローコードのビジュアルワークフローデザイナーです。

インターフェースコンポーネントの概要を使って、ビジュアルデザインエクスペリエンスについて理解しましょう。

![\[ビジュアルデザインエクスペリエンスコンポーネント\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_overview.png)

+ **[アクション]** ブラウザーには **[アクション]**、**[AWSAPI]**、**[ランブック]** タブがあります。
+ [キャンバス] は、状態をワークフローのグラフにドラッグアンドドロップし、状態の順序を変更し、状態を選択して、状態を設定または表示に選択します。
+ **[フォーム]** パネルでは、キャンバス上で選択した任意のアクションのプロパティを表示および編集できます。**[コンテンツ]** トグルを選択すると、現在選択されているアクションが強調表示された状態でランブックの YAML または JSON が表示されます。

**[Info]** (情報) リンクは、ヘルプが必要になるとコンテキスト情報を含むパネルを開きます。これらのパネルには、Systems Manager Automationドキュメントの関連トピックへのリンクも含まれます。

## アクションブラウザー
<a name="visual-designer-actions"></a>

**[アクション]** ブラウザーから、アクションを選択してワークフローグラフにドラッグアンドドロップできます。すべての状態を検索するには、**[アクション]** ブラウザー上部の検索フィールドを使用します。**[アクション]** ブラウザーには以下のタブがあります。
+ **[アクション]** タブには、キャンバス内のランブックワークフローグラフにドラッグアンドドロップできるオートメーションアクションのリストが表示されます。
+ **AWS[アクション]** タブには、キャンバス内のワークフローグラフにドラッグアンドドロップできる AWS API のリストが表示されます。
+ **[ランブック]** タブには、さまざまなユースケースに使用できるビルディングブロックとして、すぐに使える再利用可能なランブックがいくつか用意されています。例えば、ランブックを使用すると、同じアクションを再作成しなくても、ワークフロー内の Amazon EC2 インスタンスで一般的な修正タスクを実行できます。

![\[ビジュアルデザインエクスペリエンス-アクションブラウザ\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_actions_multi_view.png)


## キャンバス
<a name="visual-designer-canvas"></a>

ワークフローに追加する状態を選択した後、キャンバスにドラッグし、ワークフローのグラフにドロップします。状態をドラッグアンドドロップして、ワークフローの別の場所に移動することもできます。ワークフローが複雑な場合は、キャンバスパネルでワークフローをすべて表示できない場合があります。キャンバスの上部にあるコントロールを使用して、拡大/縮小します。ワークフローのグラフのさまざまな部分を表示するには、キャンバスでワークフローのグラフをドラッグします。

**[アクション]** ブラウザーから、アクションを選択してランブックワークフローグラフにドラッグアンドドロップできます。ラインはワークフローのどこに配置されるかを示します。状態の順序を変更するには、ワークフロー内の別の場所にドラッグします。新しいワークフロー状態がワークフローに追加され、そのコードが自動生成されます。

![\[ビジュアルデザインエクスペリエンスキャンバス\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_canvas.png)


## フォーム
<a name="visual-designer-form"></a>

ランブックワークフローにアクションを追加したら、そのアクションをユースケースに合わせて設定できます。設定したいアクションを選択すると、**[フォーム]** パネルにそのパラメータとオプションが表示されます。**[コンテンツ]** トグルを選択すると、YAML コードまたは JSON コードを表示することもできます。選択した状態に関連付けられているコードがハイライトされます。

![\[ビジュアルデザインエクスペリエンスフォームパネル\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_form.png)


![\[ビジュアルデザインエクスペリエンスコンテンツパネル\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_content.png)


## キーボードショートカット
<a name="visual-designer-keyboard-shortcuts"></a>

ビジュアルデザインエクスペリエンスは、次の表に示すキーボードショートカットをサポートします。


| キーボードショートカット | 関数 | 
| --- | --- | 
| Ctrl\$1Z | 直前のオペレーションを元に戻す | 
| Ctrl\$1Shift\$1Z | 直前のオペレーションをやり直す | 
| Alt\$1C | ワークフローをキャンバスの中央に配置する | 
| Backspace | 選択した状態をすべて削除する | 
| 削除 | 選択した状態をすべて削除する | 
| Ctrl\$1D | 選択した状態を複製する | 

# ビジュアルデザインエクスペリエンスの活用
<a name="visual-designer-use"></a>

ビジュアルデザインエクスペリエンスを使用してランブックワークフローを作成、編集、実行する方法を学習します。ワークフローの準備ができたら、ワークフローをエクスポートできます。ビジュアルデザインエクスペリエンスを使用して、ラピッドプロトタイプ作成を行うこともできます。

## ランブックワークフローを作成する
<a name="visual-designer-create-runbook-workflow"></a>

1. [Systems Manager Automation コンソール](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/)にサインインします。

1. **[ランブックの作成]** を選択します。

1. **[名前]** ボックスに、ランブックの名前を入力します。例:`MyNewRunbook`

1. **[デザイン]** と **[コード]** トグルの横にある鉛筆アイコンを選択し、ランブックの名前を入力します。

これで、新しいランブックのワークフローをデザインできます。

## ランブックを作成する
<a name="visual-designer-build"></a>

 ビジュアルデザインエクスペリエンスを使用してランブックワークフローをデザインするには、**[アクション]** ブラウザーからキャンバスにオートメーションアクションをドラッグし、ランブックのワークフロー内の目的の場所に配置します。また、ワークフロー内の別の場所にドラッグして、ワークフローのアクションを並べ替えることができます。アクションをキャンバスにドラッグすると、ワークフロー内でドロップできる場所にラインが表示されます。キャンバスにアクションがドロップされると、そのコードが自動生成され、ランブックのコンテンツ内に追加されます。

追加したいアクションの名前がわかっている場合は、**[アクション]** ブラウザの上部にある検索ボックスを使用して、アクションを検索します。

アクションをキャンバスにドロップしたら、右側の **[フォーム]** パネルを使用してアクションを設定します。このパネルには、キャンバスに配置した各オートメーションアクションまたは API アクションの **[一般]**、**[入力]**、**[出力]**、および **[設定]**タブがあります。例えば、**[一般]** タブは次のセクションで構成されています。
+ **[ステップ名]** はステップを識別します。ステップ名に一意の値を指定します。
+ **[説明]** は、アクションがランブックのワークフローで何をしているのかを説明するのに役立ちます。

**[入力]** タブには、アクションによって異なるフィールドがあります。例えば、`aws:executeScript` オートメーションアクションには以下のセクションがあります。
+ **[ランタイム]** は、指定されたスクリプトの実行に使用する言語です。
+ **[ハンドラー]** は、関数の名前です。ハンドラで定義された関数に、`events` と `context` の 2 つのパラメータがあることを確認する必要があります。PowerShell ランタイムはこのパラメータをサポートしていません。
+ **[スクリプト]** は、ワークフローで実行する埋め込みスクリプトです。
+ (オプション) **[添付ファイルは]**、アクションによって呼び出せるスタンドアロンスクリプトまたは.zip ファイル用です。このパラメータは、JSON ランブックでは必須です。

**[出力]** タブは、アクションから出力する値を指定するのに役立ちます。ワークフローの後のアクションで出力値を参照したり、アクションからの出力を生成してログに記録したりできます。すべてのアクションがアウトプットをサポートしているわけではないため、すべてのアクションに **[出力]** タブがあるわけではありません。例えば、`aws:pause` アクションは出力をサポートしていません。出力をサポートするアクションの場合、**[出力]** タブは次のセクションで構成されます。
+ **[名前]** は出力値に使用される名前です。出力はワークフローの後のアクションで参照できます。
+ **[セレクター]** は、`"$."` から始まる JSONPath 式文字列で、JSON 要素内の 1 つまたは複数のコンポーネントを選択するために使用されます。
+ **[タイプ]** は出力値のデータ型です。例えば、`String` または `Integer` データタイプと入力します。

**[設定]** タブには、すべてのオートメーションアクションで使用できるプロパティとオプションが含まれています。アクションには次のセクションがあります。
+ **[最大試行数]** プロパティは、失敗した場合にアクションが再試行される回数です。
+ **[タイムアウト秒]** プロパティは、アクションのタイムアウト値を指定します。
+ **[致命的か]** プロパティは、アクションが失敗したためにオートメーション全体が停止するかどうかを決定します。
+ **[次のステップ]** プロパティは、ランブック内でオートメーションが次に実行するアクションを決定します。
+ **[失敗時]** プロパティは、アクションが失敗した場合にオートメーションがランブックで次に実行するアクションを決定します。
+ **[キャンセル時]** プロパティは、アクションがユーザーによってキャンセルされた場合に、オートメーションがランブックで次に実行するアクションを決定します。

アクションを削除するには、キャンバスの上にあるツールバーの Backspace を使用するか、右クリックして **[アクションを削除]** を選択します。

ワークフローが大きくなると、キャンバスに収まらない場合があります。ワークフローがキャンバスに収まるようにするには、以下のオプションのいずれかを実行します。
+ サイドパネルのコントロールを使用して、パネルのサイズを変更するか、パネルを閉じます。
+ キャンバスの上部にあるコントロールを使用して、ワークフローのグラフをズームインまたはズームアウトします。

## ランブックを更新する
<a name="visual-designer-update-runbook"></a>

ランブックの新しいバージョンを作成することで、既存のランブックワークフローを更新できます。ランブックを更新するには、ビジュアルデザインエクスペリエンスを使用するか、コードを直接編集します。既存のランブックを更新するには、以下の手順に従います。

1. [Systems Manager Automation コンソール](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/)にサインインします。

1. 更新するランブックを選択します。

1. [**Create new version (新しいバージョンの作成)**] を選択します。

1. ビジュアルデザインエクスペリエンスには、コードペインとビジュアルワークフローペインの 2 つのペインがあります。ビジュアルワークフローペインで **[デザイン]** を選択して、ビジュアルデザインエクスペリエンスでワークフローを編集します。完了したら、**[新しいバージョンを作成]** を選択して変更を保存し、終了します。

1. (オプション) コードペインを使用して、YAML または JSON のランブックコンテンツを編集します。

## ランブックのエクスポート
<a name="visual-designer-export-runbook"></a>

ランブックのワークフロー YAML または JSON コード、およびワークフローのグラフをエクスポートするには、以下の手順に従います。

1. **[ドキュメント]** コンソールでランブックを選択します。

1. [**Create new version (新しいバージョンの作成)**] を選択します。

1. **[アクション]** ドロップダウンで、グラフとランブックのどちらをエクスポートするか、またどの形式を好むかを選択します。

# アクションの入力と出力を構成する
<a name="visual-designer-action-inputs-outputs"></a>

各オートメーションアクションは、受け取った入力に基づいて応答します。ほとんどの場合、出力を後続のアクションに渡します。ビジュアルデザインエクスペリエンスでは、**[フォーム]** パネルの **[入力]** タブと **[出力]** タブでアクションの入出力データを設定できます。

オートメーションアクションの出力を定義および使用する方法の詳細については、「[アクション出力の入力としての使用](automation-action-outputs-inputs.md)」を参照してください。

## アクションの入力データを提供する。
<a name="providing-input"></a>

各オートメーションアクションには、値を指定する必要がある入力が 1 つ以上あります。アクションの入力に指定する値は、アクションが受け付けるデータ型と形式によって決まります。例えば、`aws:sleep` アクションの入力には、ISO 8601 形式の文字列値が `Duration` 入力に必要です。

通常、ランブックのワークフローでは、後続のアクションで使用したい出力を返すアクションを使用します。ランブックのワークフローでエラーが発生しないように、入力値が正しいことを確認することが重要です。入力値も重要です。入力値によって、アクションが期待どおりの出力を返すかどうかが決まるからです。例えば、`aws:executeAwsApi` アクションを使用するときは、API 操作に適切な値を指定していることを確認する必要があります。

## アクションの出力データを定義します。
<a name="defining-output"></a>

オートメーションアクションの中には、定義した操作を実行した後に出力を返すものもあります。出力を返すアクションには、出力が事前に定義されているか、ユーザーが出力を定義できるものがあります。例えば、`aws:createImage` アクションには `ImageId` と `ImageState` を返す出力があらかじめ定義されています。これとは対照的に、`aws:executeAwsApi` アクションでは、指定した API オペレーションから必要な出力を定義できます。そのため、1 回の API オペレーションから 1 つ以上の値を返して、後続のアクションで使用できます。

オートメーションアクションの独自の出力を定義するには、出力の名前、データ型、出力値を指定する必要があります。引き続き `aws:executeAwsApi` アクションを例として使用するために、Amazon EC2 から `DescribeInstances` API オペレーションを呼び出しているとしましょう。この例では、Amazon EC2 インスタンスの `State` を返す、あるいは出力し、その出力に基づいてランブックのワークフローを分岐させたいと考えています。**InstanceState** 出力に名前を付けることを選択し、そのデータ型 **String** を使用します。

出力の実際の値を定義するプロセスは、アクションによって異なります。例えば、`aws:executeScript` アクションを使用している場合は、出力にデータを提供するために関数内で `return` ステートメントを使用する必要があります。`aws:executeAwsApi`、`aws:waitForAwsResourceProperty`、`aws:assertAwsResourceProperty` などのアクションでは、`Selector` が必要です。`Selector`、または一部のアクションで参照されるような `PropertySelector` は、API オペレーションからの JSON レスポンスを処理するために使用される JSONPath 文字列です。出力に正しい値を選択できるように、API オペレーションからの JSON レスポンスオブジェクトがどのように構造化されているかを理解することが重要です。前述の `DescribeInstances` API オペレーションを使用する場合は、次の JSON レスポンスの例を参照してください。

```
{
  "reservationSet": {
    "item": {
      "reservationId": "r-1234567890abcdef0",
      "ownerId": 123456789012,
      "groupSet": "",
      "instancesSet": {
        "item": {
          "instanceId": "i-1234567890abcdef0",
          "imageId": "ami-bff32ccc",
          "instanceState": {
            "code": 16,
            "name": "running"
          },
          "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
          "dnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
          "reason": "",
          "keyName": "my_keypair",
          "amiLaunchIndex": 0,
          "productCodes": "",
          "instanceType": "t2.micro",
          "launchTime": "2018-05-08T16:46:19.000Z",
          "placement": {
            "availabilityZone": "eu-west-1c",
            "groupName": "",
            "tenancy": "default"
          },
          "monitoring": {
            "state": "disabled"
          },
          "subnetId": "subnet-56f5f000",
          "vpcId": "vpc-11112222",
          "privateIpAddress": "192.168.1.88",
          "ipAddress": "54.194.252.215",
          "sourceDestCheck": true,
          "groupSet": {
            "item": {
              "groupId": "sg-e4076000",
              "groupName": "SecurityGroup1"
            }
          },
          "architecture": "x86_64",
          "rootDeviceType": "ebs",
          "rootDeviceName": "/dev/xvda",
          "blockDeviceMapping": {
            "item": {
              "deviceName": "/dev/xvda",
              "ebs": {
                "volumeId": "vol-1234567890abcdef0",
                "status": "attached",
                "attachTime": "2015-12-22T10:44:09.000Z",
                "deleteOnTermination": true
              }
            }
          },
          "virtualizationType": "hvm",
          "clientToken": "xMcwG14507example",
          "tagSet": {
            "item": {
              "key": "Name",
              "value": "Server_1"
            }
          },
          "hypervisor": "xen",
          "networkInterfaceSet": {
            "item": {
              "networkInterfaceId": "eni-551ba000",
              "subnetId": "subnet-56f5f000",
              "vpcId": "vpc-11112222",
              "description": "Primary network interface",
              "ownerId": 123456789012,
              "status": "in-use",
              "macAddress": "02:dd:2c:5e:01:69",
              "privateIpAddress": "192.168.1.88",
              "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
              "sourceDestCheck": true,
              "groupSet": {
                "item": {
                  "groupId": "sg-e4076000",
                  "groupName": "SecurityGroup1"
                }
              },
              "attachment": {
                "attachmentId": "eni-attach-39697adc",
                "deviceIndex": 0,
                "status": "attached",
                "attachTime": "2018-05-08T16:46:19.000Z",
                "deleteOnTermination": true
              },
              "association": {
                "publicIp": "54.194.252.215",
                "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
                "ipOwnerId": "amazon"
              },
              "privateIpAddressesSet": {
                "item": {
                  "privateIpAddress": "192.168.1.88",
                  "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
                  "primary": true,
                  "association": {
                    "publicIp": "54.194.252.215",
                    "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
                    "ipOwnerId": "amazon"
                  }
                }
              },
              "ipv6AddressesSet": {
                "item": {
                  "ipv6Address": "2001:db8:1234:1a2b::123"
                }
              }
            }
          },
          "iamInstanceProfile": {
            "arn": "arn:aws:iam::123456789012:instance-profile/AdminRole",
            "id": "ABCAJEDNCAA64SSD123AB"
          },
          "ebsOptimized": false,
          "cpuOptions": {
            "coreCount": 1,
            "threadsPerCore": 1
          }
        }
      }
    }
  }
}
```

JSON レスポンスオブジェクトでは、`State` インスタンスは `Instances` オブジェクトにネストされ、次いで `Reservations` オブジェクトにネストされます。`State` インスタンスの値を返すには、`Selector` に文字列 (**\$1.Reservations[0].Instances[0].State.Name**) を使用して、その値を出力に使用できるようにします。

ランブックのワークフローの後続アクションで出力値を参照するには、次の形式を使用します: `{{ StepName.NameOfOutput }}`。例えば、**\$1\$1 GetInstanceState.InstanceState \$1\$1**。ビジュアルデザインエクスペリエンスでは、入力のドロップダウンを使用して、後続のアクションで使用する出力値を選択できます。後続のアクションで出力を使用する場合、出力のデータ型は入力のデータ型と一致する必要があります。この例では、`InstanceState` 出力は、`String` です。したがって、その値を後続のアクションの入力で使用するには、入力が `String` を受け入れる必要があります。

# ビジュアルデザインエクスペリエンスによるエラー処理
<a name="visual-designer-error-handling"></a>

デフォルトでは、アクションがエラーを報告すると、オートメーションはランブックのワークフローを完全に停止します。これは、すべてのアクションの `onFailure` プロパティのデフォルト値が `Abort` であるためです。ランブックのワークフローでオートメーションがエラーを処理する方法を設定できます。エラー処理を設定した場合でも、一部のエラーによって実行が失敗する可能性があります。詳細については、「[Systems Manager Automation のトラブルシューティング](automation-troubleshooting.md)」を参照してください。ビジュアルデザインエクスペリエンスでは、**[設定]** パネルでエラー処理を設定します。

![\[エラー処理オプション\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_error_handling.png)


## エラー発生時にアクションを再試行してください。
<a name="retry-actions"></a>

エラーが発生した場合にアクションを再試行するには、**[最大試行数]** プロパティに値を指定します。デフォルト値は 1 です。指定した値が 1 より大きい場合、すべての再試行が失敗するまでステップは失敗したと見なされません。

## タイムアウト
<a name="timeout-seconds"></a>

アクションのタイムアウトを設定して、アクションが失敗するまでの最大実行秒数を設定できます。タイムアウトを設定するには、アクションが失敗するまでのアクションの待機秒数を **[タイムアウト秒数]** プロパティに入力します。タイムアウトが達したときにアクションの値が `Max attempts` 以上の場合、すべての再試行が実行されるまでこのステップはタイムアウトとは見なされません。

## 失敗したアクション
<a name="failure-actions"></a>

デフォルトでは、アクションが失敗すると、オートメーションはランブックのワークフローを完全に停止します。ランブック内のアクションの **[失敗時]** プロパティに代替値を指定することで、この動作を変更できます。ワークフローをランブックの次のステップに進めたい場合は、**[続行]** を選択します。ワークフローをランブック内の別の後続ステップにジャンプさせたい場合は、**[ステップ]** を選択し、ステップの名前を入力します。

## キャンセルされたアクション
<a name="cancel-actions"></a>

デフォルトでは、アクションがユーザーによってキャンセルされると、オートメーションはランブックのワークフローを完全に停止します。ランブック内のアクションの **[キャンセル時]** プロパティに代替値を指定することで、この動作を変更できます。ワークフローをランブック内の別の後続ステップにジャンプさせたい場合は、**[ステップ]** を選択し、ステップの名前を入力します。

## 重要なアクション
<a name="critical-actions"></a>

アクションをクリティカルとして指定できます。クリティカルアクションによってオートメーションの全体的なレポートステータスが決まります。この指定のステップが失敗した場合、オートメーションは、他のアクションの成功の有無にかかわらず、失敗の最終的なステータスを `Failed` としてレポートします。アクションをクリティカルとして設定するには、**[クリティカルですか]** プロパティのデフォルト値を **[真]** のままにします。

## アクションを終了する
<a name="end-actions"></a>

**[停止ですか]** プロパティでは、指定されたアクションの最後にオートメーションを停止します。このプロパティのデフォルト値は `false` です。アクションにこのプロパティを設定すると、アクションが成功するか失敗するかに関わらず、オートメーションは停止します。このプロパティは、予期しない入力値や未定義の入力値を処理する `aws:branch` アクションで最もよく使用されます。次の例は、`running`、`stopping` または `stopped` のどちらかのインスタンス状態を想定しているランブックを示しています。インスタンスの状態が異なる場合、自動化は終了します。

![\[ビジュアルデザインエクスペリエンスは最終例です\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_is_end_example.png)


# チュートリアル: ビジュアルデザインエクスペリエンスを使用したランブックの作成
<a name="visual-designer-tutorial"></a>

このチュートリアルでは、Systems Manager Automation が提供するビジュアルデザインエクスペリエンスを使用した作業の基本について学習します。ビジュアルデザインエクスペリエンスでは、複数のアクションを使用するランブックを作成できます。ドラッグアンドドロップ機能を使用して、キャンバス上のアクションを整理します。また、これらのアクションを検索、選択、設定することもできます。次に、ランブックのワークフロー用に自動生成された YAML コードを表示したり、ビジュアルデザインエクスペリエンスを終了したり、ランブックを実行したり、実行の詳細を確認したりできます。

このチュートリアルでは、ランブックを更新して新しいバージョンを表示する方法も説明します。チュートリアルを最後までやると、クリーンアップステップを実行し、ランブックを削除します。

このチュートリアルを完了すると、ビジュアルデザインエクスペリエンスを使用してランブックを作成する方法がわかります。また、ランブックを更新、実行、削除する方法もわかります。

**注記**  
このチュートリアルを開始する前に、[オートメーションの設定](automation-setup.md) を完了していることを確認してください。

**Topics**
+ [ステップ 1: ビジュアルデザインエクスペリエンスに移動](#navigate-console)
+ [ステップ 2: ワークフローを作成する](#create-workflow)
+ [ステップ 3: 自動生成されたコードを確認する](#view-generated-code)
+ [ステップ 4: 新しいランブックを実行する](#use-tutorial-runbook)
+ [ステップ 5：クリーンアップ](#cleanup-tutorial-runbook)

## ステップ 1: ビジュアルデザインエクスペリエンスに移動
<a name="navigate-console"></a>

1. [Systems Manager オートメーションコンソール](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/)にサインインします。

1. **[オートメーションを作成]** を選択してランブックを保存します。

## ステップ 2: ワークフローを作成する
<a name="create-workflow"></a>

ビジュアルデザインエクスペリエンスでは、ワークフローはランブックをキャンバス上にグラフィカルに表示したものです。ビジュアルデザインエクスペリエンスを使用して、ランブックの個々のアクションを定義、設定、および検証できます。

**ワークフローを作成するには**

1. **[デザイン]** と **[コード]** トグルの横にある鉛筆アイコンを選択し、ランブックの名前を入力します。このチュートリアルでは、**VisualDesignExperienceTutorial** と入力します。  
![\[ビジュアルデザイン経験のある方は、ランブックに名前を付けてください。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_tutorial_name.png)

1. **[フォーム]** パネルの **[ドキュメント属性]** セクションで、**[入力パラメーター]** ドロップダウンを展開し、**[パラメーターを追加]** を選択します。

   1. **[パラメータ名]** セクションに「**InstanceId**」と入力します。

   1. **[タイプ]** ドロップダウンで、**[AWS:: EC2:: インスタンス]** を選択します。

   1. **[必須]** トグルを選択します。  
![\[ランブックのパラメーターを作成します。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_actions_tutorial_parameter.png)

1. **[AWSAPI]** ブラウザで検索バーに「**DescribeInstances**」と入力します。

1. **[Amazon EC2 — DescribeInstances]** アクションを空のキャンバスにドラッグします。

1. **[名前]** に値を入力します。このチュートリアルでは、名として **GetInstanceState** を使用します。  
![\[Amazon EC2 記述インスタンス API アクションを選択します。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_tutorial_api_action.png)

   1. **[その他の入力]** ドロップダウンを展開し、**[入力名]** フィールドに「**InstanceIds**」と入力します。

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

   1. **[入力値]** フィールドで、**InstanceId** 文書入力を選択します。これは、プロシージャの最初に作成した入力パラメータの値を参照します。`DescribeInstances` アクションの **InstanceIds** 入力は `StringList` 値を受け入れるため、**InstanceId** 入力を角括弧で囲む必要があります。**[入力値]** の YAML は **['\$1\$1 InstanceId \$1\$1']** と一致する必要があります。

   1. **[出力]** タブで **[出力を追加]** を選択し、**[名前]** フィールドに **InstanceState** を入力します。

   1. **[セレクター]** フィールドに、**\$1.Reservations[0].Instances[0].State.Name** と入力します。

   1. **[タイプ]** ドロップダウンで **[文字列]** を選択します。

1. **[アクション]** ブラウザーから **[ブランチ]** アクションをドラッグし、**`GetInstanceState`** ステップの下にドロップします。

1. **[名前]** に値を入力します。このチュートリアルでは、名前 `BranchOnInstanceState` を使用します。

   分岐ロジックを定義するには、次の手順を実行します。

   1. **`Branch`** キャンバス上の状態を選択します。次に、**[入力]** と **[選択肢]** で鉛筆アイコンを選択し、**[ルール \$11]** を編集します。

   1. **[条件を追加]** を選択します。

   1. **[ルール \$11 の条件]** ダイアログボックスで、**[変数]** ドロップダウンから **GetInstanceState.InstanceState** ステップ出力を選択します。

   1. **[演算子]** で、**[次と等しい]** を選択します。

   1. **[値]** には、ドロップダウンリストから **[文字列]** を選択します。**stopped** と入力します。  
![\[ブランチアクションの条件を定義します。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_tutorial_condition.png)

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

   1. **[新しいルールを追加]** を選択します。

   1. **[ルール \$12]** の **[条件を追加]** を選択します。

   1. **[ルール \$12 の条件]** ダイアログボックスで、**[変数]** ドロップダウンから **GetInstanceState.InstanceState** ステップ出力を選択します。

   1. **[演算子]** で、**[次と等しい]** を選択します。

   1. **[値]** には、ドロップダウンリストから **[文字列]** を選択します。**stopping** と入力します。

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

   1. **[新しいルールを追加]** を選択します。

   1. **[ルール \$13]** で **[条件を追加]** を選択します。

   1. **[ルール \$13 の条件]** ダイアログボックスで、**[変数]** ドロップダウンから **GetInstanceState.InstanceState** ステップ出力を選択します。

   1. **[演算子]** で、**[次と等しい]** を選択します。

   1. **[値]** には、ドロップダウンリストから **[文字列]** を選択します。**running** と入力します。

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

   1. **[デフォルトルール]** で、**[デフォルトステップ]** の **[最後まで進む]** を選択します。

1. **\$1\$1 GetInstanceState.InstanceState \$1\$1 == "stopped"** 条件の下にある空の **[インスタンス状態を変更]** アクションを、空の **[ここにドラッグ]** ボックスにドラッグします。

   1. **[ステップ名]** には、と入力します。**StartInstance**

   1. **[入力]** タブの **[インスタンス ID]** で、ドロップダウンから **[InstanceId]** ドキュメントの入力値を選択します。

   1. **[希望する状態]** には **`running`** を指定します。

1. **\$1\$1 GetInstanceState.InstanceState \$1\$1 == "stopping"** 条件の下にある空の **[AWSリソースを待つ]** アクションを、空の **[ここにドラッグ]** ボックスにドラッグします。

1. **[名前]** に値を入力します。このチュートリアルでは、名前 `WaitForInstanceStop` を使用します。

   1. **[サービス]** フィールドには **[Amazon EC2]** を選択します。

   1. **[API]** フィールドでは、**[DescribeInstances]** を選択します。

   1. **[プロパティセレクター]** フィールドには、**\$1.Reservations[0].Instances[0].State.Name** と入力します。

   1. **[希望値]** パラメータには、**`["stopped"]`** と入力します。

   1. **[WaitForInstanceStop]** アクションの **[設定]** タブで、**[次のステップ]** ドロップダウンから **[インスタンスを開始]** を選択します。

1. **\$1\$1 GetInstanceState.InstanceState \$1\$1 == "running"** 条件の下にある空の **[インスタンスでコマンドを実行]** アクションを、空の **[ここにドラッグ]** ボックスにドラッグします。

1. **[ステップ名]** には、と入力します。**SayHello**

   1. **[入力]** タブで、**[ドキュメント名]** パラメータに「**AWS-RunShellScript**」と入力します。

   1. **[InstanceIds]** については、ドロップダウンから **[InstanceId]** ドキュメントの入力値を選択します。

   1. **[追加入力]** ドロップダウンを展開し、**[入力名]** ドロップダウンで **[パラメータ]** を選択します。

   1. **[値入力]** フィールドに **`{"commands": "echo 'Hello World'"}`** を入力します。

1. 完成したランブックをキャンバスで確認し、**[ランブック作成]** を選択してチュートリアルランブックを保存します。  
![\[ランブックを確認し、作成します。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/visual_designer_tutorial_complete.png)

## ステップ 3: 自動生成されたコードを確認する
<a name="view-generated-code"></a>

**[アクション]** ブラウザーからキャンバスにアクションをドラッグアンドドロップすると、ビジュアルデザインエクスペリエンスによってランブックの YAML または JSON コンテンツがリアルタイムで自動的に作成されます。このコードは表示および編集できます。自動生成されたコードを表示するには、**[デザイン]** と **[コード]** トグルの **[コード]** を選択します。

## ステップ 4: 新しいランブックを実行する
<a name="use-tutorial-runbook"></a>

ランブックを作成したら、オートメーションを実行できます。

**新しい自動化ランブックを実行するには**

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

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

1. [**Automation document (自動化ドキュメント)**] リストで、ランブックを選択します。[**Document categories (ドキュメントカテゴリ)**] ペインで 1 つ以上のオプションを選択して、目的に応じて SSM ドキュメントをフィルタリングします。自分が所有するランブックを表示するには、[**Owned by me (自分が所有)**] タブを選択します。自分のアカウントと共有されているランブックを表示するには、[**Shared with me (共有ファイル)**] タブを選択します。すべてのランブックを表示するには、[**すべてのドキュメント**] タブを選択します。
**注記**  
ランブックの名前を選択すると、ランブックに関する情報を表示できます。

1. [**Document details (ドキュメントの詳細)**] セクションで、[**Document version (ドキュメントのバージョン)**] が実行するバージョンに設定されていることを確認します。システムには、次のバージョンのオプションが含まれています。
   + **[ランタイムのデフォルトバージョン]**: 自動化ランブックが定期的に更新され、新しいデフォルトバージョンが割り当てられている場合は、このオプションを選択します。
   + **[ランタイムの最新バージョン]**: 自動化ランブックが定期的に更新され、直前に更新されたバージョンを実行する場合は、このオプションを選択します。
   + **[1 (デフォルト)]**: ドキュメントの最初のバージョンを実行するには、このオプションを選択します。これはデフォルト設定です。

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

1. **[オートメーションランブックの実行]** セクションで、**[シンプルな実行]** を選択します。

1. [**Input parameters (入力パラメータ)**] セクションで、必要な入力を指定します。必要に応じて、[**AutomationAssumeRole**] リストから IAM サービスロールを選択できます。

1. (オプション) モニタリング用のオートメーションに適用する Amazon CloudWatch アラームを選択します。CloudWatch アラームをオートメーションにアタッチするには、コマンドを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。アラームが作動すると、オートメーションは停止されます。AWS CloudTrail を使用する場合、トレイルに API コールが表示されます。

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

## ステップ 5：クリーンアップ
<a name="cleanup-tutorial-runbook"></a>

**ランブックを削除するには**

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

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

1. **[自分が所有]** タブを選択します。

1. **[ビジュアルデザインエクスペリエンスチュートリアル]** のランブックを探してください。

1. ドキュメントカードページのボタンを選択し、**[アクション]** ドロップダウンから **[ドキュメントを削除]** を選択します。

# オートメーションランブックのオーサリング
<a name="automation-authoring-runbooks"></a>

AWS Systems Manager のツールである Automation の各ランブックは、オートメーションを定義します。オートメーションランブックは、オートメーション中に実行されるアクションを定義します。ランブックコンテンツでは、Systems Manager が管理対象インスタンスと AWS リソースで実行する入力パラメータ、出力、およびアクションを定義します。

Automation には、いくつかのランブックが事前に定義されており、1 つ以上の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの再起動や、Amazon Machine Image (AMI) の作成といった一般的なタスクを実行する際に使用することができます。ただし、ユースケースは、事前定義されたランブックの機能を超える場合があります。このような場合は、独自のランブックを作成し、必要に応じて変更することができます。

ランブックは、オートメーションアクション、それらのアクションのパラメータ、および指定した入力パラメータで構成されます。ランブックのコンテンツは YAML または JSON のいずれかで記述されています。YAML と JSON のどちらにも精通していない場合は、ビジュアルデザイナーを使用するか、独自のランブックを作成する前に、いずれかのマークアップ言語について学習することをお勧めします。ビジュアルデザイナーの詳細については、「[オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md)」を参照してください。

以降のセクションは、最初のランブックの作成に役立ちます。

## ユースケースの特定
<a name="automation-authoring-runbooks-use-case"></a>

ランブック作成の最初のステップは、ユースケースの特定です。例えば、`AWS-CreateImage` ランブックを Amazon EC2 インスタンスのすべての本番環境で毎日実行するようにスケジューリングしたとします。月末に、イメージ数がリカバリーポイント用に必要な分を超えていると判断しました。今後は、Amazon EC2 インスタンスの AMI が新しく作成されるたびに、最も古い AMI から削除したいと考えました。これを行うには、次の処理を実行するランブックを新規作成します。

1. `aws:createImage` アクションを実行して、イメージの説明でインスタンス ID を指定します。

1. `aws:waitForAwsResourceProperty` アクションを実行して、`available` になるまでイメージの状態をポーリングします。

1. イメージの状態が `available` になると、`aws:executeScript` アクションがカスタム Python スクリプトを実行し、Amazon EC2 インスタンスに関連付けられている全イメージの ID を収集します。スクリプトは、作成時に指定したイメージ記述のインスタンス ID を使用して、フィルタリングによってこれを実行します。次にスクリプトは、イメージの `creationDate` に基づいてイメージ ID のリストをソートし、最も古い AMI の ID を出力します。

1. 最後に、`aws:deleteImage` アクションが実行され、前のステップで出力された ID を使用して、最も古い AMI が削除されます。

このシナリオでは、既に `AWS-CreateImage` ランブックを使用してはいたものの、ユースケースではさらなる柔軟性が必要であることがわかりました。ランブックとオートメーションアクションが重複する可能性があるため、これは一般的な状況です。結果として、ユースケースに対処するために使用するランブックやアクションを調整する必要がある場合があります。

例えば、`aws:executeScript` と `aws:invokeLambdaFunction` のアクションでは、どちらでもオートメーションの一部としてカスタムスクリプトを実行できます。この 2 つの間では、サポートされているランタイム言語が追加されているため、`aws:invokeLambdaFunction` の方を選ぶことにになるかもしれません。ただし、スクリプトコンテンツを YAML ランブックで直接作成でき、スクリプトコンテンツを JSON ランブックの添付ファイルとして提供できるため、`aws:executeScript` の方がよいこともあります。また、`aws:executeScript` のほうが AWS Identity and Access Management (IAM) のセットアップという観点からはよりシンプルであるという点も検討すべきかもしれません。`AutomationAssumeRole` で提供されるアクセス許可を使用するため、`aws:executeScript` では、追加の AWS Lambda 関数の実行ロールは必要ありません。

特定のシナリオでは、あるアクションが別のアクションよりも柔軟性、または追加機能を提供する可能性があります。したがって、使用するランブックまたはアクションで使用可能な入力パラメータを確認して、ユースケースとプリファレンスに最適なものを判断することをお勧めします。

## 開発環境をセットアップする
<a name="automation-authoring-runbooks-environment"></a>

ユースケースと、ランブックで使用する事前定義済みのランブックまたはオートメーションアクションを特定したら、ランブックのコンテンツ用に開発環境をセットアップします。ランブックコンテンツを開発するには、Systems Manager ドキュメントコンソールよりも AWS Toolkit for Visual Studio Code を使用することを推奨します。

Toolkit for VS Code は、Visual Studio Code (VS Code) のオープンソースの拡張機能であり、Systems Manager ドキュメントコンソールよりも多くの機能を提供します。便利な機能には、YAML と JSON の両方のスキーマ検証、オートメーションアクションタイプのスニペット、YAML と JSON の両方のさまざまなオプションのオートコンプリートのサポートなどがあります。

Toolkit for VS Code のインストールについては、[AWS Toolkit for Visual Studio Code のインストール](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html)を参照してください。Toolkit for VS Code を使用してランブックを作成する方法については、*AWS Toolkit for Visual Studio Code ユーザーガイド*の「[Systems Manager オートメーションドキュメントの使用](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html)」を参照してください。

## ランブックコンテンツの開発
<a name="automation-authoring-runbooks-developing-content"></a>

ユースケースを特定して環境をセットアップしたら、ランブック用のコンテンツを開発できます。ユースケースとプリファレンスは、ランブックコンテンツで使用するオートメーションアクションまたはランブックに大きく影響します。一部のアクションでは、同様のタスクを実行できる別のアクションと比較して、入力パラメータのサブセットのみがサポートされます。`aws:createImage` のように特定の出力を持つアクションがありますが、中には独自の出力 (`aws:executeAwsApi` など)を定義できるアクションもあります。

ランブックで特定のアクションを使用する方法がわからない場合は、[Systems Manager Automation アクションのリファレンス](automation-actions.md) のアクションに対応するエントリを見直すことをお勧めします。また、定義済みのランブックの内容を確認して、これらのアクションの使用方法の実例を確認することもお勧めします。ランブックの実際のアプリケーションの例については、[その他のランブックの例](automation-document-examples.md) を参照してください。

ランブックのコンテンツが提供するシンプルさと柔軟性の違いを実証するために、以下のチュートリアルでは、Amazon EC2 インスタンスのグループに段階的にパッチを適用する方法の例を示します。
+ [例 1: 親子のランブックの作成](automation-authoring-runbooks-parent-child-example.md) — この例では、2 つのランブックが親子関係で使用されています。親ランブックが、子ランブックのレート制御のオートメーションを開始します。
+ [例 2: スクリプト化されたランブック](automation-authoring-runbooks-scripted-example.md) — この例では、コンテンツを 1 つのランブックと判断してランブックでスクリプトを使用することにより、例 1 と同じタスクを実行する方法を示します。

# 例 1: 親子のランブックの作成
<a name="automation-authoring-runbooks-parent-child-example"></a>

以下の例は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのタグ付きグループに段階的にパッチを適用する 2 つのランブックを作成する方法を示しています。これらのランブックは、親ランブックを使用して子ランブックのレート制御のオートメーションを開始する、親子の関係で使用されます。レート制御のオートメーションの詳細については、「[自動オペレーションを大規模に実行する](running-automations-scale.md)」を参照してください。この例で使用されているオートメーションアクションの詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

## 子ランブックの作成
<a name="automation-authoring-runbooks-child-runbook"></a>

このランブック例では、次のシナリオに対処します。Emily は AnyCompany Consultants, LLC のシステムエンジニアです。プライマリデータベースとセカンダリデータベースをホスティングしている Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのグループに対して、パッチ適用を設定する必要があります。アプリケーションはこれらのデータベースに 24 時間アクセスするため、データベースインスタンスのいずれかは常に利用可能でなければなりません。

彼女は、段階的にインスタンスにパッチを適用することが最善のアプローチであると判断しました。まずはデータベースインスタンスのプライマリグループにパッチが適用され、続いてデータベースインスタンスのセカンダリグループにパッチが適用される予定です。また、以前に停止したインスタンスを実行したままにすることで追加コストが発生しないように、Emily はパッチ適用されたインスタンスをパッチ適用前の元の状態に戻したいと考えています。

Emily は、インスタンスに関連付けられたタグによって、データベースインスタンスのプライマリグループとセカンダリグループを識別します。子ランブックのレート制御のオートメーションを開始する親ランブックを作成することにしました。これにより、データベースインスタンスのプライマリグループとセカンダリグループに関連付けられたタグをターゲットにし、子のオートメーションの同時実行を管理できます。パッチ適用に使用できる Systems Manager (SSM) ドキュメントを確認した後、`AWS-RunPatchBaseline` ドキュメントを選択します。この SSM ドキュメントを使用することで、同僚は、パッチ適用操作の完了後に、関連するパッチコンプライアンス情報を確認できます。

ランブックコンテンツの作成を開始するために、Emily は利用可能なオートメーションアクションを確認し、子ランブックのコンテンツの作成を次のように開始します。

1. まず、ランブックのスキーマの値と説明を提供し、子ランブックの入力パラメータを定義します。

   `AutomationAssumeRole` パラメータを使用すると、Emily とその同僚は、ランブックで彼らに代わってアクションを実行することをオートメーションに許可する既存の IAM ロールを使用できます。Emily は `InstanceId` パラメータを使用して、パッチを適用するインスタンスを決定します。オプションで、`Operation`、`RebootOption`、および `SnapshotId` パラメータを使用して、`AWS-RunPatchBaseline` のドキュメントパラメータに値を提供できます。これらのドキュメントパラメータに無効な値が提供されるのを防ぐために、必要に応じて `allowedValues` を定義します。

------
#### [ YAML ]

   ```
   schemaVersion: '0.3'
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: >-
         '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the
         actions on your behalf. If no role is specified, Systems Manager
         Automation uses your IAM permissions to operate this runbook.'
       default: ''
     InstanceId:
       type: String
       description: >-
         '(Required) The instance you want to patch.'
     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
   ```

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

   ```
   {
      "schemaVersion":"0.3",
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default":""
         },
         "InstanceId":{
            "type":"String",
            "description":"(Required) The instance you want to patch."
         },
         "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"
         }
      }
   },
   ```

------

1. 最上位の要素が定義された状態で、Emily はランブックの `mainSteps` を構成するアクションの作成に進みます。最初のステップでは、`aws:executeAwsApi` アクションを使用して、`InstanceId` 出力パラメータで指定したターゲットインスタンスの現在の状態を出力します。このアクションの出力は、後のアクションで使用します。

------
#### [ YAML ]

   ```
   mainSteps:
     - name: getInstanceState
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
       outputs:
         - Name: instanceState
           Selector: '$.Reservations[0].Instances[0].State.Name'
           Type: String
       nextStep: branchOnInstanceState
   ```

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

   ```
   "mainSteps":[
         {
            "name":"getInstanceState",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "inputs":null,
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "outputs":[
               {
                  "Name":"instanceState",
                  "Selector":"$.Reservations[0].Instances[0].State.Name",
                  "Type":"String"
               }
            ],
            "nextStep":"branchOnInstanceState"
         },
   ```

------

1. Emily は、手動で開始してパッチを適用する必要があるすべてのインスタンスの元の状態を追跡するのではなく、前のアクションの出力を使用して、ターゲットインスタンスの状態に基づいてオートメーションを分岐します。こうすることで、`aws:branch` アクションで定義される条件に応じてオートメーションで異なるステップを実行し、手動による介入なしにオートメーションの全体的な効率を向上させることができます。

   インスタンスの状態がすでに `running` の場合、`aws:runCommand` アクションを使用する `AWS-RunPatchBaseline` ドキュメントで、インスタンスにパッチを適用しオートメーションが進められます。

   インスタンスの状態が `stopping` の場合、オートメーションは `aws:waitForAwsResourceProperty` アクションを使用して `stopped` 状態になるまでインスタンスにポーリングし、`executeAwsApi` アクションを使用してインスタンスを起動し、インスタンスにパッチを適用する前に `running` の状態になるまでインスタンスにポーリングします。

   インスタンスの状態が `stopped` の場合、自動化によってインスタンスが起動され、インスタンスが `running` 状態になるまでポーリングしてから、同じアクションを使用してインスタンスにパッチを適用します。

------
#### [ YAML ]

   ```
   - name: branchOnInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: startInstance
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: stopped
            - NextStep: verifyInstanceStopped
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: stopping
            - NextStep: patchInstance
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: running
       isEnd: true
     - name: startInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StartInstances
         InstanceIds:
           - '{{InstanceId}}'
       nextStep: verifyInstanceRunning
     - name: verifyInstanceRunning
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - running
       nextStep: patchInstance
     - name: verifyInstanceStopped
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - stopped
         nextStep: startInstance
     - name: patchInstance
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 5400
       inputs:
         DocumentName: 'AWS-RunPatchBaseline'
         InstanceIds: 
         - '{{InstanceId}}'
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
   ```

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

   ```
   {
            "name":"branchOnInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"startInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"stopped"
                  },
                  {
                     "Or":[
                        {
                           "Variable":"{{getInstanceState.instanceState}}",
                           "StringEquals":"stopping"
                        }
                     ],
                     "NextStep":"verifyInstanceStopped"
                  },
                  {
                     "NextStep":"patchInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"running"
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"startInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StartInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "nextStep":"verifyInstanceRunning"
         },
         {
            "name":"verifyInstanceRunning",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "running"
               ]
            },
            "nextStep":"patchInstance"
         },
         {
            "name":"verifyInstanceStopped",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "stopped"
               ],
               "nextStep":"startInstance"
            }
         },
         {
            "name":"patchInstance",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":5400,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               }
            }
         },
   ```

------

1. パッチ適用操作が完了した後、Emily は、オートメーションがターゲットインスタンスをオートメーション開始前と同じ状態に戻すようにしたいと考えています。これは、最初のアクションでの出力を再び使用して行います。オートメーションは、`aws:branch` アクションを使用してターゲットインスタンスの元の状態に基づいて分岐します。インスタンスが以前 `running` 以外の状態にあった場合、インスタンスは停止します。インスタンスの状態が `running` であれば、オートメーションが終了します。

------
#### [ YAML ]

   ```
   - name: branchOnOriginalInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: stopInstance
             Not: 
               Variable: '{{getInstanceState.instanceState}}'
               StringEquals: running
       isEnd: true
     - name: stopInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StopInstances
         InstanceIds:
           - '{{InstanceId}}'
   ```

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

   ```
   {
            "name":"branchOnOriginalInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"stopInstance",
                     "Not":{
                        "Variable":"{{getInstanceState.instanceState}}",
                        "StringEquals":"running"
                     }
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"stopInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StopInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            }
         }
      ]
   }
   ```

------

1. Emily は完成した子ランブックコンテンツをレビューし、ターゲットインスタンスと同じ AWS アカウント と AWS リージョン でランブックを作成します。これで、親ランブックのコンテンツの作成を続行する準備が整いました。完成した子ランブックのコンテンツは次のとおりです。

------
#### [ YAML ]

   ```
   schemaVersion: '0.3'
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: >-
         '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the
         actions on your behalf. If no role is specified, Systems Manager
         Automation uses your IAM permissions to operate this runbook.'
       default: ''
     InstanceId:
       type: String
       description: >-
         '(Required) The instance you want to patch.'
     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: getInstanceState
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
       outputs:
         - Name: instanceState
           Selector: '$.Reservations[0].Instances[0].State.Name'
           Type: String
       nextStep: branchOnInstanceState
     - name: branchOnInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: startInstance
             Variable: '{{getInstanceState.instanceState}}'
             StringEquals: stopped
           - Or:
               - Variable: '{{getInstanceState.instanceState}}'
                 StringEquals: stopping
             NextStep: verifyInstanceStopped
           - NextStep: patchInstance
             Variable: '{{getInstanceState.instanceState}}'
             StringEquals: running
       isEnd: true
     - name: startInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StartInstances
         InstanceIds:
           - '{{InstanceId}}'
       nextStep: verifyInstanceRunning
     - name: verifyInstanceRunning
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - running
       nextStep: patchInstance
     - name: verifyInstanceStopped
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - stopped
         nextStep: startInstance
     - name: patchInstance
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 5400
       inputs:
         DocumentName: 'AWS-RunPatchBaseline'
         InstanceIds: 
         - '{{InstanceId}}'
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
     - name: branchOnOriginalInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: stopInstance
             Not: 
               Variable: '{{getInstanceState.instanceState}}'
               StringEquals: running
       isEnd: true
     - name: stopInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StopInstances
         InstanceIds:
           - '{{InstanceId}}'
   ```

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

   ```
   {
      "schemaVersion":"0.3",
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"'(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'",
            "default":""
         },
         "InstanceId":{
            "type":"String",
            "description":"'(Required) The instance you want to patch.'"
         },
         "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":"getInstanceState",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "inputs":null,
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "outputs":[
               {
                  "Name":"instanceState",
                  "Selector":"$.Reservations[0].Instances[0].State.Name",
                  "Type":"String"
               }
            ],
            "nextStep":"branchOnInstanceState"
         },
         {
            "name":"branchOnInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"startInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"stopped"
                  },
                  {
                     "Or":[
                        {
                           "Variable":"{{getInstanceState.instanceState}}",
                           "StringEquals":"stopping"
                        }
                     ],
                     "NextStep":"verifyInstanceStopped"
                  },
                  {
                     "NextStep":"patchInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"running"
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"startInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StartInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "nextStep":"verifyInstanceRunning"
         },
         {
            "name":"verifyInstanceRunning",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "running"
               ]
            },
            "nextStep":"patchInstance"
         },
         {
            "name":"verifyInstanceStopped",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "stopped"
               ],
               "nextStep":"startInstance"
            }
         },
         {
            "name":"patchInstance",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":5400,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               }
            }
         },
         {
            "name":"branchOnOriginalInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"stopInstance",
                     "Not":{
                        "Variable":"{{getInstanceState.instanceState}}",
                        "StringEquals":"running"
                     }
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"stopInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StopInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            }
         }
      ]
   }
   ```

------

この例で使用されているオートメーションアクションの詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

## 親ランブックの作成
<a name="automation-authoring-runbooks-parent-runbook"></a>

この例のランブックのシナリオは、前のセクションで説明したシナリオと同じです。子ランブックを作成した Emily は、次のように親ランブックのコンテンツの作成を開始します。

1. まず、ランブックのスキーマの値と説明を提供し、親ランブックの入力パラメータを定義します。

   `AutomationAssumeRole` パラメータを使用すると、Emily とその同僚は、ランブックで彼らに代わってアクションを実行することをオートメーションに許可する既存の IAM ロールを使用できます。Emily は `PatchGroupPrimaryKey` と `PatchGroupPrimaryValue` のパラメータを使用して、パッチを適用するデータベースインスタンスのプライマリグループに関連付けられたタグを指定します。`PatchGroupSecondaryKey` と `PatchGroupSecondaryValue` のパラメータを使用して、パッチを適用するデータベースインスタンスのセカンダリグループに関連付けられたタグを指定します。

------
#### [ YAML ]

   ```
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
       default: ''
     PatchGroupPrimaryKey:
       type: String
       description: '(Required) The key of the tag for the primary group of instances you want to patch.''
     PatchGroupPrimaryValue:
       type: String
       description: '(Required) The value of the tag for the primary group of instances you want to patch.'
     PatchGroupSecondaryKey:
       type: String
       description: '(Required) The key of the tag for the secondary group of instances you want to patch.'
     PatchGroupSecondaryValue:
       type: String
       description: '(Required) The value of the tag for the secondary group of instances you want to patch.'
   ```

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

   ```
   {
      "schemaVersion": "0.3",
      "description": "An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole": "{{AutomationAssumeRole}}",
      "parameters": {
         "AutomationAssumeRole": {
            "type": "String",
            "description": "(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default": ""
         },
         "PatchGroupPrimaryKey": {
            "type": "String",
            "description": "(Required) The key of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupPrimaryValue": {
            "type": "String",
            "description": "(Required) The value of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupSecondaryKey": {
            "type": "String",
            "description": "(Required) The key of the tag for the secondary group of instances you want to patch."
         },
         "PatchGroupSecondaryValue": {
            "type": "String",
            "description": "(Required) The value of the tag for the secondary group of instances you want to patch."
         }
      }
   },
   ```

------

1. 最上位の要素が定義された状態で、Emily はランブックの `mainSteps` を構成するアクションの作成に進みます。

   最初のアクションは、作成した子ランブックを使用してレート制御のオートメーションを開始します。この子ランブックは、`PatchGroupPrimaryKey` と `PatchGroupPrimaryValue` の入力パラメータで指定されるタグに関連付けられたインスタンスをターゲットしています。入力パラメータに指定された値を使用して、パッチを適用するデータベースインスタンスのプライマリグループに関連付けられたタグのキーと値を指定します。

   最初のオートメーションが完了すると、2 番目のアクションが子ランブックを使用して別のレート制御のオートメーションを開始します。この子ランブックは、`PatchGroupSecondaryKey` と `PatchGroupSecondaryValue` の入力パラメータで指定されるタグに関連付けられたインスタンスをターゲットしています。入力パラメータに指定された値を使用して、パッチを適用するデータベースインスタンスのセカンダリグループに関連付けられたタグのキーと値を指定します。

------
#### [ YAML ]

   ```
   mainSteps:
     - name: patchPrimaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupPrimaryKey}}'
             Values:
               - '{{PatchGroupPrimaryValue}}'
         TargetParameterName: 'InstanceId'
     - name: patchSecondaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupSecondaryKey}}'
             Values:
               - '{{PatchGroupSecondaryValue}}'
         TargetParameterName: 'InstanceId'
   ```

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

   ```
   "mainSteps":[
         {
            "name":"patchPrimaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupPrimaryKey}}",
                     "Values":[
                        "{{PatchGroupPrimaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         },
         {
            "name":"patchSecondaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupSecondaryKey}}",
                     "Values":[
                        "{{PatchGroupSecondaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         }
      ]
   }
   ```

------

1. Emily は完成した親ランブックコンテンツをレビューし、ターゲットインスタンスと同じ AWS アカウント と AWS リージョン でランブックを作成します。これで、ランブックをテストして、オートメーションが希望どおりに動作していることを確認してから、本番環境に実装する準備が整いました。完成した親ランブックのコンテンツは次のとおりです。

------
#### [ YAML ]

   ```
   description: An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
       default: ''
     PatchGroupPrimaryKey:
       type: String
       description: (Required) The key of the tag for the primary group of instances you want to patch.
     PatchGroupPrimaryValue:
       type: String
       description: '(Required) The value of the tag for the primary group of instances you want to patch. '
     PatchGroupSecondaryKey:
       type: String
       description: (Required) The key of the tag for the secondary group of instances you want to patch.
     PatchGroupSecondaryValue:
       type: String
       description: '(Required) The value of the tag for the secondary group of instances you want to patch.  '
   mainSteps:
     - name: patchPrimaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupPrimaryKey}}'
             Values:
               - '{{PatchGroupPrimaryValue}}'
         TargetParameterName: 'InstanceId'
     - name: patchSecondaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupSecondaryKey}}'
             Values:
               - '{{PatchGroupSecondaryValue}}'
         TargetParameterName: 'InstanceId'
   ```

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

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default":""
         },
         "PatchGroupPrimaryKey":{
            "type":"String",
            "description":"(Required) The key of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupPrimaryValue":{
            "type":"String",
            "description":"(Required) The value of the tag for the primary group of instances you want to patch. "
         },
         "PatchGroupSecondaryKey":{
            "type":"String",
            "description":"(Required) The key of the tag for the secondary group of instances you want to patch."
         },
         "PatchGroupSecondaryValue":{
            "type":"String",
            "description":"(Required) The value of the tag for the secondary group of instances you want to patch.  "
         }
      },
      "mainSteps":[
         {
            "name":"patchPrimaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupPrimaryKey}}",
                     "Values":[
                        "{{PatchGroupPrimaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         },
         {
            "name":"patchSecondaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupSecondaryKey}}",
                     "Values":[
                        "{{PatchGroupSecondaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         }
      ]
   }
   ```

------

この例で使用されているオートメーションアクションの詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

# 例 2: スクリプト化されたランブック
<a name="automation-authoring-runbooks-scripted-example"></a>

このランブック例では、次のシナリオに対処します。Emily は AnyCompany Consultants, LLC のシステムエンジニアです。彼女は先に、プライマリデータベースとセカンダリデータベースをホスティングする Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのパッチグループに対して、親子関係で使用されるランブックを 2 つ作成しました。アプリケーションはこれらのデータベースに 24 時間アクセスするため、データベースインスタンスのいずれかは常に利用可能でなければなりません。

この要件に基づいて、彼女は `AWS-RunPatchBaseline` Systems Manager (SSM) ドキュメントを使用してインスタンスを段階的にパッチするソリューションを構築しました。この SSM ドキュメントを使用することで、同僚は、パッチ適用操作の完了後に、関連するパッチコンプライアンス情報を確認できます。

まずはデータベースインスタンスのプライマリグループにパッチが適用され、続いてデータベースインスタンスのセカンダリグループにパッチが適用されます。また、以前に停止したインスタンスを実行したままにすることで追加コストが発生しないように、Emily は、オートメーションがパッチ適用されたインスタンスをパッチ適用前の元の状態に戻したことを確認しました。Emily は、データベースインスタンスのプライマリグループとセカンダリグループに関連付けられたタグを使用して、パッチを適用する必要があるインスタンスを希望する順序で特定しました。

既存の自動ソリューションは機能しますが、可能であればソリューションを改善したいと考えています。ランブックコンテンツのメンテナンスを支援し、トラブルシューティングを容易にするため、オートメーションを 1 つのランブックにまとめて、入力パラメータの数を簡素化したいと考えています。また、複数の子オートメーションは作成しないようにしたいと考えています。

利用可能なオートメーションアクションを確認した後、Emily は、`aws:executeScript` アクションを使用すればソリューションをさらに改善し、カスタム Python スクリプトを実行できると判断しました。次のようにランブックのコンテンツの作成を開始しました。

1. まず、ランブックのスキーマの値と説明を提供し、親ランブックの入力パラメータを定義します。

   `AutomationAssumeRole` パラメータを使用すると、Emily とその同僚は、ランブックで彼らに代わってアクションを実行することをオートメーションに許可する既存の IAM ロールを使用できます。[例 1](automation-authoring-runbooks-parent-child-example.md) とは異なり、`AutomationAssumeRole` パラメータはオプションではなく必須になりました。このランブックには `aws:executeScript` アクションが含まれるため、AWS Identity and Access Management (IAM) サービスロール (または継承ロール) が常に必要です。アクションに指定された Python スクリプトの一部が AWS API オペレーションを呼び出すため、この要件が必要になります。

   Emily は `PrimaryPatchGroupTag` と `SecondaryPatchGroupTag` のパラメータを使用して、パッチを適用するデータベースインスタンスのプライマリグループとセカンダリグループに関連付けられたタグを指定します。必要な入力パラメータを単純化するために、例 1 のランブックで使用したように複数の `String` パラメータを使用するのではなく、`StringMap` パラメータを使用することにしました。オプションで、`Operation`、`RebootOption`、および `SnapshotId` パラメータを使用して、`AWS-RunPatchBaseline` のドキュメントパラメータに値を提供できます。これらのドキュメントパラメータに無効な値が提供されるのを防ぐために、必要に応じて `allowedValues` を定義します。

------
#### [ YAML ]

   ```
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
     PrimaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SecondaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     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
   ```

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

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook."
         },
         "PrimaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SecondaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "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"
         }
      }
   },
   ```

------

1. 最上位の要素が定義された状態で、Emily はランブックの `mainSteps` を構成するアクションの作成に進みます。最初のステップでは、`PrimaryPatchGroupTag` パラメータで指定されるタグに関連付けられたすべてのインスタンスの ID を収集し、インスタンス ID とインスタンスの現在の状態を含む `StringMap` パラメータを出力します。このアクションの出力は、後のアクションで使用します。

   `script` 入力パラメータは、JSON ランブックではサポートされていませんのでご注意ください。JSON ランブックでは、`attachment` 入力パラメータを使用してスクリプトコンテンツを指定する必要があります。

------
#### [ YAML ]

   ```
   mainSteps:
     - name: getPrimaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['primaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifyPrimaryInstancesRunning
   ```

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

   ```
   "mainSteps":[
         {
            "name":"getPrimaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifyPrimaryInstancesRunning"
         },
   ```

------

1. Emily は、前のアクションの出力を別の `aws:executeScript` アクションで使用して、`PrimaryPatchGroupTag` パラメータで指定されたタグに関連付けられたすべてのインスタンスが `running` の状態にあることを検証します。

   インスタンスの状態がすでに `running` または `shutting-down` の場合、スクリプトは残りのインスタンスをループし続けます。

   インスタンスの状態が `stopping` の場合、スクリプトは `stopped` の状態になるまでインスタンスにポーリングし、インスタンスを起動します。

   インスタンスの状態が `stopped` の場合、スクリプトはインスタンスを起動します。

------
#### [ YAML ]

   ```
   - name: verifyPrimaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForPrimaryRunningInstances
   ```

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

   ```
   {
            "name":"verifyPrimaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForPrimaryRunningInstances"
         },
   ```

------

1. Emily は、`PrimaryPatchGroupTag` パラメータで指定されたタグに関連付けられたすべてのインスタンスが開始されているか、もしくは既に `running` の状態にあることを検証します。次に、別のスクリプトを使用して、前のアクションで開始されたインスタンスも含め、すべてのインスタンスが `running` の状態に到達していることを確認します。

------
#### [ YAML ]

   ```
   - name: waitForPrimaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnPrimaryTagKey
   ```

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

   ```
   {
            "name":"waitForPrimaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnPrimaryTagKey"
         },
   ```

------

1. Emilyは、さらに 2 つのスクリプトを使用して、`PrimaryPatchGroupTag` パラメータで指定された個々のキー `String` の値とのタグの値を返します。これらのアクションで返された値により、`AWS-RunPatchBaseline` ドキュメントの `Targets` パラメータに直接値を提供できます。その後、`aws:runCommand` アクションを使用する `AWS-RunPatchBaseline` ドキュメントで、インスタンスにパッチを適用しオートメーションが進められます。

------
#### [ YAML ]

   ```
   - name: returnPrimaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnPrimaryTagValue
     - name: returnPrimaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchPrimaryInstances
     - name: patchPrimaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnPrimaryTagKey.primaryPatchGroupKey}}'
             Values:
               - '{{returnPrimaryTagValue.primaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnPrimaryToOriginalState
   ```

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

   ```
   {
            "name":"returnPrimaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnPrimaryTagValue"
         },
         {
            "name":"returnPrimaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchPrimaryInstances"
         },
         {
            "name":"patchPrimaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnPrimaryTagKey.primaryPatchGroupKey}}",
                     "Values":[
                        "{{returnPrimaryTagValue.primaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnPrimaryToOriginalState"
         },
   ```

------

1. パッチ適用操作が完了した後、Emily はオートメーションが、`PrimaryPatchGroupTag` パラメータで指定したタグに関連付けられたターゲットインスタンスを、オートメーション開始前と同じ状態に戻すようにしたいと考えています。これは、スクリプトの最初のアクションでの出力を再び使用して行います。ターゲットインスタンスの元の状態に基づいて、インスタンスが以前 `running` 以外の状態にあった場合、インスタンスは停止します。インスタンスの状態が `running` であれば、スクリプトは残りのインスタンスをループし続けます。

------
#### [ YAML ]

   ```
   - name: returnPrimaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
       nextStep: getSecondaryInstanceState
   ```

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

   ```
   {
            "name":"returnPrimaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"getSecondaryInstanceState"
         },
   ```

------

1. `PrimaryPatchGroupTag` パラメータで指定したタグに関連付けられたインスタンスのパッチ適用操作は完了しました。これで、Emily はランブックコンテンツ内の以前のアクションをすべて複製し、`SecondaryPatchGroupTag` パラメータで指定したタグに関連付けられたインスタンスをターゲットにできるようになりました。

------
#### [ YAML ]

   ```
   - name: getSecondaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['secondaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifySecondaryInstancesRunning
     - name: verifySecondaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForSecondaryRunningInstances
     - name: waitForSecondaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnSecondaryTagKey
     - name: returnSecondaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnSecondaryTagValue
     - name: returnSecondaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchSecondaryInstances
     - name: patchSecondaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnSecondaryTagKey.secondaryPatchGroupKey}}'
             Values:
             - '{{returnSecondaryTagValue.secondaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnSecondaryToOriginalState
     - name: returnSecondaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
   ```

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

   ```
   {
            "name":"getSecondaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifySecondaryInstancesRunning"
         },
         {
            "name":"verifySecondaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForSecondaryRunningInstances"
         },
         {
            "name":"waitForSecondaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnSecondaryTagKey"
         },
         {
            "name":"returnSecondaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnSecondaryTagValue"
         },
         {
            "name":"returnSecondaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchSecondaryInstances"
         },
         {
            "name":"patchSecondaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnSecondaryTagKey.secondaryPatchGroupKey}}",
                     "Values":[
                        "{{returnSecondaryTagValue.secondaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnSecondaryToOriginalState"
         },
         {
            "name":"returnSecondaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            }
         }
      ]
   }
   ```

------

1. Emily は完成したスクリプトのランブックコンテンツをレビューし、ターゲットインスタンスと同じ AWS アカウント と AWS リージョン でランブックを作成します。これで、ランブックをテストして、オートメーションが希望どおりに動作していることを確認してから、本番環境に実装する準備が整いました。以下は、完成したスクリプト化されたランブックコンテンツです。

------
#### [ YAML ]

   ```
   description: An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
     PrimaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SecondaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     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: getPrimaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['primaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifyPrimaryInstancesRunning
     - name: verifyPrimaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForPrimaryRunningInstances
     - name: waitForPrimaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnPrimaryTagKey
     - name: returnPrimaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnPrimaryTagValue
     - name: returnPrimaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchPrimaryInstances
     - name: patchPrimaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnPrimaryTagKey.primaryPatchGroupKey}}'
             Values:
               - '{{returnPrimaryTagValue.primaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnPrimaryToOriginalState
     - name: returnPrimaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
       nextStep: getSecondaryInstanceState
     - name: getSecondaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['secondaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifySecondaryInstancesRunning
     - name: verifySecondaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForSecondaryRunningInstances
     - name: waitForSecondaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnSecondaryTagKey
     - name: returnSecondaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnSecondaryTagValue
     - name: returnSecondaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchSecondaryInstances
     - name: patchSecondaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnSecondaryTagKey.secondaryPatchGroupKey}}'
             Values:
             - '{{returnSecondaryTagValue.secondaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnSecondaryToOriginalState
     - name: returnSecondaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
   ```

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

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook."
         },
         "PrimaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SecondaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "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":"getPrimaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifyPrimaryInstancesRunning"
         },
         {
            "name":"verifyPrimaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForPrimaryRunningInstances"
         },
         {
            "name":"waitForPrimaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnPrimaryTagKey"
         },
         {
            "name":"returnPrimaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnPrimaryTagValue"
         },
         {
            "name":"returnPrimaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchPrimaryInstances"
         },
         {
            "name":"patchPrimaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnPrimaryTagKey.primaryPatchGroupKey}}",
                     "Values":[
                        "{{returnPrimaryTagValue.primaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnPrimaryToOriginalState"
         },
         {
            "name":"returnPrimaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"getSecondaryInstanceState"
         },
         {
            "name":"getSecondaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifySecondaryInstancesRunning"
         },
         {
            "name":"verifySecondaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForSecondaryRunningInstances"
         },
         {
            "name":"waitForSecondaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnSecondaryTagKey"
         },
         {
            "name":"returnSecondaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnSecondaryTagValue"
         },
         {
            "name":"returnSecondaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchSecondaryInstances"
         },
         {
            "name":"patchSecondaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnSecondaryTagKey.secondaryPatchGroupKey}}",
                     "Values":[
                        "{{returnSecondaryTagValue.secondaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnSecondaryToOriginalState"
         },
         {
            "name":"returnSecondaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            }
         }
      ]
   }
   ```

------

この例で使用されているオートメーションアクションの詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

# その他のランブックの例
<a name="automation-document-examples"></a>

次のランブック例により、AWS Systems Manager オートメーションアクションを使用して、一般的なデプロイ、トラブルシューティング、および保守タスクを自動化する方法が確認できます。

**注記**  
このセクションでは、運用上の特定のニーズをサポートするカスタムランブックを作成する方法を示すために、ランブックの例を提供しています。これらのランブックは、本番環境での使用を目的としていません。ただし、ユーザー自身で使用するためにカスタマイズすることはできます。

**Topics**
+ [VPC アーキテクチャと Microsoft Active Directory ドメインコントローラーのデプロイ](automation-document-architecture-deployment-example.md)
+ [最新のスナップショットからルートボリュームを復元する](automation-document-instance-recovery-example.md)
+ [AMI とクロスリージョンコピーの作成](automation-document-backup-maintenance-example.md)

# VPC アーキテクチャと Microsoft Active Directory ドメインコントローラーのデプロイ
<a name="automation-document-architecture-deployment-example"></a>

効率を高め、一般的なタスクを標準化するために、デプロイを自動化することができます。これは、定期的に複数のアカウントと に同じアーキテクチャをデプロイする場合に便利ですAWS リージョン また、アーキテクチャのデプロイを自動化することで、アーキテクチャを手動でデプロイするときに発生する人為的エラーの発生率を減らすことができます。AWS Systems Managerオートメーションアクションが、これを実現するのに役立ちます。Automation は AWS Systems Manager のツールです。

次の AWS Systems Manager ランブックの例では、これらのアクションを実行します。
+ ドメインコントローラーとして設定して EC2 インスタンスを起動する際に、Systems Manager Parameter Store を使用して、最新の Windows Server 2016 Amazon Machine Image (AMI) を取得します。Parameter Store は AWS Systems Manager のツールです。
+ `aws:executeAwsApi` オートメーションアクションを使用して、複数の AWS API オペレーションを呼び出して VPC アーキテクチャを作成します。ドメインコントローラーインスタンスはプライベートサブネットで起動され、NAT ゲートウェイを使用してインターネットに接続されます。これにより、インスタンスの SSM Agent は、必要な Systems Manager エンドポイントにアクセスできるようになります。
+ `aws:waitForAwsResourceProperty` オートメーションアクションを使用して、前のアクションによって起動されたインスタンスが `Online` に対してAWS Systems Manager であることを確認します。
+ `aws:runCommand` オートメーションアクションを使用して、Microsoft Active Directory ドメインコントローラーとして起動されるインスタンスを設定します。

------
#### [ YAML ]

```
    ---
    description: Custom Automation Deployment Example
    schemaVersion: '0.3'
    parameters:
      AutomationAssumeRole:
        type: String
        default: ''
        description: >-
          (Optional) 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 run this runbook.
    mainSteps:
      - name: getLatestWindowsAmi
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ssm
          Api: GetParameter
          Name: >-
            /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base
        outputs:
          - Name: amiId
            Selector: $.Parameter.Value
            Type: String
        nextStep: createSSMInstanceRole
      - name: createSSMInstanceRole
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: CreateRole
          AssumeRolePolicyDocument: >-
            {"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["ec2.amazonaws.com"]},"Action":["sts:AssumeRole"]}]}
          RoleName: sampleSSMInstanceRole
        nextStep: attachManagedSSMPolicy
      - name: attachManagedSSMPolicy
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: AttachRolePolicy
          PolicyArn: 'arn:aws:iam::aws:policy/service-role/AmazonSSMManagedInstanceCore'
          RoleName: sampleSSMInstanceRole
        nextStep: createSSMInstanceProfile
      - name: createSSMInstanceProfile
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: CreateInstanceProfile
          InstanceProfileName: sampleSSMInstanceRole
        outputs:
          - Name: instanceProfileArn
            Selector: $.InstanceProfile.Arn
            Type: String
        nextStep: addSSMInstanceRoleToProfile
      - name: addSSMInstanceRoleToProfile
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: AddRoleToInstanceProfile
          InstanceProfileName: sampleSSMInstanceRole
          RoleName: sampleSSMInstanceRole
        nextStep: createVpc
      - name: createVpc
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateVpc
          CidrBlock: 10.0.100.0/22
        outputs:
          - Name: vpcId
            Selector: $.Vpc.VpcId
            Type: String
        nextStep: getMainRtb
      - name: getMainRtb
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: DescribeRouteTables
          Filters:
            - Name: vpc-id
              Values:
                - '{{ createVpc.vpcId }}'
        outputs:
          - Name: mainRtbId
            Selector: '$.RouteTables[0].RouteTableId'
            Type: String
        nextStep: verifyMainRtb
      - name: verifyMainRtb
        action: aws:assertAwsResourceProperty
        onFailure: Abort
        inputs:
          Service: ec2
          Api: DescribeRouteTables
          RouteTableIds:
            - '{{ getMainRtb.mainRtbId }}'
          PropertySelector: '$.RouteTables[0].Associations[0].Main'
          DesiredValues:
            - 'True'
        nextStep: createPubSubnet
      - name: createPubSubnet
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.103.0/24
          AvailabilityZone: us-west-2c
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: pubSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createPubRtb
      - name: createPubRtb
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRouteTable
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: pubRtbId
            Selector: $.RouteTable.RouteTableId
            Type: String
        nextStep: createIgw
      - name: createIgw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateInternetGateway
        outputs:
          - Name: igwId
            Selector: $.InternetGateway.InternetGatewayId
            Type: String
        nextStep: attachIgw
      - name: attachIgw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AttachInternetGateway
          InternetGatewayId: '{{ createIgw.igwId }}'
          VpcId: '{{ createVpc.vpcId }}'
        nextStep: allocateEip
      - name: allocateEip
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AllocateAddress
          Domain: vpc
        outputs:
          - Name: eipAllocationId
            Selector: $.AllocationId
            Type: String
        nextStep: createNatGw
      - name: createNatGw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateNatGateway
          AllocationId: '{{ allocateEip.eipAllocationId }}'
          SubnetId: '{{ createPubSubnet.pubSubnetId }}'
        outputs:
          - Name: natGwId
            Selector: $.NatGateway.NatGatewayId
            Type: String
        nextStep: verifyNatGwAvailable
      - name: verifyNatGwAvailable
        action: aws:waitForAwsResourceProperty
        timeoutSeconds: 150
        inputs:
          Service: ec2
          Api: DescribeNatGateways
          NatGatewayIds:
            - '{{ createNatGw.natGwId }}'
          PropertySelector: '$.NatGateways[0].State'
          DesiredValues:
            - available
        nextStep: createNatRoute
      - name: createNatRoute
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRoute
          DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: '{{ createNatGw.natGwId }}'
          RouteTableId: '{{ getMainRtb.mainRtbId }}'
        nextStep: createPubRoute
      - name: createPubRoute
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRoute
          DestinationCidrBlock: 0.0.0.0/0
          GatewayId: '{{ createIgw.igwId }}'
          RouteTableId: '{{ createPubRtb.pubRtbId }}'
        nextStep: setPubSubAssoc
      - name: setPubSubAssoc
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AssociateRouteTable
          RouteTableId: '{{ createPubRtb.pubRtbId }}'
          SubnetId: '{{ createPubSubnet.pubSubnetId }}'
      - name: createDhcpOptions
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateDhcpOptions
          DhcpConfigurations:
            - Key: domain-name-servers
              Values:
                - '10.0.100.50,10.0.101.50'
            - Key: domain-name
              Values:
                - sample.com
        outputs:
          - Name: dhcpOptionsId
            Selector: $.DhcpOptions.DhcpOptionsId
            Type: String
        nextStep: createDCSubnet1
      - name: createDCSubnet1
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.100.0/24
          AvailabilityZone: us-west-2a
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: firstSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createDCSubnet2
      - name: createDCSubnet2
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.101.0/24
          AvailabilityZone: us-west-2b
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: secondSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createDCSecGroup
      - name: createDCSecGroup
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSecurityGroup
          GroupName: SampleDCSecGroup
          Description: Security Group for Sample Domain Controllers
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: dcSecGroupId
            Selector: $.GroupId
            Type: String
        nextStep: authIngressDCTraffic
      - name: authIngressDCTraffic
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AuthorizeSecurityGroupIngress
          GroupId: '{{ createDCSecGroup.dcSecGroupId }}'
          IpPermissions:
            - FromPort: -1
              IpProtocol: '-1'
              IpRanges:
                - CidrIp: 0.0.0.0/0
                  Description: Allow all traffic between Domain Controllers
        nextStep: verifyInstanceProfile
      - name: verifyInstanceProfile
        action: aws:waitForAwsResourceProperty
        maxAttempts: 5
        onFailure: Abort
        inputs:
          Service: iam
          Api: ListInstanceProfilesForRole
          RoleName: sampleSSMInstanceRole
          PropertySelector: '$.InstanceProfiles[0].Arn'
          DesiredValues:
            - '{{ createSSMInstanceProfile.instanceProfileArn }}'
        nextStep: iamEventualConsistency
      - name: iamEventualConsistency
        action: aws:sleep
        inputs:
          Duration: PT2M
        nextStep: launchDC1
      - name: launchDC1
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: RunInstances
          BlockDeviceMappings:
            - DeviceName: /dev/sda1
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 50
                VolumeType: gp2
            - DeviceName: xvdf
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 100
                VolumeType: gp2
          IamInstanceProfile:
            Arn: '{{ createSSMInstanceProfile.instanceProfileArn }}'
          ImageId: '{{ getLatestWindowsAmi.amiId }}'
          InstanceType: t2.micro
          MaxCount: 1
          MinCount: 1
          PrivateIpAddress: 10.0.100.50
          SecurityGroupIds:
            - '{{ createDCSecGroup.dcSecGroupId }}'
          SubnetId: '{{ createDCSubnet1.firstSubnetId }}'
          TagSpecifications:
            - ResourceType: instance
              Tags:
                - Key: Name
                  Value: SampleDC1
        outputs:
          - Name: pdcInstanceId
            Selector: '$.Instances[0].InstanceId'
            Type: String
        nextStep: launchDC2
      - name: launchDC2
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: RunInstances
          BlockDeviceMappings:
            - DeviceName: /dev/sda1
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 50
                VolumeType: gp2
            - DeviceName: xvdf
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 100
                VolumeType: gp2
          IamInstanceProfile:
            Arn: '{{ createSSMInstanceProfile.instanceProfileArn }}'
          ImageId: '{{ getLatestWindowsAmi.amiId }}'
          InstanceType: t2.micro
          MaxCount: 1
          MinCount: 1
          PrivateIpAddress: 10.0.101.50
          SecurityGroupIds:
            - '{{ createDCSecGroup.dcSecGroupId }}'
          SubnetId: '{{ createDCSubnet2.secondSubnetId }}'
          TagSpecifications:
            - ResourceType: instance
              Tags:
                - Key: Name
                  Value: SampleDC2
        outputs:
          - Name: adcInstanceId
            Selector: '$.Instances[0].InstanceId'
            Type: String
        nextStep: verifyDCInstanceState
      - name: verifyDCInstanceState
        action: aws:waitForAwsResourceProperty
        inputs:
          Service: ec2
          Api: DescribeInstanceStatus
          IncludeAllInstances: true
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
            - '{{ launchDC2.adcInstanceId }}'
          PropertySelector: '$.InstanceStatuses..InstanceState.Name'
          DesiredValues:
            - running
        nextStep: verifyInstancesOnlineSSM
      - name: verifyInstancesOnlineSSM
        action: aws:waitForAwsResourceProperty
        timeoutSeconds: 600
        inputs:
          Service: ssm
          Api: DescribeInstanceInformation
          InstanceInformationFilterList:
            - key: InstanceIds
              valueSet:
                - '{{ launchDC1.pdcInstanceId }}'
                - '{{ launchDC2.adcInstanceId }}'
          PropertySelector: '$.InstanceInformationList..PingStatus'
          DesiredValues:
            - Online
        nextStep: installADRoles
      - name: installADRoles
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
            - '{{ launchDC2.adcInstanceId }}'
          Parameters:
            commands: |-
              try {
                  Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
              }
              catch {
                  Write-Error "Failed to install ADDS Role."
              }
        nextStep: setAdminPassword
      - name: setAdminPassword
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
          Parameters:
            commands:
              - net user Administrator "sampleAdminPass123!"
        nextStep: createForest
      - name: createForest
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
          Parameters:
            commands: |-
              $dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force
              try {
                  Install-ADDSForest -DomainName "sample.com" -DomainMode 6 -ForestMode 6 -InstallDNS -DatabasePath "D:\NTDS" -SysvolPath "D:\SYSVOL" -SafeModeAdministratorPassword $dsrmPass -Force
              }
              catch {
                  Write-Error $_
              }
              try {
                  Add-DnsServerForwarder -IPAddress "10.0.100.2"
              }
              catch {
                  Write-Error $_
              }
        nextStep: associateDhcpOptions
      - name: associateDhcpOptions
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AssociateDhcpOptions
          DhcpOptionsId: '{{ createDhcpOptions.dhcpOptionsId }}'
          VpcId: '{{ createVpc.vpcId }}'
        nextStep: waitForADServices
      - name: waitForADServices
        action: aws:sleep
        inputs:
          Duration: PT1M
        nextStep: promoteADC
      - name: promoteADC
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC2.adcInstanceId }}'
          Parameters:
            commands: |-
              ipconfig /renew
              $dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force
              $domAdminUser = "sample\Administrator"
              $domAdminPass = "sampleAdminPass123!" | ConvertTo-SecureString -asPlainText -Force
              $domAdminCred = New-Object System.Management.Automation.PSCredential($domAdminUser,$domAdminPass)
    
              try {
                  Install-ADDSDomainController -DomainName "sample.com" -InstallDNS -DatabasePath "D:\NTDS" -SysvolPath "D:\SYSVOL" -SafeModeAdministratorPassword $dsrmPass -Credential $domAdminCred -Force
              }
              catch {
                  Write-Error $_
              }
```

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

```
{
      "description": "Custom Automation Deployment Example",
      "schemaVersion": "0.3",
      "assumeRole": "{{ AutomationAssumeRole }}",
      "parameters": {
        "AutomationAssumeRole": {
          "type": "String",
          "description": "(Optional) 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 run this runbook.",
          "default": ""
        }
      },
      "mainSteps": [
        {
          "name": "getLatestWindowsAmi",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ssm",
            "Api": "GetParameter",
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base"
          },
          "outputs": [
            {
              "Name": "amiId",
              "Selector": "$.Parameter.Value",
              "Type": "String"
            }
          ],
          "nextStep": "createSSMInstanceRole"
        },
        {
          "name": "createSSMInstanceRole",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "CreateRole",
            "AssumeRolePolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "attachManagedSSMPolicy"
        },
        {
          "name": "attachManagedSSMPolicy",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "AttachRolePolicy",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonSSMManagedInstanceCore",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "createSSMInstanceProfile"
        },
        {
          "name": "createSSMInstanceProfile",
          "action":"aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "CreateInstanceProfile",
            "InstanceProfileName": "sampleSSMInstanceRole"
          },
          "outputs": [
            {
              "Name": "instanceProfileArn",
              "Selector": "$.InstanceProfile.Arn",
              "Type": "String"
            }
          ],
          "nextStep": "addSSMInstanceRoleToProfile"
        },
        {
          "name": "addSSMInstanceRoleToProfile",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "AddRoleToInstanceProfile",
            "InstanceProfileName": "sampleSSMInstanceRole",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "createVpc"
        },
        {
          "name": "createVpc",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateVpc",
            "CidrBlock": "10.0.100.0/22"
          },
          "outputs": [
            {
              "Name": "vpcId",
              "Selector": "$.Vpc.VpcId",
              "Type": "String"
            }
          ],
          "nextStep": "getMainRtb"
        },
        {
          "name": "getMainRtb",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeRouteTables",
            "Filters": [
              {
                "Name": "vpc-id",
                "Values": ["{{ createVpc.vpcId }}"]
              }
            ]
          },
          "outputs": [
            {
              "Name": "mainRtbId",
              "Selector": "$.RouteTables[0].RouteTableId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyMainRtb"
        },
        {
          "name": "verifyMainRtb",
          "action": "aws:assertAwsResourceProperty",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeRouteTables",
            "RouteTableIds": ["{{ getMainRtb.mainRtbId }}"],
            "PropertySelector": "$.RouteTables[0].Associations[0].Main",
            "DesiredValues": ["True"]
          },
          "nextStep": "createPubSubnet"
        },
        {
          "name": "createPubSubnet",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.103.0/24",
            "AvailabilityZone": "us-west-2c",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs":[
            {
              "Name": "pubSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createPubRtb"
        },
        {
          "name": "createPubRtb",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRouteTable",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "pubRtbId",
              "Selector": "$.RouteTable.RouteTableId",
              "Type": "String"
            }
          ],
          "nextStep": "createIgw"
        },
        {
          "name": "createIgw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateInternetGateway"
          },
          "outputs": [
            {
              "Name": "igwId",
              "Selector": "$.InternetGateway.InternetGatewayId",
              "Type": "String"
            }
          ],
          "nextStep": "attachIgw"
        },
        {
          "name": "attachIgw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AttachInternetGateway",
            "InternetGatewayId": "{{ createIgw.igwId }}",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "nextStep": "allocateEip"
        },
        {
          "name": "allocateEip",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AllocateAddress",
            "Domain": "vpc"
          },
          "outputs": [
            {
              "Name": "eipAllocationId",
              "Selector": "$.AllocationId",
              "Type": "String"
            }
          ],
          "nextStep": "createNatGw"
        },
        {
          "name": "createNatGw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateNatGateway",
            "AllocationId": "{{ allocateEip.eipAllocationId }}",
            "SubnetId": "{{ createPubSubnet.pubSubnetId }}"
          },
          "outputs":[
            {
              "Name": "natGwId",
              "Selector": "$.NatGateway.NatGatewayId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyNatGwAvailable"
        },
        {
          "name": "verifyNatGwAvailable",
          "action": "aws:waitForAwsResourceProperty",
          "timeoutSeconds": 150,
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeNatGateways",
            "NatGatewayIds": [
              "{{ createNatGw.natGwId }}"
            ],
            "PropertySelector": "$.NatGateways[0].State",
            "DesiredValues": [
              "available"
            ]
          },
          "nextStep": "createNatRoute"
        },
        {
          "name": "createNatRoute",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRoute",
            "DestinationCidrBlock": "0.0.0.0/0",
            "NatGatewayId": "{{ createNatGw.natGwId }}",
            "RouteTableId": "{{ getMainRtb.mainRtbId }}"
          },
          "nextStep": "createPubRoute"
        },
        {
          "name": "createPubRoute",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRoute",
            "DestinationCidrBlock": "0.0.0.0/0",
            "GatewayId": "{{ createIgw.igwId }}",
            "RouteTableId": "{{ createPubRtb.pubRtbId }}"
          },
          "nextStep": "setPubSubAssoc"
        },
        {
          "name": "setPubSubAssoc",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AssociateRouteTable",
            "RouteTableId": "{{ createPubRtb.pubRtbId }}",
            "SubnetId": "{{ createPubSubnet.pubSubnetId }}"
          }
        },
        {
          "name": "createDhcpOptions",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateDhcpOptions",
            "DhcpConfigurations": [
              {
                "Key": "domain-name-servers",
                "Values": ["10.0.100.50,10.0.101.50"]
              },
              {
                "Key": "domain-name",
                "Values": ["sample.com"]
              }
            ]
          },
          "outputs": [
            {
              "Name": "dhcpOptionsId",
              "Selector": "$.DhcpOptions.DhcpOptionsId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSubnet1"
        },
        {
          "name": "createDCSubnet1",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.100.0/24",
            "AvailabilityZone": "us-west-2a",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "firstSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSubnet2"
        },
        {
          "name": "createDCSubnet2",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.101.0/24",
            "AvailabilityZone": "us-west-2b",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "secondSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSecGroup"
        },
        {
          "name": "createDCSecGroup",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSecurityGroup",
            "GroupName": "SampleDCSecGroup",
            "Description": "Security Group for Example Domain Controllers",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "dcSecGroupId",
              "Selector": "$.GroupId",
              "Type": "String"
            }
          ],
          "nextStep": "authIngressDCTraffic"
        },
        {
          "name": "authIngressDCTraffic",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AuthorizeSecurityGroupIngress",
            "GroupId": "{{ createDCSecGroup.dcSecGroupId }}",
            "IpPermissions": [
              {
                "FromPort": -1,
                "IpProtocol": "-1",
                "IpRanges": [
                  {
                    "CidrIp": "0.0.0.0/0",
                    "Description": "Allow all traffic between Domain Controllers"
                  }
                ]
              }
            ]
          },
          "nextStep": "verifyInstanceProfile"
        },
        {
          "name": "verifyInstanceProfile",
          "action": "aws:waitForAwsResourceProperty",
          "maxAttempts": 5,
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "ListInstanceProfilesForRole",
            "RoleName": "sampleSSMInstanceRole",
            "PropertySelector": "$.InstanceProfiles[0].Arn",
            "DesiredValues": [
              "{{ createSSMInstanceProfile.instanceProfileArn }}"
            ]
          },
          "nextStep": "iamEventualConsistency"
        },
        {
          "name": "iamEventualConsistency",
          "action": "aws:sleep",
          "inputs": {
            "Duration": "PT2M"
          },
          "nextStep": "launchDC1"
        },
        {
          "name": "launchDC1",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "RunInstances",
            "BlockDeviceMappings": [
              {
                "DeviceName": "/dev/sda1",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 50,
                  "VolumeType": "gp2"
                }
              },
              {
                "DeviceName": "xvdf",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 100,
                  "VolumeType": "gp2"
                }
              }
            ],
            "IamInstanceProfile": {
              "Arn": "{{ createSSMInstanceProfile.instanceProfileArn }}"
            },
            "ImageId": "{{ getLatestWindowsAmi.amiId }}",
            "InstanceType": "t2.micro",
            "MaxCount": 1,
            "MinCount": 1,
            "PrivateIpAddress": "10.0.100.50",
            "SecurityGroupIds": [
              "{{ createDCSecGroup.dcSecGroupId }}"
            ],
            "SubnetId": "{{ createDCSubnet1.firstSubnetId }}",
            "TagSpecifications": [
              {
                "ResourceType": "instance",
                "Tags": [
                  {
                    "Key": "Name",
                    "Value": "SampleDC1"
                  }
                ]
              }
            ]
          },
          "outputs": [
            {
              "Name": "pdcInstanceId",
              "Selector": "$.Instances[0].InstanceId",
              "Type": "String"
            }
          ],
          "nextStep": "launchDC2"
        },
        {
          "name": "launchDC2",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "RunInstances",
            "BlockDeviceMappings": [
              {
                "DeviceName": "/dev/sda1",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 50,
                  "VolumeType": "gp2"
                }
              },
              {
                "DeviceName": "xvdf",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 100,
                  "VolumeType": "gp2"
                }
              }
            ],
            "IamInstanceProfile": {
              "Arn": "{{ createSSMInstanceProfile.instanceProfileArn }}"
            },
            "ImageId": "{{ getLatestWindowsAmi.amiId }}",
            "InstanceType": "t2.micro",
            "MaxCount": 1,
            "MinCount": 1,
            "PrivateIpAddress": "10.0.101.50",
            "SecurityGroupIds": [
              "{{ createDCSecGroup.dcSecGroupId }}"
            ],
            "SubnetId": "{{ createDCSubnet2.secondSubnetId }}",
            "TagSpecifications": [
              {
                "ResourceType": "instance",
                "Tags": [
                  {
                    "Key": "Name",
                    "Value": "SampleDC2"
                  }
                ]
              }
            ]
          },
          "outputs": [
            {
              "Name": "adcInstanceId",
              "Selector": "$.Instances[0].InstanceId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyDCInstanceState"
        },
        {
          "name": "verifyDCInstanceState",
          "action": "aws:waitForAwsResourceProperty",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeInstanceStatus",
            "IncludeAllInstances": true,
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}",
              "{{ launchDC2.adcInstanceId }}"
            ],
            "PropertySelector": "$.InstanceStatuses[0].InstanceState.Name",
            "DesiredValues": [
              "running"
            ]
          },
          "nextStep": "verifyInstancesOnlineSSM"
        },
        {
          "name": "verifyInstancesOnlineSSM",
          "action": "aws:waitForAwsResourceProperty",
          "timeoutSeconds": 600,
          "inputs": {
            "Service": "ssm",
            "Api": "DescribeInstanceInformation",
            "InstanceInformationFilterList": [
              {
                "key": "InstanceIds",
                "valueSet": [
                  "{{ launchDC1.pdcInstanceId }}",
                  "{{ launchDC2.adcInstanceId }}"
                ]
              }
            ],
            "PropertySelector": "$.InstanceInformationList[0].PingStatus",
            "DesiredValues": [
              "Online"
            ]
          },
          "nextStep": "installADRoles"
        },
        {
          "name": "installADRoles",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}",
              "{{ launchDC2.adcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "try {",
                "  Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools",
                "}",
                "catch {",
                "  Write-Error \"Failed to install ADDS Role.\"",
                "}"
              ]
            }
          },
          "nextStep": "setAdminPassword"
        },
        {
          "name": "setAdminPassword",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "net user Administrator \"sampleAdminPass123!\""
              ]
            }
          },
          "nextStep": "createForest"
        },
        {
          "name": "createForest",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "$dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force",
                "try {",
                "   Install-ADDSForest -DomainName \"sample.com\" -DomainMode 6 -ForestMode 6 -InstallDNS -DatabasePath \"D:\\NTDS\" -SysvolPath \"D:\\SYSVOL\" -SafeModeAdministratorPassword $dsrmPass -Force",
                "}",
                "catch {",
                "   Write-Error $_",
                "}",
                "try {",
                "   Add-DnsServerForwarder -IPAddress \"10.0.100.2\"",
                "}",
                "catch {",
                "   Write-Error $_",
                "}"
              ]
            }
          },
          "nextStep": "associateDhcpOptions"
        },
        {
          "name": "associateDhcpOptions",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AssociateDhcpOptions",
            "DhcpOptionsId": "{{ createDhcpOptions.dhcpOptionsId }}",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "nextStep": "waitForADServices"
        },
        {
          "name": "waitForADServices",
          "action": "aws:sleep",
          "inputs": {
            "Duration": "PT1M"
          },
          "nextStep": "promoteADC"
        },
        {
          "name": "promoteADC",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC2.adcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "ipconfig /renew",
                "$dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force",
                "$domAdminUser = \"sample\\Administrator\"",
                "$domAdminPass = \"sampleAdminPass123!\" | ConvertTo-SecureString -asPlainText -Force",
                "$domAdminCred = New-Object System.Management.Automation.PSCredential($domAdminUser,$domAdminPass)",
                "try {",
                "   Install-ADDSDomainController -DomainName \"sample.com\" -InstallDNS -DatabasePath \"D:\\NTDS\" -SysvolPath \"D:\\SYSVOL\" -SafeModeAdministratorPassword $dsrmPass -Credential $domAdminCred -Force",
                "}",
                "catch {",
                "   Write-Error $_",
                "}"
              ]
            }
          }
        }
      ]
    }
```

------

# 最新のスナップショットからルートボリュームを復元する
<a name="automation-document-instance-recovery-example"></a>

ルートボリューム上のオペレーティングシステムは、さまざまな理由で破損する可能性があります。例えば、パッチ適用オペレーション後、カーネルまたはレジストリが破損しているため、インスタンスが正常に起動しない場合があります。パッチ適用操作の前に作成された最新のスナップショットからルートボリュームを復元するなどの一般的なトラブルシューティングタスクを自動化することで、ダウンタイムを短縮し、トラブルシューティング作業を迅速化できます。AWS Systems Managerオートメーションアクションが、これを実現するのに役立ちます。Automation は AWS Systems Manager のツールです。

次の AWS Systems Manager ランブックの例では、これらのアクションを実行します。
+ `aws:executeAwsApi` オートメーションアクションを使用して、インスタンスのルートボリュームから詳細を取得します。
+ `aws:executeScript` オートメーションアクションを使用して、ルートボリュームの最新のスナップショットを取得します。
+ ルートボリュームのスナップショットが見つかった場合、`aws:branch` オートメーションアクションを使用して実行を続行します。

------
#### [ YAML ]

```
    ---
    description: Custom Automation Troubleshooting Example
    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 use this runbook."
        default: ''
      InstanceId:
          type: String
          description: "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot."
          default: ''
    mainSteps:
    - name: getInstanceDetails
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DescribeInstances
        InstanceIds:
        - "{{ InstanceId }}"
      outputs:
        - Name: availabilityZone
          Selector: "$.Reservations[0].Instances[0].Placement.AvailabilityZone"
          Type: String
        - Name: rootDeviceName
          Selector: "$.Reservations[0].Instances[0].RootDeviceName"
          Type: String
      nextStep: getRootVolumeId
    - name: getRootVolumeId
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DescribeVolumes
        Filters:
        -  Name: attachment.device
           Values: ["{{ getInstanceDetails.rootDeviceName }}"]
        -  Name: attachment.instance-id
           Values: ["{{ InstanceId }}"]
      outputs:
        - Name: rootVolumeId
          Selector: "$.Volumes[0].VolumeId"
          Type: String
      nextStep: getSnapshotsByStartTime
    - name: getSnapshotsByStartTime
      action: aws:executeScript
      timeoutSeconds: 45
      onFailure: Abort
      inputs:
        Runtime: python3.11
        Handler: getSnapshotsByStartTime
        InputPayload:
          rootVolumeId : "{{ getRootVolumeId.rootVolumeId }}"
        Script: |-
          def getSnapshotsByStartTime(events,context):
            import boto3
    
            #Initialize client
            ec2 = boto3.client('ec2')
            rootVolumeId = events['rootVolumeId']
            snapshotsQuery = ec2.describe_snapshots(
              Filters=[
                {
                  "Name": "volume-id",
                  "Values": [rootVolumeId]
                }
              ]
            )
            if not snapshotsQuery['Snapshots']:
              noSnapshotFoundString = "NoSnapshotFound"
              return { 'noSnapshotFound' : noSnapshotFoundString }
            else:
              jsonSnapshots = snapshotsQuery['Snapshots']
              sortedSnapshots = sorted(jsonSnapshots, key=lambda k: k['StartTime'], reverse=True)
              latestSortedSnapshotId = sortedSnapshots[0]['SnapshotId']
              return { 'latestSnapshotId' : latestSortedSnapshotId }
      outputs:
      - Name: Payload
        Selector: $.Payload
        Type: StringMap
      - Name: latestSnapshotId
        Selector: $.Payload.latestSnapshotId
        Type: String
      - Name: noSnapshotFound
        Selector: $.Payload.noSnapshotFound
        Type: String 
      nextStep: branchFromResults
    - name: branchFromResults
      action: aws:branch
      onFailure: Abort
      inputs:
        Choices:
        - NextStep: createNewRootVolumeFromSnapshot
          Not:
            Variable: "{{ getSnapshotsByStartTime.noSnapshotFound }}"
            StringEquals: "NoSnapshotFound"
      isEnd: true
    - name: createNewRootVolumeFromSnapshot
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: CreateVolume
        AvailabilityZone: "{{ getInstanceDetails.availabilityZone }}"
        SnapshotId: "{{ getSnapshotsByStartTime.latestSnapshotId }}"
      outputs:
        - Name: newRootVolumeId
          Selector: "$.VolumeId"
          Type: String
      nextStep: stopInstance
    - name: stopInstance
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: StopInstances
        InstanceIds:
        - "{{ InstanceId }}"
      nextStep: verifyVolumeAvailability
    - name: verifyVolumeAvailability
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 120
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
        PropertySelector: "$.Volumes[0].State"
        DesiredValues:
        - "available"
      nextStep: verifyInstanceStopped
    - name: verifyInstanceStopped
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 120
      inputs:
        Service: ec2
        Api: DescribeInstances
        InstanceIds:
        - "{{ InstanceId }}"
        PropertySelector: "$.Reservations[0].Instances[0].State.Name"
        DesiredValues:
        - "stopped"
      nextStep: detachRootVolume
    - name: detachRootVolume
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DetachVolume
        VolumeId: "{{ getRootVolumeId.rootVolumeId }}"
      nextStep: verifyRootVolumeDetached
    - name: verifyRootVolumeDetached
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 30
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ getRootVolumeId.rootVolumeId }}"
        PropertySelector: "$.Volumes[0].State"
        DesiredValues:
        - "available"
      nextStep: attachNewRootVolume
    - name: attachNewRootVolume
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: AttachVolume
        Device: "{{ getInstanceDetails.rootDeviceName }}"
        InstanceId: "{{ InstanceId }}"
        VolumeId: "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
      nextStep: verifyNewRootVolumeAttached
    - name: verifyNewRootVolumeAttached
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 30
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
        PropertySelector: "$.Volumes[0].Attachments[0].State"
        DesiredValues:
        - "attached"
      nextStep: startInstance
    - name: startInstance
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: StartInstances
        InstanceIds:
        - "{{ InstanceId }}"
```

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

```
    {
       "description": "Custom Automation Troubleshooting Example",
       "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 run this runbook.",
             "default": ""
          },
          "InstanceId": {
             "type": "String",
             "description": "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot.",
             "default": ""
          }
       },
       "mainSteps": [
          {
             "name": "getInstanceDetails",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             },
             "outputs": [
                {
                   "Name": "availabilityZone",
                   "Selector": "$.Reservations[0].Instances[0].Placement.AvailabilityZone",
                   "Type": "String"
                },
                {
                   "Name": "rootDeviceName",
                   "Selector": "$.Reservations[0].Instances[0].RootDeviceName",
                   "Type": "String"
                }
             ],
             "nextStep": "getRootVolumeId"
          },
          {
             "name": "getRootVolumeId",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "Filters": [
                   {
                      "Name": "attachment.device",
                      "Values": [
                         "{{ getInstanceDetails.rootDeviceName }}"
                      ]
                   },
                   {
                      "Name": "attachment.instance-id",
                      "Values": [
                         "{{ InstanceId }}"
                      ]
                   }
                ]
             },
             "outputs": [
                {
                   "Name": "rootVolumeId",
                   "Selector": "$.Volumes[0].VolumeId",
                   "Type": "String"
                }
             ],
             "nextStep": "getSnapshotsByStartTime"
          },
          {
             "name": "getSnapshotsByStartTime",
             "action": "aws:executeScript",
             "timeoutSeconds": 45,
             "onFailure": "Continue",
             "inputs": {
                "Runtime": "python3.11",
                "Handler": "getSnapshotsByStartTime",
                "InputPayload": {
                   "rootVolumeId": "{{ getRootVolumeId.rootVolumeId }}"
                },
                "Attachment": "getSnapshotsByStartTime.py"
             },
             "outputs": [
                {
                   "Name": "Payload",
                   "Selector": "$.Payload",
                   "Type": "StringMap"
                },
                {
                   "Name": "latestSnapshotId",
                   "Selector": "$.Payload.latestSnapshotId",
                   "Type": "String"
                },
                {
                   "Name": "noSnapshotFound",
                   "Selector": "$.Payload.noSnapshotFound",
                   "Type": "String"
                }
             ],
             "nextStep": "branchFromResults"
          },
          {
             "name": "branchFromResults",
             "action": "aws:branch",
             "onFailure": "Abort",
             "inputs": {
                "Choices": [
                   {
                      "NextStep": "createNewRootVolumeFromSnapshot",
                      "Not": {
                         "Variable": "{{ getSnapshotsByStartTime.noSnapshotFound }}",
                         "StringEquals": "NoSnapshotFound"
                      }
                   }
                ]
             },
             "isEnd": true
          },
          {
             "name": "createNewRootVolumeFromSnapshot",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "CreateVolume",
                "AvailabilityZone": "{{ getInstanceDetails.availabilityZone }}",
                "SnapshotId": "{{ getSnapshotsByStartTime.latestSnapshotId }}"
             },
             "outputs": [
                {
                   "Name": "newRootVolumeId",
                   "Selector": "$.VolumeId",
                   "Type": "String"
                }
             ],
             "nextStep": "stopInstance"
          },
          {
             "name": "stopInstance",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "StopInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             },
             "nextStep": "verifyVolumeAvailability"
          },
          {
             "name": "verifyVolumeAvailability",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 120,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "verifyInstanceStopped"
          },
          {
             "name": "verifyInstanceStopped",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 120,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ],
                "PropertySelector": "$.Reservations[0].Instances[0].State.Name",
                "DesiredValues": [
                   "stopped"
                ]
             },
             "nextStep": "detachRootVolume"
          },
          {
             "name": "detachRootVolume",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DetachVolume",
                "VolumeId": "{{ getRootVolumeId.rootVolumeId }}"
             },
             "nextStep": "verifyRootVolumeDetached"
          },
          {
             "name": "verifyRootVolumeDetached",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 30,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ getRootVolumeId.rootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "attachNewRootVolume"
          },
          {
             "name": "attachNewRootVolume",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "AttachVolume",
                "Device": "{{ getInstanceDetails.rootDeviceName }}",
                "InstanceId": "{{ InstanceId }}",
                "VolumeId": "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
             },
             "nextStep": "verifyNewRootVolumeAttached"
          },
          {
             "name": "verifyNewRootVolumeAttached",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 30,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].Attachments[0].State",
                "DesiredValues": [
                   "attached"
                ]
             },
             "nextStep": "startInstance"
          },
          {
             "name": "startInstance",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "StartInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             }
          }
       ],
       "files": {
            "getSnapshotsByStartTime.py": {
                "checksums": {
                    "sha256": "sampleETagValue"
                }
            }
        }
    }
```

------

# AMI とクロスリージョンコピーの作成
<a name="automation-document-backup-maintenance-example"></a>

インスタンスの Amazon Machine Image (AMI) の作成は、バックアップと復旧で使用される一般的なプロセスです。災害対策アーキテクチャの一部として、AMI を別の AWS リージョン にコピーすることも選択できます。一般的なメンテナンスタスクを自動化することで、フェイルオーバーが必要な問題が発生した場合にダウンタイムを短縮できます。AWS Systems Managerオートメーションアクションが、これを実現するのに役立ちます。Automation は AWS Systems Manager のツールです。

次の AWS Systems Manager ランブックの例では、これらのアクションを実行します。
+ `aws:executeAwsApi` オートメーションアクションを使用して、AMI を作成します。
+ `aws:waitForAwsResourceProperty` オートメーションアクションを使用して、AMI の可用性を確認します。
+ `aws:executeScript` オートメーションアクションを使用して、AMI を送信先リージョンにコピーします。

------
#### [ YAML ]

```
    ---
    description: Custom Automation Backup and Recovery Example
    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 use this runbook."
        default: ''
      InstanceId:
        type: String
        description: "(Required) The ID of the EC2 instance."
        default: ''
    mainSteps:
    - name: createImage
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: CreateImage
        InstanceId: "{{ InstanceId }}"
        Name: "Automation Image for {{ InstanceId }}"
        NoReboot: false
      outputs:
        - Name: newImageId
          Selector: "$.ImageId"
          Type: String
      nextStep: verifyImageAvailability
    - name: verifyImageAvailability
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 600
      inputs:
        Service: ec2
        Api: DescribeImages
        ImageIds:
        - "{{ createImage.newImageId }}"
        PropertySelector: "$.Images[0].State"
        DesiredValues:
        - available
      nextStep: copyImage
    - name: copyImage
      action: aws:executeScript
      timeoutSeconds: 45
      onFailure: Abort
      inputs:
        Runtime: python3.11
        Handler: crossRegionImageCopy
        InputPayload:
          newImageId : "{{ createImage.newImageId }}"
        Script: |-
          def crossRegionImageCopy(events,context):
            import boto3
    
            #Initialize client
            ec2 = boto3.client('ec2', region_name='us-east-1')
            newImageId = events['newImageId']
    
            ec2.copy_image(
              Name='DR Copy for ' + newImageId,
              SourceImageId=newImageId,
              SourceRegion='us-west-2'
            )
```

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

```
    {
       "description": "Custom Automation Backup and Recovery Example",
       "schemaVersion": "0.3",
       "assumeRole": "{{ AutomationAssumeRole }}",
       "parameters": {
          "AutomationAssumeRole": {
             "type": "String",
             "description": "(Required) The ARN of the role that allows Automation to perform\nthe actions on your behalf. If no role is specified, Systems Manager Automation\nuses your IAM permissions to run this runbook.",
             "default": ""
          },
          "InstanceId": {
             "type": "String",
             "description": "(Required) The ID of the EC2 instance.",
             "default": ""
          }
       },
       "mainSteps": [
          {
             "name": "createImage",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "CreateImage",
                "InstanceId": "{{ InstanceId }}",
                "Name": "Automation Image for {{ InstanceId }}",
                "NoReboot": false
             },
             "outputs": [
                {
                   "Name": "newImageId",
                   "Selector": "$.ImageId",
                   "Type": "String"
                }
             ],
             "nextStep": "verifyImageAvailability"
          },
          {
             "name": "verifyImageAvailability",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 600,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeImages",
                "ImageIds": [
                   "{{ createImage.newImageId }}"
                ],
                "PropertySelector": "$.Images[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "copyImage"
          },
          {
             "name": "copyImage",
             "action": "aws:executeScript",
             "timeoutSeconds": 45,
             "onFailure": "Abort",
             "inputs": {
                "Runtime": "python3.11",
                "Handler": "crossRegionImageCopy",
                "InputPayload": {
                   "newImageId": "{{ createImage.newImageId }}"
                },
                "Attachment": "crossRegionImageCopy.py"
             }
          }
       ],
       "files": {
            "crossRegionImageCopy.py": {
                "checksums": {
                    "sha256": "sampleETagValue"
                }
            }
        }
    }
```

------

# AWS リソースを設定する入力パラメーターの作成
<a name="populating-input-parameters"></a>

Systems Manager のツールである Automation は、入力パラメータに対して定義したリソースタイプに一致する AWS リソースを AWS マネジメントコンソールに入力します。リソースタイプと一致する AWS アカウント のリソースがドロップダウンリストに表示され、選択できます。Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、Amazon Simple Storage Service (Amazon S3) バケット、および AWS Identity and Access Management (IAM) ロールに対して、入力パラメータを定義できます。サポートされているタイプ定義と、一致するリソースを検索するために使用される正規表現は次のとおりです。
+ `AWS::EC2::Instance::Id` - `^m?i-([a-z0-9]{8}|[a-z0-9]{17})$`
+ `List<AWS::EC2::Instance::Id>` - `^m?i-([a-z0-9]{8}|[a-z0-9]{17})$`
+ `AWS::S3::Bucket::Name` - `^[0-9a-z][a-z0-9\\-\\.]{3,63}$`
+ `List<AWS::S3::Bucket::Name>` - `^[0-9a-z][a-z0-9\\-\\.]{3,63}$`
+ `AWS::IAM::Role::Arn` - `^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$`
+ `List<AWS::IAM::Role::Arn>` - `^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$`

以下は、ランブックコンテンツで定義される入力パラメータタイプの例です。

------
#### [ YAML ]

```
description: Enables encryption on an Amazon S3 bucket
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  BucketName:
    type: 'AWS::S3::Bucket::Name'
    description: (Required) The name of the Amazon S3 bucket you want to encrypt.
  SSEAlgorithm:
    type: String
    description: (Optional) The server-side encryption algorithm to use for the default encryption.
    default: AES256
  AutomationAssumeRole:
    type: 'AWS::IAM::Role::Arn'
    description: (Optional) The Amazon Resource Name (ARN) of the role that allows Automation to perform the actions on your behalf.
    default: ''
mainSteps:
  - name: enableBucketEncryption
    action: 'aws:executeAwsApi'
    inputs:
      Service: s3
      Api: PutBucketEncryption
      Bucket: '{{BucketName}}'
      ServerSideEncryptionConfiguration:
        Rules:
          - ApplyServerSideEncryptionByDefault:
              SSEAlgorithm: '{{SSEAlgorithm}}'
    isEnd: true
```

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

```
{
   "description": "Enables encryption on an Amazon S3 bucket",
   "schemaVersion": "0.3",
   "assumeRole": "{{ AutomationAssumeRole }}",
   "parameters": {
      "BucketName": {
         "type": "AWS::S3::Bucket::Name",
         "description": "(Required) The name of the Amazon S3 bucket you want to encrypt."
      },
      "SSEAlgorithm": {
         "type": "String",
         "description": "(Optional) The server-side encryption algorithm to use for the default encryption.",
         "default": "AES256"
      },
      "AutomationAssumeRole": {
         "type": "AWS::IAM::Role::Arn",
         "description": "(Optional) The Amazon Resource Name (ARN) of the role that allows Automation to perform the actions on your behalf.",
         "default": ""
      }
   },
   "mainSteps": [
      {
         "name": "enableBucketEncryption",
         "action": "aws:executeAwsApi",
         "inputs": {
            "Service": "s3",
            "Api": "PutBucketEncryption",
            "Bucket": "{{BucketName}}",
            "ServerSideEncryptionConfiguration": {
               "Rules": [
                  {
                     "ApplyServerSideEncryptionByDefault": {
                        "SSEAlgorithm": "{{SSEAlgorithm}}"
                     }
                  }
               ]
            }
         },
         "isEnd": true
      }
   ]
}
```

------

# ランブック作成のためのドキュメントビルダーの使用
<a name="automation-document-builder"></a>

AWS Systems Manager の公開ランブックが、AWS リソースで実行するすべてのアクションをサポートしない場合、独自のランブックを作成できます。カスタムランブックを作成するには、適切なオートメーションアクションを含むローカルの YAML または JSON 形式のファイルを手動で作成します。また別の方法として、Systems Manager Automation コンソールでドキュメントビルダーを使用し、カスタムランブックを構築することも可能です

ドキュメントビルダーを使用すると、JSON または YAML 構文を使用しなくても、オートメーションアクションをカスタムランブックに追加し、必要なパラメータを指定できます。ステップを追加してランブックを作成すると、追加したアクションが、Systems Manager がオートメーションの実行に使用できる YAML 形式に変換されます。

ランブックでは、マークアップ言語である Markdown の使用がサポートされています。これにより、wiki スタイルの説明をランブックやランブック内の個々のステップに追加できます。Markdown の使用に関する詳細については、「[AWS での Markdown の使用](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html)」を参照してください。

## ドキュメントビルダーを使用してランブックを作成する
<a name="create-runbook"></a>

**[開始する前に]**  
ランブック内で使用できる他のさまざまなアクションについても、確認してみることをお勧めします。詳細については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

**ドキュメントビルダーを使用してランブックを作成するには**

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

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

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

1. [**名前**] に、ランブックのわかりやすい名前を入力します。

1. [**Document description (ドキュメントの説明)**] に、ランブックのマークダウンスタイルの説明を入力します。ランブック、番号付きステップ、またはその他の種類の情報を使用してランブックを説明できます。コンテンツの書式設定については、デフォルトのテキストを参照してください。
**ヒント**  
[**Hide preview (プレビューを非表示)**] と [**Show preview (プレビューを表示)**] を切り替えて、作成時に説明の内容がどのように表示されるかを確認します。

1. （オプション） [**Assume role (ロールの継承)**] に、ユーザーに代わってアクションを実行するサービスロールの名前または ARN を入力します。ロールを指定しない場合、オートメーションはオートメーションを実行するユーザーのアクセス許可を使用します。
**重要**  
`aws:executeScript` アクションを使用する Amazon が所有していないランブックの場合、ロールを指定する必要があります。詳細については、「[ランブックを使用するためのアクセス許可](automation-document-script-considerations.md#script-permissions)」を参照してください。

1. （オプション） [**Outputs (出力)**] に、このランブックを実行するための出力を入力して、他のプロセスで使用できるようにします。

   たとえば、ドキュメントが新しい AMI を作成する場合、["CreateImage.ImageId"] を指定し、この出力を使用して後続のオートメーションで新しいインスタンスを作成します。

1. （オプション） [**Input parameters (入力パラメータ)**] セクションを展開し、次の操作を行います。

   1. [**Parameter name (パラメータ名)**] に、作成するランブックパラメータのわかりやすい名前を入力します。

   1. [**Type (タイプ)**] で、パラメータのタイプ（`String` や `MapList` など）を選択します。

   1. [**Required (必須)**] で、次のいずれかの操作を行います。
      + ランタイムにこのランブックパラメータの値を指定する必要がある場合は、[**Yes (はい)**] を選択します。
      + パラメータが不要な場合は、[**No (いいえ)**] を選択し、（オプション） [**Default value (デフォルト値)**] にデフォルトのパラメータ値を入力します。

   1. [**Description (説明)**] に、ランブックパラメータの説明を入力します。
**注記**  
ランブックパラメータをさらに追加するには、[**Add a parameter (パラメータを追加)**] を選択します。ランブックパラメータを削除するには、[**X**] (削除) ボタンを選択します。

1. (オプション) [**Target type (ターゲットタイプ)**] セクションを展開し、ターゲットタイプを選択して、オートメーションが実行できるリソースの種類を定義します。たとえば、EC2 インスタンスでランブックを使用するには、`/AWS::EC2::Instance` を選択します。
**注記**  
「`/`」の値を指定すると、ランブックはすべてのタイプのリソースで実行できます。有効なリソースタイプのリストについては、*AWS CloudFormation ユーザーガイド*の [AWS リソースタイプのリファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)をご参照ください。

1. (オプション) [**Document tags (ドキュメントタグ)**] セクションを展開し、ランブックに適用するタグキーと値のペアを 1 つ以上入力します。タグを使用すると、リソースの識別、整理、検索が容易になります。

1. [**Step 1 (ステップ 1)**] セクションで、次の情報を入力します。
   + [**Step name (ステップ名)**] に、オートメーションの最初のステップのわかりやすい名前を入力します。
   + [**Action type (アクションタイプ)**] で、このステップで使用するアクションタイプを選択します。

     使用可能なアクションタイプのリストと情報については、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。
   + [**Description (説明)**] に、オートメーションステップの説明を入力します。Markdown を使用してテキストの書式を設定できます。
   + 選択した [**Action type (アクションタイプ)**] に応じて、[**Step inputs (ステップ入力)**] セクションにアクションタイプに必要な入力を入力します。たとえば、アクション `aws:approve` を選択した場合は、`Approvers` プロパティの値を指定する必要があります。

     ステップ入力フィールドの詳細については、選択したアクションタイプの「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」のエントリを参照してください。例: [`aws:executeStateMachine` – AWS Step Functions ステートマシンを実行する](automation-action-executeStateMachine.md)。
   + (オプション) [**Additional inputs (追加入力)**] で、ランブックに必要な追加の入力値を指定します。使用可能な入力タイプは、ステップで選択したアクションタイプによって異なります。（一部のアクションタイプには入力値が必要です）。
**注記**  
さらに入力を追加するには、[**Add optional input (オプションの入力を追加)**] を選択します。入力を削除するには、[**X**] （削除）ボタンを選択します。
   + (オプション) [**Outputs (入力)**] に、このステップの出力を入力して、他のプロセスで使用できるようにします。
**注記**  
[**Outputs (出力)**] は、すべてのアクションタイプで使用できるわけではありません。
   + (オプション) [**Common properties (共通プロパティ)**] セクションを展開し、すべてのオートメーションアクションに共通するアクションのプロパティを指定します。例えば、[**Timeout seconds (タイムアウト秒)**] には、ステップが停止するまでの実行時間を指定するための値を秒単位で指定できます。

     詳細については、「[すべてのアクションで共有されるプロパティ](automation-actions.md#automation-common)」を参照してください。
**注記**  
ステップをさらに追加するには、[**Add step (ステップを追加)**] を選択し、ステップを作成する手順を繰り返します。ステップを削除するには、[**Remove step (ステップを削除)**] を選択します。

1. [**Create automation (オートメーションを作成)**] を選択してランブックを保存します。

## スクリプトを実行するランブックを作成する
<a name="create-runbook-scripts"></a>

次の手順で、AWS Systems Manager Automation コンソールでドキュメントビルダーを使用し、スクリプトを実行するためにカスタムランブックを作成する方法について説明します。

作成したランブックの最初のステップでは、スクリプトを実行して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。2 番目のステップでは、インスタンスのステータスチェックが `ok` に変更されるかどうかを監視する別のスクリプトが実行されます。次に、オートメーション実行の全体的なステータス `Success` が報告されます。

**[開始する前に]**  
次の手順を完了していることを確認してください。
+ 管理者権限を持っているか、または AWS Identity and Access Management (IAM) で Systems Manager にアクセスするための適切なアクセス許可が付与されていることを確認します。

  詳細については、[ランブックへのユーザーアクセスの確認](automation-setup.md#automation-setup-user-access) を参照してください。
+ AWS アカウント に Automation の IAM サービスロール (*継承ロール*とも呼ばれる) があることを確認します。このチュートリアルでは `aws:executeScript` アクションを使用するため、このロールが必要です。

  このロールの作成の詳細については、「[オートメーションのサービスロール（ロールを引き受ける）アクセスの設定](automation-setup.md#automation-setup-configure-role)」を参照してください。

  [`aws:executeScript`] を実行するための IAM サービスロールの要件については、「[ランブックを使用するためのアクセス許可](automation-document-script-considerations.md#script-permissions)」を参照してください。
+ EC2 インスタンスを起動するアクセス許可があることを確認します。

  詳細については、「Amazon EC2 ユーザーガイド」の「[IAM と Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingIAM.html#intro-to-iam)」を参照してください。

**ドキュメントビルダーを使用してスクリプトを実行するためにカスタムランブックを作成するには**

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

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

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

1. [**Name (名前)**] に、ランブック **LaunchInstanceAndCheckStatus** のわかりやすい名前を入力します。

1. (オプション) [**Document description (ドキュメントの説明)**] で、Markdown を使用して、デフォルトのテキストをこのランブックの説明に置き換えます。以下はその例です。

   ```
   ##Title: LaunchInstanceAndCheckState
       -----
       **Purpose**: This runbook first launches an EC2 instance using the AMI ID provided in the parameter ```imageId```. The second step of this runbook continuously checks the instance status check value for the launched instance until the status ```ok``` is returned.
       
       ##Parameters:
       -----
       Name | Type | Description | Default Value
       ------------- | ------------- | ------------- | -------------
       assumeRole | String | (Optional) The ARN of the role that allows Automation to perform the actions on your behalf. | -
       imageId  | String | (Optional) The AMI ID to use for launching the instance. The default value uses the latest Amazon Linux 2023 AMI ID available. | {{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 }}
   ```

1. [**Assume role (継承ロール)**] に、オートメーションのオートメーション (継承ロール) の IAM サービスロールの ARN を **arn:aws:iam::111122223333:role/AutomationServiceRole** の形式で入力します。AWS アカウント IDを 111122223333 に置き換えます。

   指定したロールは、オートメーションの開始に必要なアクセス許可を提供するために使用されます。
**重要**  
`aws:executeScript` アクションを使用する Amazon が所有していないランブックの場合、ロールを指定する必要があります。詳細については、「[ランブックを使用するためのアクセス許可](automation-document-script-considerations.md#script-permissions)」を参照してください。

1. [**Input parameters (入力パラメータ)**] を展開し、次の操作を行います。

   1. [**Parameter name (パラメータ名)**] に「**imageId**」と入力します。

   1. [**Type (タイプ)**] で、**String** を選択します。

   1. [**Required (必須)**] で、`No` を選択します。

   1. [**Default value (デフォルト値)**] に、次のように入力します。

      ```
      {{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 }}
      ```
**注記**  
この値で、最新の Amazon Linux 2023 Amazon Machine Image (AMI) ID を使用して Amazon EC2 インスタンスは起動します。別の AMI を使用する場合は、値を AMI ID に置き換えます。

   1. [**Description (説明)**] に、次のように入力します。

      ```
      (Optional) The AMI ID to use for launching the instance. The default value uses the latest released Amazon Linux 2023 AMI ID.
      ```

1. [**Add a parameter (パラメータの追加)**] を選択して 2 番目のパラメータ、**tagValue** を作成し、次のように入力します。

   1. [**Parameter name (パラメータ名)**] に「**tagValue**」と入力します。

   1. [**Type (タイプ)**] で、**String** を選択します。

   1. [**Required (必須)**] で、`No` を選択します。

   1. [**Default value (デフォルト値)**] に「**LaunchedBySsmAutomation**」と入力します。これにより、タグのキーペア値 `Name:LaunchedBySsmAutomation` がインスタンスに追加されます。

   1. [**Description (説明)**] に、次のように入力します。

      ```
      (Optional) The tag value to add to the instance. The default value is LaunchedBySsmAutomation.
      ```

1. [**Add a parameter (パラメータの追加)**] を選択して 3 番目のパラメータ、**instanceType** を作成し、次の情報を入力します。

   1. [**Parameter name (パラメータ名)**] に「**instanceType**」と入力します。

   1. [**Type (タイプ)**] で、**String** を選択します。

   1. [**Required (必須)**] で、`No` を選択します。

   1. [**Default value (デフォルト値)**] に「**t2.micro**」と入力します。

   1. [**Parameter description (パラメータの説明)**] に、次のように入力します。

      ```
      (Optional) The instance type to use for the instance. The default value is t2.micro.
      ```

1. [**Target type (ターゲットタイプ)**] を展開し、**"/"** を選択します。

1. (オプション) [**Document tags (ドキュメントタグ)**] を展開して、ランブックにリソースタグを適用します。[**Tag key (タグキー)**] に **Purpose** と入力し、[**Tag value (タグ値)**] に「**LaunchInstanceAndCheckState**」と入力します。

1. [** Step 1 (ステップ 1)**] セクションで、次のステップを実行します。

   1. [**Step name (ステップ名)**] に、オートメーションの最初のステップを表すわかりやすいステップ名を入力します: **LaunchEc2Instance**。

   1. [**Action type (アクションタイプ)**] で、[**Run a script (スクリプトを実行)**] (**aws:executeScript**) を選択します。

   1. [**Description (説明)**] に、次のようなオートメーションのステップの説明を入力します。

      ```
      **About This Step**
          
          This step first launches an EC2 instance using the ```aws:executeScript``` action and the provided script.
      ```

   1. [**入力**] を展開します。

   1. [**Runtime (ランタイム)**] で、指定されたスクリプトの実行に使用するランタイム言語を選択します。

   1. [**Handler (ハンドラ)**] に「**launch\$1instance**」と入力します。これは、次のスクリプトで宣言された関数名です。
**注記**  
PowerShell では必須ではありません。

   1. [**Script (スクリプト)**] で、デフォルトのコンテンツを次のように置き換えます。スクリプトは、対応するランタイム値と一致するようにしてください。

------
#### [ Python ]

      ```
      def launch_instance(events, context):
            import boto3
            ec2 = boto3.client('ec2')
          
            image_id = events['image_id']
            tag_value = events['tag_value']
            instance_type = events['instance_type']
          
            tag_config = {'ResourceType': 'instance', 'Tags': [{'Key':'Name', 'Value':tag_value}]}
          
            res = ec2.run_instances(ImageId=image_id, InstanceType=instance_type, MaxCount=1, MinCount=1, TagSpecifications=[tag_config])
          
            instance_id = res['Instances'][0]['InstanceId']
          
            print('[INFO] 1 EC2 instance is successfully launched', instance_id)
          
            return { 'InstanceId' : instance_id }
      ```

------
#### [ PowerShell ]

      ```
      Install-Module AWS.Tools.EC2 -Force
          Import-Module AWS.Tools.EC2
          
          $payload = $env:InputPayload | ConvertFrom-Json
          
          $imageid = $payload.image_id
          
          $tagvalue = $payload.tag_value
          
          $instanceType = $payload.instance_type
          
          $type = New-Object Amazon.EC2.InstanceType -ArgumentList $instanceType
          
          $resource = New-Object Amazon.EC2.ResourceType -ArgumentList 'instance'
          
          $tag = @{Key='Name';Value=$tagValue}
          
          $tagSpecs = New-Object Amazon.EC2.Model.TagSpecification
          
          $tagSpecs.ResourceType = $resource
          
          $tagSpecs.Tags.Add($tag)
          
          $res = New-EC2Instance -ImageId $imageId -MinCount 1 -MaxCount 1 -InstanceType $type -TagSpecification $tagSpecs
          
          return @{'InstanceId'=$res.Instances.InstanceId}
      ```

------

   1. [**Additional inputs (追加入力)**] を展開します。

   1. [**Input name (入力名)**] で、[**InputPayload**] を選択します。[**Input value (入力値)**] に、次の YAML データを入力します。

      ```
      image_id: "{{ imageId }}"
          tag_value: "{{ tagValue }}"
          instance_type: "{{ instanceType }}"
      ```

1. [**Outputs (出力)**] を展開し、次の操作を行います。
   + [**Name (名前)**] に **payload** と入力します。
   + [**Selector (セレクタ)**] に **\$1.Payload** と入力します。
   + [**Type (タイプ)**] で、`StringMap` を選択します。

1. [**Add step (ステップを追加)**] を選択して、ランブックに 2 番目のステップを追加します。2 番目のステップは、ステップ 1 で起動されたインスタンスのステータスをクエリし、返されるステータスが `ok` になるまで待機します。

1. [**Step 2 (ステップ 2)**] セクションで、次の操作を行います。

   1. [**Step name (ステップ名)**] に、オートメーションの 2 番目のステップを表すわかりやすい名前を入力します: **WaitForInstanceStatusOk**。

   1. [**Action type (アクションタイプ)**] で、[**Run a script (スクリプトを実行)**] (**aws:executeScript**) を選択します。

   1. [**Description (説明)**] に、次のようなオートメーションのステップの説明を入力します。

      ```
      **About This Step**
          
          The script continuously polls the instance status check value for the instance launched in Step 1 until the ```ok``` status is returned.
      ```

   1. [**Runtime (ランタイム)**] では、提供されたスクリプトの実行に使用されるランタイム言語を選択します。

   1. [**Handler (ハンドラ)**] に「**poll\$1instance**」と入力します。これは、次のスクリプトで宣言された関数名です。
**注記**  
PowerShell では必須ではありません。

   1. [**Script (スクリプト)**] で、デフォルトのコンテンツを次のように置き換えます。スクリプトは、対応するランタイム値と一致するようにしてください。

------
#### [ Python ]

      ```
      def poll_instance(events, context):
            import boto3
            import time
          
            ec2 = boto3.client('ec2')
          
            instance_id = events['InstanceId']
          
            print('[INFO] Waiting for instance status check to report ok', instance_id)
          
            instance_status = "null"
          
            while True:
              res = ec2.describe_instance_status(InstanceIds=[instance_id])
          
              if len(res['InstanceStatuses']) == 0:
                print("Instance status information is not available yet")
                time.sleep(5)
                continue
          
              instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status']
          
              print('[INFO] Polling to get status of the instance', instance_status)
          
              if instance_status == 'ok':
                break
          
              time.sleep(10)
          
            return {'Status': instance_status, 'InstanceId': instance_id}
      ```

------
#### [ PowerShell ]

      ```
          Install-Module AWS.Tools.EC2 -Force
          
          $inputPayload = $env:InputPayload | ConvertFrom-Json
          
          $instanceId = $inputPayload.payload.InstanceId
          
          $status = Get-EC2InstanceStatus -InstanceId $instanceId
          
          while ($status.Status.Status -ne 'ok'){
             Write-Host 'Polling get status of the instance', $instanceId
          
             Start-Sleep -Seconds 5
          
             $status = Get-EC2InstanceStatus -InstanceId $instanceId
          }
          
          return @{Status = $status.Status.Status; InstanceId = $instanceId}
      ```

------

   1. [**Additional inputs (追加入力)**] を展開します。

   1. [**Input name (入力名)**] で、[**InputPayload**] を選択します。[** Input value (入力値)**] に、次のように入力します。

      ```
      {{ LaunchEc2Instance.payload }}
      ```

1. [**Create automation (オートメーションを作成)**] を選択してランブックを保存します。

# ランブックでのスクリプトの使用
<a name="automation-document-script-considerations"></a>

オートメーションランブックは、オートメーションの一部としてスクリプトの実行をサポートします。Automation は AWS Systems Manager のツールです。ランブックを使用すると、スクリプトを実行するための独立したコンピューティング環境を作成せずに、AWS でスクリプトを直接実行できます。ランブックでは、承認などの他のオートメーションステップタイプとともにスクリプトステップを実行できるため、重要な状況やあいまいな状況に手動で介入できます。ランブックの `aws:executeScript` アクションからの出力を Amazon CloudWatch Logs に送信できます。詳細については、「[CloudWatch Logs を使用した自動アクション出力のログ記録](automation-action-logging.md)」を参照してください。

## ランブックを使用するためのアクセス許可
<a name="script-permissions"></a>

ランブックを使用するには、Systems Manager が AWS Identity and Access Management (IAM) ロールのアクセス許可を使用する必要があります。どのロールのアクセス許可を使用するかを判断するためにオートメーションが使用する方法は、いくつかの要因と、ステップで `aws:executeScript` アクションを使用するかどうかによって異なります。

`aws:executeScript` を使用しないランブックの場合、オートメーションは、次の 2 つのアクセス許可ソースのいずれかを使用します。
+ ランブックで指定されているか、パラメータとして渡された IAM サービスロールまたは継承ロールのアクセス許可。
+ IAM サービスロールが指定されていない場合は、オートメーションを開始したユーザーのアクセス許可。

ただし、ランブックのステップに `aws:executeScript` アクションが含まれている場合、アクションに指定されている Python スクリプトまたは PowerShell スクリプトが AWS API オペレーションを呼び出す場合は、IAM サービスロール (継承ロール) が常に必要です。オートメーションは、このロールを次の順序でチェックします。
+ ランブックで指定されているか、パラメータとして渡された IAM サービスロールまたは継承ロールのアクセス許可。
+ ロールが見つからない場合、オートメーションは `aws:executeScript` に指定された Python スクリプトまたは PowerShell スクリプトをアクセス許可なしで実行しようとします。スクリプトが AWS API オペレーション (Amazon EC2 `CreateImage` オペレーションなど) を呼び出している場合、または AWS リソース (EC2 インスタンスなど) に対して動作しようとしている場合、スクリプトを含むステップは失敗し、Systems Manager は失敗をレポートするエラーメッセージを返します。

## スクリプトをランブックに追加する
<a name="adding-scripts"></a>

スクリプトインラインをランブック内のステップの一部として含めることで、スクリプトをランブックに追加できます。スクリプトをランブックにアタッチするには、ローカルマシンからスクリプトをアップロードするか、スクリプトが配置されている Amazon Simple Storage Service (Amazon S3) バケットを指定します。スクリプトを実行するステップが完了すると、スクリプトの出力が JSON オブジェクトとして利用可能になり、ランブックの後続のステップの入力として使用できます。`aws:executeScript` アクションと、スクリプトのアタッチメントの使用方法の詳細については、「[`aws:executeScript` – スクリプトを実行する](automation-action-executeScript.md)」を参照してください。

## ランブックのスクリプト制約
<a name="script-constraints"></a>

ランブックでは、5 つの添付ファイルの制限が適用されます。スクリプトは、Python スクリプト (.py)、PowerShell Core スクリプト (.ps1) の形式で、または .zip ファイル内のコンテンツとして添付できます。

# ランブックでの条件文の使用
<a name="automation-branch-condition"></a>

デフォルトでは、ランブックの `mainSteps` セクションで定義したステップは順番に実行されます。1 つのアクションが完了した後、`mainSteps` セクションで指定された次のアクションが開始されます。さらに、アクションが失敗した場合は、(デフォルトでは) オートメーション全体の実行に失敗します。このセクションで説明されている `aws:branch` オートメーションアクションおよびランブックオプションを使用すると、*条件付き分岐*を実行するオートメーションを作成できます。つまり、異なる選択肢を評価した後に異なるステップにジャンプするオートメーションを作成したり、ステップが完了したときに変更に動的に応答するオートメーションを作成することができます。動的オートメーションの作成に使用できるオプションのリストは次のとおりです。
+ **`aws:branch`**: この自動化アクションを使用すると、1 つのステップで複数の選択肢を評価し、その評価結果に基づいてランブックの異なるステップにジャンプする動的オートメーションを作成できます。
+ **`nextStep`**: このオプションは、ステップを正常に完了した後に、次に処理するオートメーションのステップを指定します。
+ **`isEnd`**: このオプションでは、特定のステップの最後にオートメーションを停止します。このオプションのデフォルト値は false です。
+ **`isCritical`**: このオプションはオートメーションの正常な完了のために、ステップを critical として指定します。この指定のステップが失敗した場合、オートメーションはオートメーションの失敗の最終的なステータスを `Failed` としてレポートします。このオプションのデフォルト値は `true` です。
+ **`onFailure`**: このオプションは失敗時にオートメーションを中止するか、続行するか、または別のステップに移行するかを示します。このオプションのデフォルト値は中止です。

次のセクションでは、`aws:branch` オートメーションアクションについて説明します。`nextStep`、`isEnd`、`isCritical`、`onFailure` オプションの詳細については、「[`aws:branch` ランブックの例](#branch-runbook-examples)」を参照してください。

## `aws:branch` アクションの使用
<a name="branch-action-explained"></a>

`aws:branch` アクションは、オートメーションのための最も動的な条件分岐オプションを提供します。前述のとおり、このアクションによって、オートメーションで複数の条件を 1 つのステップで評価し、その評価の結果に基づいて新しいステップにジャンプすることができます。`aws:branch` アクションは、プログラミングで `IF-ELIF-ELSE` ステートメントのように機能します。

以下に、`aws:branch` ステップの YAML の例を示します。

```
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

ステップの `aws:branch` アクションを指定する場合、オートメーションが評価する必要のある `Choices` を指定します。オートメーションは、ランブックの `Choices` セクションで指定したパラメータの値に基づいて、`Parameters` を評価できます。オートメーションは、前の手順の出力に基づいて `Choices` を評価することもできます。

自動化は、ブール式を使用して各選択肢を評価します。最初の選択肢が `true` であると判断された場合、オートメーションはその選択肢で指定されたステップにジャンプします。最初の選択肢が `false` であると判断された場合、オートメーションは次の選択肢を評価します。ステップに 3 つ以上の `Choices` が含まれている場合、オートメーションは、`true` である選択肢を評価するまで、各選択肢を順番に評価します。次に、オートメーションは、`true` の選択のために指定されたステップにジャンプします。

`Choices` である `true` がない場合、オートメーションはステップに `Default` 値が含まれているかどうかを確認します。`Default` 値は、`true` である選択肢がない場合にオートメーションがジャンプするステップを定義します。ステップに `Default` 値が指定されていない場合、オートメーションはランブックの次のステップを処理します。

以下は YAML の [**chooseOSfromParameter**] という名前の `aws:branch` ステップです。ステップには、2 つの `Choices` が含まれています。 (`NextStep: runWindowsCommand`) および (`NextStep: runLinuxCommand`)。オートメーションは、これらの `Choices` を評価して、適切なオペレーティングシステムで実行するコマンドを決定します。各選択肢の `Variable` は、`{{OSName}}` を使用します。これは、ランブック作成者がランブックの `Parameters` セクションで定義したパラメータです。

```
mainSteps:
- name: chooseOSfromParameter
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OSName}}"
      StringEquals: Windows
    - NextStep: runLinuxCommand
      Variable: "{{OSName}}"
      StringEquals: Linux
```

以下は YAML の [**chooseOSfromOutput**] という名前の `aws:branch` ステップです。ステップには、2 つの `Choices` が含まれています。 (`NextStep: runPowerShellCommand`) および (`NextStep: runShellCommand`)。オートメーションは、これらの `Choices` を評価して、適切なオペレーティングシステムで実行するコマンドを決定します。各選択肢の `Variable` は、`{{GetInstance.platform}}` を使用します。これは、ランブックの前のステップからの出力です。この例では `Default` というオプションも含まれています。オートメーションが両方の `Choices` を評価し 、どちらの選択肢も `true` である場合、オートメーションは `PostProcessing` というステップにジャンプします。

```
mainSteps:
- name: chooseOSfromOutput
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

### ランブック `aws:branch` でのステップの作成
<a name="create-branch-action"></a>

ランブック `aws:branch` でステップを作成するときは、オートメーションが次にジャンプするステップを決定するために評価する`Choices` を定義します。前述のように、`Choices` はブール式を使用して評価されます。各選択肢は、次のオプションを定義する必要があります。
+ **NextStep **: 指定された選択肢が `true` である場合に処理するランブックの次のステップ。
+ **Variable**: ランブックの `Parameters` セクションで定義されているパラメータの名前を指定するか、`Variables` セクションで定義されている変数の名前を指定するか、前のステップからの出力オブジェクトを指定します。

  次の形式を使用して変数の値を指定します。

  `Variable: "{{variable name}}"`

  次の形式を使用してパラメータの値を指定します。

  `Variable: "{{parameter name}}"`

  次の形式を使用して出力オブジェクト変数を指定します。

  `Variable: "{{previousStepName.outputName}}"`
**注記**  
出力変数の作成については、次のセクション「[出力変数の作成について](#branch-action-output)」でさらに詳しく説明します。
+ **Operation**: `StringEquals: Linux` などの選択肢を評価するために使用される基準。`aws:branch` アクションは、次の操作をサポートします。

**文字列演算子**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + Contains

**数値演算子**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**ブール演算子**
  + BooleanEquals
**重要**  
ランブックを作成すると、システムはランブック内の各オペレーションを検証します。オペレーションがサポートされていない場合は、ランブックの作成時にエラーが返されます。
+ **Default**: `Choices` である `true` がない場合にオートメーションがジャンプするフォールバックステップを指定します。
**注記**  
`Default` 値を指定しない場合は、`isEnd` オプションを指定できます。`Choices` である `true` がない場合、および `Default` 値が指定されていない場合は、オートメーションはステップの最後で停止します。

次のテンプレートを使用して、ランブックの `aws:branch` ステップを構築します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ YAML ]

```
mainSteps:
- name: step name
  action: aws:branch
  inputs:
    Choices:
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    Default:
      step to jump to if all choices are false
```

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

```
{
   "mainSteps":[
      {
         "name":"a name for the step",
         "action":"aws:branch",
         "inputs":{
            "Choices":[
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               },
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               }
            ],
            "Default":"step to jump to if all choices are false"
         }
      }
   ]
}
```

------

#### 出力変数の作成について
<a name="branch-action-output"></a>

前のステップからの出力を参照する `aws:branch` 選択肢を作成するには、前のステップの名前と出力フィールドの名前を特定する必要があります。次に、以下の形式を使用して、ステップ名とフィールド名を結合します。

`Variable: "{{previousStepName.outputName}}"`

例えば、次の例の最初のステップは `GetInstance` という名前です。そして、`outputs` の下に、`platform` というフィールドがあります。2 番目のステップ (`ChooseOSforCommands`) では、作成者はプラットフォームフィールドからの出力を変数として参照しようとしています。変数を作成するには、単純にステップ名 (GetInstance) と出力フィールド名 (platform) を組み合わせて `Variable: "{{GetInstance.platform}}"` を作成します。

```
mainSteps:
- Name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
    Filters:
    - Key: InstanceIds
      Values: ["{{ InstanceId }}"]
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
```

前のステップと出力から *"Variable": "\$1\$1 describeInstance.Platform \$1\$1"* を作成する方法例を示します。

```
- name: describeInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
  - Name: Platform
    Selector: "$.Reservations[0].Instances[0].Platform"
    Type: String
  nextStep: branchOnInstancePlatform
- name: branchOnInstancePlatform
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runEC2RescueForWindows
      Variable: "{{ describeInstance.Platform }}"
      StringEquals: windows
    Default: runEC2RescueForLinux
```

### `aws:branch` ランブックの例
<a name="branch-runbook-examples"></a>

以下に、`aws:branch` を使用するランブックの例をいくつか挙げます。

**例 1: 出力変数で `aws:branch` を使用し、オペレーティングシステムの種類に基づいてコマンドを実行する**

この例 (`GetInstance`) の最初の手順では、ランブック作成者は `aws:executeAwsApi` アクションを使用して、`ssm` `DescribeInstanceInformation` API オペレーションを呼び出します。作成者はこのアクションを使用して、インスタンスが使用しているオペレーティングシステムのタイプを判別します。`aws:executeAwsApi` アクションはインスタンス ID とプラットフォームタイプを出力します。

2 番目のステップ (`ChooseOSforCommands`) では、2 つの `aws:branch` (`Choices`) と (`NextStep: runPowerShellCommand`) を使用して `NextStep: runShellCommand` アクションを使用します。自動化は、前の手順 (`Variable: "{{GetInstance.platform}}"`) の出力を使用して、インスタンスのオペレーティングシステムを評価します。オートメーションは、指定されたオペレーティングシステムのステップにジャンプします。

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
mainSteps:
- name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
- name: runShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runPowerShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

**例 2: パラメータ変数で `aws:branch` を使用し、オペレーティングシステムの種類に基づいてコマンドを実行する**

ランブック作成者は、`parameters` セクションのランブックの先頭にいくつかのパラメータオプションを定義します。1 つのパラメータの名前は `OperatingSystemName` です。最初のステップ (`ChooseOS`) では、2 つの `aws:branch` (`Choices`) と (`NextStep: runWindowsCommand`) を使用して `NextStep: runLinuxCommand` アクションを使用します。これらの `Choices` の変数は、パラメータセクション (`Variable: "{{OperatingSystemName}}"`) で指定されたパラメータオプションを参照します。ユーザーがこのランブックを実行すると、実行時に `OperatingSystemName` の値を指定します 。オートメーションでは、`Choices` の評価時にランタイムパラメータが使用されます。オートメーションは、`OperatingSystemName` に指定されたランタイムパラメータに基づいて、指定されたオペレーティングシステムのステップにジャンプします。

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
  OperatingSystemName:
    type: String
  LinuxInstanceId:
    type: String
  WindowsInstanceId:
    type: String
mainSteps:
- name: ChooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: linux
    Default:
      Sleep
- name: runLinuxCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunShellScript"
    InstanceIds:
    - "{{LinuxInstanceId}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runWindowsCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunPowerShellScript"
    InstanceIds:
    - "{{WindowsInstanceId}}"
    Parameters:
      commands:
      - date
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

### 演算子を使用した複雑な分岐オートメーションの作成
<a name="branch-operators"></a>

`And` ステップで `Or`、`Not`、および `aws:branch` 演算子を使用して、複雑な分岐オートメーションを作成できます。

**"And" 演算子**  
選択肢の複数の変数を `And` にする場合は、`true` 演算子を使用します。次の例では、最初の選択肢に対して、インスタンスが `running` の状態で、`Windows` オペレーティングシステムを使用しているかどうかを評価します。これらの変数の*両方*が true と評価された場合、オートメーションは `runPowerShellCommand` ステップにジャンプします。1 つ以上の変数が `false` の場合、オートメーションは 2 番目の選択肢の変数を評価します。

```
mainSteps:
- name: switch2
  action: aws:branch
  inputs:
    Choices:
    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Windows
      NextStep: runPowerShellCommand

    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Linux
      NextStep: runShellCommand
    Default:
      sleep3
```

**"OR" 演算子**  
選択肢の複数の変数の*いずれか*を true にする場合は、`Or` 演算子を使用します。次の例では、最初の選択は、パラメータ文字列が `Windows` であるかどうか、AWS Lambda ステップからの出力が true かどうかを評価します。これらの変数の*どちらか*が true であると判断された場合、オートメーションは `RunPowerShellCommand` ステップにジャンプします。両方の変数が false の場合、オートメーションは 2 番目の選択肢の変数を評価します。

```
- Or:
  - Variable: "{{parameter1}}"
    StringEquals: Windows
  - Variable: "{{BooleanParam1}}"
    BooleanEquals: true
  NextStep: RunPowershellCommand
- Or:
  - Variable: "{{parameter2}}"
    StringEquals: Linux
  - Variable: "{{BooleanParam2}}"
    BooleanEquals: true
  NextStep: RunShellScript
```

**"Not" 演算子**  
変数が true *でない場合*に定義されたステップにジャンプする場合は、`Not` 演算子を使用します。次の例では、最初の選択肢は、パラメータ文字列が `Not Linux` かどうかを評価します。変数が Linux ではないと判断された場合、オートメーションは `sleep2` ステップにジャンプします。最初の選択肢が Linux *である*と判断された場合、オートメーションは次の選択肢を評価します。

```
mainSteps:
- name: switch
  action: aws:branch
  inputs:
    Choices:
    - NextStep: sleep2
      Not:
        Variable: "{{testParam}}"
        StringEquals: Linux
    - NextStep: sleep1
      Variable: "{{testParam}}"
      StringEquals: Windows
    Default:
      sleep3
```

## 条件オプションの使用例
<a name="conditional-examples"></a>

このセクションでは、ランブックで動的オプションを使用するさまざまな例について説明します。このセクションのそれぞれの例では、次のランブックを拡張します。このランブックには 2 つのアクションがあります。最初のアクションは `InstallMsiPackage` という名前です。`aws:runCommand` アクションを使用して、Windows Server インスタンスにアプリケーションをインストールします。2 番目のアクションは、`TestInstall` という名前です。このアクションは、`aws:invokeLambdaFunction` アクションを使用し、アプリケーションが正常にインストールされているかどうか、インストールされているアプリケーションのテストを実行します。ステップ 1 で `onFailure: Abort` を指定します。つまり、アプリケーションがインストールされなかった場合は、オートメーションの実行はステップ 2 より前で停止します。

**例 1:2 つのリニアアクションがあるランブック**

```
---
schemaVersion: '0.3'
description: Install MSI package and run validation.
assumeRole: "{{automationAssumeRole}}"
parameters:
  automationAssumeRole:
    type: String
    description: "(Required) Assume role."
  packageName:
    type: String
    description: "(Required) MSI package to be installed."
  instanceIds:
    type: String
    description: "(Required) Comma separated list of instances."
mainSteps:
- name: InstallMsiPackage
  action: aws:runCommand
  maxAttempts: 2
  onFailure: Abort
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
...
```

**`onFailure` オプションを使用し、別のステップにジャンプする動的オートメーションを作成する**

次の例では、`onFailure: step:step name`、`nextStep`、および `isEnd` オプションを使用して、動的オートメーションを作成します。この例では、`InstallMsiPackage` アクションが失敗すると、自動化は *PostFailure* (`onFailure: step:PostFailure`) というアクションにジャンプし、インストールに失敗したイベントの何らかのアクションを実行する AWS Lambda 関数を実行します。インストールが成功した場合は、自動化は TestInstall アクション (`nextStep: TestInstall`) にジャンプします。`TestInstall` ステップと `PostFailure` ステップの両方で `isEnd` オプション (`isEnd: true`) を使用すると、これらのステップのいずれかが完了したときにオートメーションが終了します。

**注記**  
`isEnd` セクションの最後のステップでの、`mainSteps` オプションの使用はオプションです。最後のステップが他のステップにジャンプしない場合、最後のステップのアクションの実行後にオートメーションは停止します。

**例 2: 別のステップにジャンプする動的オートメーション**

```
mainSteps
- name: InstallMsiPackage
  action: aws:runCommand
  onFailure: step:PostFailure
  maxAttempts: 2
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
  nextStep: TestInstall
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
  isEnd: true
- name: PostFailure
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: PostFailureRecoveryLambdaFunction
  isEnd: true
...
```

**注記**  
ランブックを処理する前に、システムはランブックが無限ループを作成していないことを確認します。無限ループが検出された場合、自動化はエラー、およびどのステップがループを作成しているかを示すサークルトレースを返します。

**重要な手順を定義する動的オートメーションの作成**

オートメーション全体の成功にとって非常に重要なステップを指定できます。重要なステップが失敗した場合、1 つ以上のステップが正常に実行されたとしても、オートメーションは実行のステータスを `Failed` としてレポートします。次の例では、*InstallMsiPackage* ステップが失敗した (`onFailure: step:VerifyDependencies`) 場合に、ユーザーは *VerifyDependencies* ステップを識別します。ユーザーは、`InstallMsiPackage` ステップが critical ではないことを指定します (`isCritical: false`)。この例では、アプリケーションのインストールに失敗した場合、自動化は `VerifyDependencies` ステップを処理して、アプリケーションのインストールが失敗する原因となる、1 つ以上の依存関係が欠落していないかどうかを判断します。

**例 3: オートメーションを定義する重要なステップ**

```
---
name: InstallMsiPackage
action: aws:runCommand
onFailure: step:VerifyDependencies
isCritical: false
maxAttempts: 2
inputs:
  InstanceIds:
  - "{{instanceIds}}"
  DocumentName: AWS-RunPowerShellScript
  Parameters:
    commands:
    - msiexec /i {{packageName}}
nextStep: TestPackage
...
```

# アクション出力の入力としての使用
<a name="automation-action-outputs-inputs"></a>

いくつかのオートメーションアクションは、定義済みの出力を返します。`{{stepName.outputName}}` 形式を使用して、これらの出力をランブックの後のステップに入力として渡すことができます。ランブックでは、さまざまなオートメーションアクションについて、その出力を定義することができます。これにより、スクリプトを実行することや、他の AWS のサービス のために API オペレーションを呼び出すことができ、その出力値は、後のアクションで入力として再利用できます。ランブック内のパラメータのデータ型は静的です。つまり、パラメータのデータ型は定義後に変更することはできません。ステップ出力を定義するには、以下のフィールドを指定します。
+ 名前: (必須) 後のステップで出力値を参照するために使用する出力名。
+ セレクター: (必須) 出力値を決定するために使用される JSONPath 式。
+ タイプ: (オプション) セレクターフィールドによって返されます。有効なタイプ値は `String`、`Integer`、`Boolean`、`StringList`、`StringMap`、`MapList` です。デフォルト値は `String` です。

出力の値が指定したデータ型と一致しない場合、オートメーションはデータ型を変換しようとします。例えば、返される値が `Integer` で、指定された `Type` が `String` の場合、最終的な出力値は `String` 値です。次のネットワーク接続タイプがサポートされています。
+ `String` 値は `StringList`、`Integer`、および `Boolean` に変換できます。
+ `Integer` 値は `String` および `StringList` に変換できます。
+ `Boolean` 値は `String` および `StringList` に変換できます。
+ 1 つの要素を含む `StringList`、`IntegerList`、または `BooleanList` 値は、`String`、`Integer` または `Boolean` に変換できます。

自動化アクションでパラメータを使用する場合、アクションの入力内でデータ型を動的に変更することはできません。

アクションの出力を定義し、その出力値を後のアクションで入力として参照する方法を示した、ランブックの例を次に示します。このランブックでは、以下を処理します。
+ `aws:executeAwsApi` アクションを使用して Amazon EC2 DescribeImages API オペレーションを呼び出し、特定の Windows Server 2016 AMI の名前を取得します。イメージ ID を `ImageId` として出力します。
+ `aws:executeAwsApi` アクションを使用して、Amazon EC2 RunInstances API オペレーションを呼び出し、前の手順の `ImageId` を使用するインスタンスを 1 つ起動します。インスタンス ID を `InstanceId` として出力します。
+ ` aws:waitForAwsResourceProperty` アクションを使用して Amazon EC2 DescribeInstanceStatus API オペレーションをポーリングし、インスタンスが `running` 状態になるまで待機します。アクションは 60 秒でタイムアウトします。60 秒間のポーリング後にインスタンス状態が `running` にならなかった場合、このステップはタイムアウトします。
+ `aws:assertAwsResourceProperty` アクションを使用して Amazon EC2 `DescribeInstanceStatus` API オペレーションを呼び出し、インスタンスが `running` 状態であることをアサートします。インスタンス状態が `running` ではない場合、このステップは失敗します。

```
---
description: Sample runbook using AWS API operations
schemaVersion: '0.3'
assumeRole: "{{ AutomationAssumeRole }}"
parameters:
  AutomationAssumeRole:
    type: String
    description: "(Optional) The ARN of the role that allows Automation to perform the actions on your behalf."
    default: ''
  ImageName:
    type: String
    description: "(Optional) Image Name to launch EC2 instance with."
    default: "Windows_Server-2022-English-Full-Base*"
mainSteps:
- name: getImageId
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: DescribeImages
    Filters:  
    - Name: "name"
      Values: 
      - "{{ ImageName }}"
  outputs:
  - Name: ImageId
    Selector: "$.Images[0].ImageId"
    Type: "String"
- name: launchOneInstance
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: RunInstances
    ImageId: "{{ getImageId.ImageId }}"
    MaxCount: 1
    MinCount: 1
  outputs:
  - Name: InstanceId
    Selector: "$.Instances[0].InstanceId"
    Type: "String"
- name: waitUntilInstanceStateRunning
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 60
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
- name: assertInstanceStateRunning
  action: aws:assertAwsResourceProperty
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
outputs:
- "launchOneInstance.InstanceId"
...
```

前述の各オートメーションアクションを使用すると、サービス名前空間、API オペレーション名、入力パラメータ、および出力パラメータを指定して、特定の API オペレーションを呼び出すことができます。入力は、選択した API オペレーションによって定義されます。API オペレーション (メソッド) は、以下の「[サービスリファレンス](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)」ページの左側のナビゲーションでサービスを選択することで表示できます。呼び出すサービスの [**Client (クライアント)**] セクションでメソッドを選択します。例えば、Amazon Relational Database Service (Amazon RDS) のすべての API オペレーション (メソッド) は、[Amazon RDS メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html)のページに一覧表示されます。

各オートメーションアクションのスキーマは、次の場所で表示できます。
+ [`aws:assertAwsResourceProperty` – AWS リソースの状態またはイベントの状態をアサートする](automation-action-assertAwsResourceProperty.md)
+ [`aws:executeAwsApi` — AWS API オペレーションの呼び出しと実行](automation-action-executeAwsApi.md)
+ [`aws:waitForAwsResourceProperty` – AWS リソースプロパティを待つ](automation-action-waitForAwsResourceProperty.md)

スキーマには、各アクションを使用するための必須フィールドの説明が含まれています。

**Selector/PropertySelector フィールドの使用**  
各オートメーションアクションでは、出力 `Selector` (`aws:executeAwsApi` 用) または `PropertySelector` (`aws:assertAwsResourceProperty` および `aws:waitForAwsResourceProperty` 用) を指定する必要があります。これらのフィールドは、AWS API オペレーションから JSON 応答を処理するために使用されます。これらのフィールドは JSONPath 構文を使用します。

次に、`aws:executeAwsAPi` アクションのこの概念を説明する例を示します。

```
---
mainSteps:
- name: getImageId
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: DescribeImages
    Filters:  
      - Name: "name"
        Values: 
          - "{{ ImageName }}"
  outputs:
    - Name: ImageId
      Selector: "$.Images[0].ImageId"
      Type: "String"
...
```

`aws:executeAwsApi` ステップ `getImageId` で、オートメーションは `DescribeImages` API オペレーションを呼び出し、`ec2` からレスポンスを受け取ります。次に、オートメーションは `Selector - "$.Images[0].ImageId"` を API レスポンスに適用し、選択した値を出力 `ImageId` 変数に割り当てます。同じ自動化の他のステップでは、`ImageId` を指定して `"{{ getImageId.ImageId }}"` の値を使用できます。

次に、`aws:waitForAwsResourceProperty` アクションのこの概念を説明する例を示します。

```
---
- name: waitUntilInstanceStateRunning
  action: aws:waitForAwsResourceProperty
  # timeout is strongly encouraged for action - aws:waitForAwsResourceProperty
  timeoutSeconds: 60
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
...
```

`aws:waitForAwsResourceProperty` ステップ `waitUntilInstanceStateRunning` で、オートメーションは `DescribeInstanceStatus` API オペレーションを呼び出し、`ec2` からレスポンスを受け取ります。次に、オートメーションは `PropertySelector - "$.InstanceStatuses[0].InstanceState.Name"` をレスポンスに適用し、指定された戻り値が `DesiredValues` リスト (この場合は `running`) の値と一致するかどうかを確認します。このステップは、レスポンスが `running` のインスタンスの状態を返すまでプロセスを繰り返します。

## ランブックでの JSONPath の使用
<a name="automation-action-json-path"></a>

JSONPath 式は、「\$1.」で始まる文字列で、JSON 要素内の 1 つ以上のコンポーネントを選択するために使用されます。次のリストには、Systems Manager Automation でサポートされている JSONPath 演算子に関する情報が含まれています。
+ **Dot-notated child (.)**: JSON オブジェクトで使用します。この演算子は、特定のキーの値を選択します。
+ **Deep-scan (..)**: JSON 要素で使用します。この演算子は、レベル別に JSON 要素レベルをスキャンし、特定のキーで値のリストを選択します。この演算子の戻り型は、常に JSON 配列です。オートメーションアクションの出力タイプのコンテキストでは、演算子は StringList または MapList のいずれかになります。
+ **Array-Index([ ])**: JSON 配列で使用します。この演算子は、特定のインデックスの値を取得します。
+ **Filter ([?(*expression*)])**: JSON 配列と一緒に使用します。このオペレータは、フィルター式で定義された条件と一致する JSON 配列値をフィルタリングします。フィルター式では、以下の演算子のみを使用できます。==、\$1=、>、<、>=、<= 複数のフィルター式を AND (&&) または OR (\$1\$1) と組み合わせることはサポートされていません。この演算子の戻り型は、常に JSON 配列です。

JSONPath 演算子をよりよく理解するために、ec2 `DescribeInstances` API オペレーションの次の JSON 応答を確認してください。このレスポンスの下には、`DescribeInstances` API オペレーションからのレスポンスにさまざまな JSONPath 式を適用してさまざまな結果を示すいくつかの例があります。

```
{
    "NextToken": "abcdefg",
    "Reservations": [
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-abcd12345678910",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-000000000000"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    }
                }
            ],
            "Groups": []
        },
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-12345678910abcd",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-111111111111"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 80,
                        "Name": "stopped"
                    }
                }
            ],
            "Groups": []
        }
    ]
}
```

**JSONPath 例 1: JSON レスポンスから特定の文字列を取得する**

```
JSONPath: 
$.Reservations[0].Instances[0].ImageId 

Returns:
"ami-12345678"

Type: String
```

**JSONPath 例 2: JSON レスポンスから特定のブーリアンを取得する**

```
JSONPath:
$.Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.DeleteOnTermination
        
Returns:
true

Type: Boolean
```

**JSONPath 例 3: JSON レスポンスから特定の整数を取得する**

```
JSONPath:
$.Reservations[0].Instances[0].State.Code
        
Returns:
16

Type: Integer
```

**JSONPath 例 4: JSON レスポンスを詳細にスキャンし、VolumeId のすべての値を StringList として取得する** 

```
JSONPath:
$.Reservations..BlockDeviceMappings..VolumeId
        
Returns:
[
   "vol-000000000000",
   "vol-111111111111"
]

Type: StringList
```

**JSONPath 例 5: 特定の BlockDeviceMappings オブジェクトを StringMap として取得する**

```
JSONPath:
$.Reservations[0].Instances[0].BlockDeviceMappings[0]
        
Returns:
{
   "Ebs" : {
      "DeleteOnTermination" : true,
      "Status" : "attached",
      "VolumeId" : "vol-000000000000"
   },
   "DeviceName" : "/dev/xvda"
}

Type: StringMap
```

**JSONPath 例 6: JSON レスポンスを詳細にスキャンし、すべての State のオブジェクトを MapList として取得します**

```
JSONPath:
$.Reservations..Instances..State 
    
Returns:
[
   {
      "Code" : 16,
      "Name" : "running"
   },
   {
      "Code" : 80,
      "Name" : "stopped"
   }
]

Type: MapList
```

**JSONPath の例 7: `running` ステート内のインスタンスをフィルター処理する**

```
JSONPath:
$.Reservations..Instances[?(@.State.Name == 'running')]

Returns:
[
  {
    "ImageId": "ami-12345678",
    "BlockDeviceMappings": [
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "Status": "attached",
          "VolumeId": "vol-000000000000"
        },
        "DeviceName": "/dev/xvda"
      }
    ],
    "State": {
      "Code": 16,
      "Name": "running"
    }
  }
]

Type: MapList
```

**JSONPath の例 8: `running` ステートにないインスタンスのうち、`ImageId` を返す**

```
JSONPath:
$.Reservations..Instances[?(@.State.Name != 'running')].ImageId

Returns:
[
  "ami-12345678"
]

Type: StringList | String
```

# Automation 向けのウェブフック統合の作成
<a name="creating-webhook-integrations"></a>

オートメーション中にウェブフックを使用してメッセージを送信するには、統合を作成します。ランブック内で `aws:invokeWebhook` アクションを使用すると、統合をオートメーション中に呼び出すことができます。ウェブフックをまだ作成していない場合は、「[統合用のウェブフックの作成](#creating-webhooks)」を参照してください。`aws:invokeWebhook` アクションの詳細については、「[`aws:invokeWebhook` – オートメーションのウェブフック統合を呼び出す](invoke-webhook.md)」を参照してください。

次の手順に示すように、Systems Manager のオートメーションコンソール、または任意のコマンドラインツールを使用して、統合を作成できます。

## 統合の作成 (コンソール)
<a name="creating-integrations-console"></a>

**オートメーション用に統合を作成するには (コンソール)**

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

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

1. **[Integrations]** (統合) タブを開きます。

1. **[Add integration]** (統合を追加)、**[Webhook]** (ウェブフック) の順にクリックします。

1. 統合に適用する、必須の値および任意のオプション値を入力します。

1. **[Add]** (追加) をクリックして統合を作成します。

## 統合の作成 (コマンドライン)
<a name="creating-integrations-commandline"></a>

コマンドラインツールを使用して統合を作成するためには、その統合に必須の `SecureString` パラメータを作成します。オートメーションは、統合に関する情報を格納するために、Systems Manager のツールである Parameter Store 内で予約済みの名前空間を使用します。AWS マネジメントコンソール を使用して統合を作成する場合には、ユーザーに代わりオートメーションがこのプロセスを処理します。名前空間に続いて、作成する統合のタイプ、および統合の名前を指定する必要があります。現在、オートメーションでは `webhook` タイプの統合がサポートされています。

`webhook` タイプの統合では、以下のフィールドがサポートされます。
+ 説明
+ ヘッダー
+ payload
+ [URL]

**[開始する前に]**  
まだ AWS Command Line Interface (AWS CLI) または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」および「[AWS Tools for PowerShell のインストール](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)」を参照してください。

**オートメーション用に統合を作成するには (コマンドライン)**
+ 以下のコマンドを実行して、統合に必須な `SecureString` パラメータを作成します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。`/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/` 名前空間は、Parameter Store 内で統合用として予約されています。パラメータの名前は、この名前空間と同じものを (後に統合の名前を続けて) 使用する必要があります。例: `/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration`。

------
#### [ Linux & macOS ]

  ```
  aws ssm put-parameter \
      --name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" \
      --type "SecureString" \
      --data-type "aws:ssm:integration" \
      --value '{"description": "My first webhook integration for Automation.", "url": "myWebHookURL"}'
  ```

------
#### [ Windows ]

  ```
  aws ssm put-parameter ^
      --name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" ^
      --type "SecureString" ^
      --data-type "aws:ssm:integration" ^
      --value  "{\"description\":\"My first webhook integration for Automation.\",\"url\":\"myWebHookURL\"}"
  ```

------
#### [ PowerShell ]

  ```
  Write-SSMParameter `
      -Name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" `
      -Type "SecureString"
      -DataType "aws:ssm:integration"
      -Value '{"description": "My first webhook integration for Automation.", "url": "myWebHookURL"}'
  ```

------

## 統合用のウェブフックの作成
<a name="creating-webhooks"></a>

プロバイダでウェブフックを作成する場合は、以下の点に注意してください。
+ プロトコルは HTTPS を使用する必要があります。
+ カスタムリクエストヘッダーをサポートする必要があります。
+ デフォルトのリクエストボディを指定できます。
+ デフォルトのリクエストボディは、`aws:invokeWebhook` アクションを使用して統合が呼び出された時点でオーバーライドされます

# ランブックでのタイムアウトの処理
<a name="automation-handling-timeouts"></a>

`timeoutSeconds` プロパティはオートメーションのすべてのアクションで共有されます。このプロパティを使用して、アクションの実行タイムアウト値を指定できます。さらに、アクションのタイムアウトがオートメーションと全体的な実行ステータスに与える影響を変更できます。そのためには、アクションの `onFailure` および `isCritical` 共有プロパティも定義します。

たとえば、ユースケースによっては、アクションがタイムアウトした場合に、オートメーションが別のアクションを続行し、オートメーションの全体的なステータスに影響を与えないようにすることもできます。この例では、`timeoutSeconds` プロパティを使用して、アクションがタイムアウトするまでの待機時間を指定しています。次に、タイムアウトが発生した場合にオートメーションが続行するアクション (ステップ) を指定します。デフォルト値の `step:step name` ではなく、`onFailure` プロパティの `Abort` 形式の値を指定します。デフォルトでは、アクションがタイムアウトした場合、オートメーションの実行ステータスは `Timed Out` になります。タイムアウトが オートメーションの実行ステータスに影響を与えないようにするには、`false` プロパティに `isCritical` を指定します。

以下の例では、このシナリオで説明されているアクションの共有プロパティを定義する方法を示しています。

------
#### [ YAML ]

```
- name: verifyImageAvailability
  action: 'aws:waitForAwsResourceProperty'
  timeoutSeconds: 600
  isCritical: false
  onFailure: 'step:getCurrentImageState'
  inputs:
    Service: ec2
    Api: DescribeImages
    ImageIds:
      - '{{ createImage.newImageId }}'
    PropertySelector: '$.Images[0].State'
    DesiredValues:
      - available
  nextStep: copyImage
```

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

```
{
    "name": "verifyImageAvailability",
    "action": "aws:waitForAwsResourceProperty",
    "timeoutSeconds": 600,
    "isCritical": false,
    "onFailure": "step:getCurrentImageState",
    "inputs": {
        "Service": "ec2",
        "Api": "DescribeImages",
        "ImageIds": [
            "{{ createImage.newImageId }}"
        ],
        "PropertySelector": "$.Images[0].State",
        "DesiredValues": [
            "available"
        ]
    },
    "nextStep": "copyImage"
}
```

------

オートメーションのすべてのアクションで共有されるプロパティの詳細については、「[すべてのアクションで共有されるプロパティ](automation-actions.md#automation-common)」を参照してください。

# Systems Manager Automation ランブックのリファレンス
<a name="automation-documents-reference"></a>

AWS Systems Manager では、お客様が迅速に使用を開始していただけるように、事前定義済みのランブックが用意されています。これらのランブックは、アマゾンウェブサービス、AWS サポート、および AWS Config によって管理されています。このランブックリファレンスでは、Systems Manager、サポート、および AWS Config から提供される、定義済みのランブックについて説明します。詳細については、「[Systems Manager Automation Runbook Reference](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide)」を参照してください。

# チュートリアル
<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]** (ルールの作成) を選択します。

# Systems Manager Automation が返すステータスについて学ぶ
<a name="automation-statuses"></a>

AWS Systems Manager Automation は、Automation の実行時およびAutomation 全体について、Automation アクションまたはステップが通過するさまざまなステータスに関する詳細なステータス情報をレポートします。Automation は AWS Systems Manager のツールです。次の方法を使用して、コマンドのステータスを監視できます。
+ Systems Manager Automation コンソールで、**実行ステータス**をモニタリングします。
+ 任意のコマンドラインツールを使用します。AWS Command Line Interface( AWS CLI) では、[describe-automation-step-executions](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-automation-step-executions.html) または [get-automation-execution](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-automation-execution.html) を使用できます。AWS Tools for Windows PowerShell では、[ Get-SSMAUTOMationStepExecution ](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMAutomationStepExecution.html) または [ Get-SSMAUTOMationExecution ](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMAutomationExecution.html) を使用できます。
+ アクションまたはオートメーションステータスの変更に応答するように Amazon EventBridge を設定します。

オートメーションにおけるタイムアウトの処理の詳細については、「[ランブックでのタイムアウトの処理](automation-handling-timeouts.md)」を参照してください。

## オートメーションステータスについて
<a name="automation-statuses-about"></a>

オートメーションは、全体的なオートメーションに加え、個々のオートメーションアクションのステータスの詳細もレポートします。

全体的なオートメーションステータスは、次の表に示す個々のアクションまたはステップによって報告されるステータスと異なる場合があります。


**コマンドの詳細なステータス**  

| ステータス | 詳細 | 
| --- | --- | 
| Pending | ステップの実行が開始されていません。オートメーションで条件付きアクションが使用されている場合、ステップを実行するための条件が満たされなかった場合、オートメーションが完了した後も、ステップはこの状態のままになります。ステップが実行される前にオートメーションがキャンセルされた場合も、ステップはこの状態のままになります。 | 
| InProgress | ステップは実行中です。 | 
| 待機中です | ステップは入力を待っています。 | 
| 成功 | ステップは正しく完了しています。これは終了状態です。 | 
| TimedOut | 指定されたタイムアウト期間より前にステップまたは承認が完了しませんでした。これは終了状態です。 | 
| キャンセル | ステップは、リクエスタによってキャンセルされた後に停止中です。 | 
| キャンセル | ステップは、完了する前にリクエスタによって停止されました。これは終了状態です。 | 
| 失敗 |  ステップは正常に完了しませんでした。これは終了状態です。  | 
| Exited |  `aws:loop` アクションによってのみ返されます。ループは完全には完了しませんでした。ループ内のステップが `nextStep`、`onCancel`、または `onFailure` プロパティを使用して外部のステップに移動しました。  | 


**オートメーションの詳細なステータス**  

| ステータス | 詳細 | 
| --- | --- | 
| Pending | オートメーションの実行が開始されていません。 | 
| InProgress | オートメーションが実行されています。 | 
| 待機中です | オートメーションは入力を待っています。 | 
| 成功 | オートメーションが正常に完了しました。これは終了状態です。 | 
| TimedOut | 指定されたタイムアウト期間より前にステップまたは承認が完了しませんでした。これは終了状態です。 | 
| キャンセル | オートメーションは、リクエスタによってキャンセルされた後に停止中です。 | 
| キャンセル | オートメーションは、完了する前にリクエスタによって停止されました。これは終了状態です。 | 
| 失敗 |  オートメーションは正常に完了しませんでした。これは終了状態です。  | 

# Systems Manager Automation のトラブルシューティング
<a name="automation-troubleshooting"></a>

AWS Systems Manager のツールである AWS Systems Manager Automation に問題が生じた場合にトラブルシューティングするときは、次の情報が役立ちます。このトピックには、自動化エラーメッセージにおける問題を解決するための特定のタスクが含まれます。

**Topics**
+ [一般的な自動化エラー](#automation-trbl-common)
+ [自動化の実行開始の失敗](#automation-trbl-access)
+ [実行は開始するが、ステータスが失敗になる](#automation-trbl-exstrt)
+ [実行は開始するが、タイムアウトになる](#automation-trbl-to)

## 一般的な自動化エラー
<a name="automation-trbl-common"></a>

このセクションでは、一般的な自動化エラーについて説明します。

### VPC not defined 400
<a name="automation-trbl-common-vpc"></a>

デフォルトでは、オートメーションが `AWS-UpdateLinuxAmi` ランブックまたは `AWS-UpdateWindowsAmi` ランブックを実行すると、システムはデフォルト VPC (172.30.0.0/16) に一時インスタンスを作成します。デフォルト VPC を削除した場合、次のエラーが発生します。

`VPC not defined 400`

この問題を解決するには、`SubnetId` 入力パラメータに値を指定する必要があります。

## 自動化の実行開始の失敗
<a name="automation-trbl-access"></a>

AWS Identity and Access Management (IAM) ロール、オートメーションのポリシーが正しく設定されていない場合、オートメーションはアクセス拒否エラーまたは無効な継承ロールエラーによって失敗する可能性があります。

### アクセスが拒否されました
<a name="automation-trbl-access-denied"></a>

次の例では、オートメーションがアクセス拒否エラーによって失敗した状態を説明します。

**Systems Manager API へのアクセスが拒否されました**  
**エラーメッセージ**: `User: user arn isn't authorized to perform: ssm:StartAutomationExecution on resource: document arn (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: AccessDeniedException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`
+ 考えられる原因 1: オートメーションを開始しようとしているユーザーに、`StartAutomationExecution` API を呼び出すアクセス許可がない。この問題を解決するには、オートメーションを開始するために使用されるユーザーに、必要な IAM ポリシーをアタッチします。
+ 考えられる原因 2: オートメーションを開始しようとしているユーザーに `StartAutomationExecution` API を呼び出すアクセス許可があるが、特定のランブックを使用して API を呼び出すアクセス許可がない。この問題を解決するには、オートメーションを開始するために使用されるユーザーに、必要な IAM ポリシーをアタッチします。

**PassRole 許可がないことによるアクセスの拒否**  
**エラーメッセージ**: `User: user arn isn't authorized to perform: iam:PassRole on resource: automation assume role arn (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: AccessDeniedException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`

オートメーションを開始しようとしているユーザーに、ロールを継承するための PassRole 許可がない。この問題を解決するには、オートメーションを開始しようとしているユーザーのロールに、iam:PassRole ポリシーをアタッチします。詳細については、「[タスク 2: iam:PassRole ポリシーをオートメーションロールにアタッチする](automation-setup-iam.md#attach-passrole-policy)」を参照してください。

### 無効な継承ロール
<a name="automation-trbl-ar"></a>

自動化を実行するとき、継承ロールはランブックで提供されるか、あるいはランブックにパラメータ値として渡されます。継承ロールが指定されていない、あるいは正しく設定されていない場合、複数の種類のエラーが発生することがあります。

**形式が正しくない継承ロール**  
**エラーメッセージ**: `The format of the supplied assume role ARN isn't valid.` 継承ロールが不適切にフォーマットされている。この問題を解決するには、ランブックで有効な継承ロールが指定されていること、あるいは自動化を開始するときにランタイムパラメータとして指定されていることを確認します。

**継承ロールが継承されない**  
**エラーメッセージ**: `The defined assume role is unable to be assumed. (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: InvalidAutomationExecutionParametersException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`
+ 考えられる原因 1: 継承ロールが存在しない。この問題を解決するには、ロールを作成します。詳細については、「」を参照してください[オートメーションの設定](automation-setup.md) このロールを作成するための詳細は、このトピック 「[タスク 1: 自動化のサービスロールを作成する](automation-setup-iam.md#create-service-role)」で説明されています。
+ 考えられる原因 2: 継承ロールに Systems Manager サービスとの信頼関係がない。この問題を解決するには、信頼関係を作成します。詳細については、*IAM ユーザーガイド*の「[ロールを引き受けることができない](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_cant-assume-role)」を参照してください。

## 実行は開始するが、ステータスが失敗になる
<a name="automation-trbl-exstrt"></a>

### アクション固有の失敗
<a name="automation-trbl-actspec"></a>

ランブックには、ステップとステップの実行が順番に含まれています。各ステップは、1 つまたは複数の AWS のサービス API を起動します。この API は、ステップの入力、動作、出力を決定します。エラーによって 1 つのステップが失敗する可能性のある複数の場所があります。失敗メッセージは、いつどこでエラーが発生したかを示します。

Amazon Elastic Compute Cloud (Amazon EC2) コンソールで失敗メッセージを表示するには、失敗したステップの [**出力を表示**] リンクを選択します。AWS CLI から失敗メッセージを表示するには、`get-automation-execution` を呼び出して、失敗した `FailureMessage` から `StepExecution` 属性を検索します。

次の例では、`aws:runInstance` アクションに関連付けられたステップが失敗しています。それぞれの例では、異なる種類のエラーを示しています。

**イメージの欠落**  
**エラーメッセージ**: `Automation Step Execution fails when it's launching the instance(s). Get Exception from RunInstances API of ec2 Service. Exception Message from RunInstances API: [The image id '[ami id]' doesn't exist (Service: AmazonEC2; Status Code: 400; Error Code: InvalidAMIID.NotFound; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)]. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

`aws:runInstances` アクションは、存在しない `ImageId` への入力を受信しました。この問題を解決するには、適切な AMI ID を使用してランブックまたはパラメータ値を更新します。

**継承ロールポリシーに十分なアクセス許可がない**  
**エラーメッセージ**: `Automation Step Execution fails when it's launching the instance(s). Get Exception from RunInstances API of ec2 Service. Exception Message from RunInstances API: [You aren't authorized to perform this operation. Encoded authorization failure message: xxxxxxx (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)]. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

継承ロールに、EC2 インスタンスで `RunInstances` API を呼び出す十分なアクセス許可がありません。この問題を解決するには、継承ロールに `RunInstances` API を呼び出すアクセス許可がある継承ロールに IAM ポリシーをアタッチします。詳細については、「[コンソールを使用して Automation 用のサービスロールを作成する](automation-setup-iam.md)」を参照してください。

**予期できないステート**  
**エラーメッセージ**: `Step fails when it's verifying launched instance(s) are ready to be used. Instance i-xxxxxxxxx entered unexpected state: shutting-down. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`
+ 考えられる原因 1: インスタンスまたは Amazon EC2 サービスに問題がある。この問題を解決するには、インスタンスにログインするか、インスタンスシステムログを参照して、インスタンスがシャットダウンするようになった原因を検索します。
+ 考えられる原因 2: `aws:runInstances` アクションに指定されるユーザーデータスクリプトに問題があるか、あるいは正しくない構文がある。ユーザーデータスクリプトの構文を確認します。また、ユーザーデータスクリプトがインスタンスをシャットダウンしていない、あるいはインスタンスをシャットダウンするその他のスクリプトを呼び出していないかも確認します。

**アクション固有の失敗リフェレンス**  
ステップが失敗すると、失敗発生時にどのサービスが呼び出されたかが失敗のメッセージに示されることもあります。次の表は、各アクションによって呼び出されるサービスを一覧表示します。また、この表にはそれぞれのサービスの情報へのリンクも提供しています。


****  

| Action | このアクションによって呼び出される AWS のサービス | このサービスについての情報 | トラブルシューティングのコンテンツ | 
| --- | --- | --- | --- | 
|  `aws:runInstances`  |  Amazon EC2  |  [Amazon EC2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)  |  [EC2 インスタンスのトラブルシューティング](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-troubleshoot.html)  | 
|  `aws:changeInstanceState`  |  Amazon EC2  |  [Amazon EC2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)  |  [EC2 インスタンスのトラブルシューティング](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-troubleshoot.html)  | 
|  `aws:runCommand`  |  Systems Manager  |   [AWS Systems Manager Run Command](run-command.md)  |   [Systems Manager Run Command のトラブルシューティング](troubleshooting-remote-commands.md)  | 
|  `aws:createImage`  |  Amazon EC2  |  [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:createStack`  |  CloudFormation  |  [AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)  |  [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) のトラブルシューティング  | 
|  `aws:deleteStack`  |  CloudFormation  |  [AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)  |  [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) のトラブルシューティング  | 
|  `aws:deleteImage`  |  Amazon EC2  |  [Amazon マシンイメージ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:copyImage`  |  Amazon EC2  |  [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:createTag`  |  Amazon EC2、Systems Manager  |  [EC2 リソースとタグ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_Resources.html)  |  | 
|  `aws:invokeLambdaFunction`  |  AWS Lambda  |  [AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/)  |  [Lambda のトラブルシューティング ](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html)  | 

### 自動化サービス内部エラー
<a name="automation-trbl-err"></a>

**エラーメッセージ**: `Internal Server Error. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

自動化サービスに関する問題は、特定のランブックが正常に実行されることに影響を及ぼします。この問題を解決するには、 にお問い合わせくださいAWS サポート 可能な範囲で、実行 ID とカスタマー ID をご用意ください。

## 実行は開始するが、タイムアウトになる
<a name="automation-trbl-to"></a>

**エラーメッセージ**: `Step timed out while step is verifying launched instance(s) are ready to be used. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

`aws:runInstances` アクションのステップがタイムアウトになります。これは、ステップで `timeoutSeconds` に指定された値よりステップアクションの実行に時間がかかる場合に発生します。この問題を解決するには、`aws:runInstances` アクションで `timeoutSeconds` パラメータにより長い時間を指定してください。問題が解決しない場合は、ステップが予期される時間より長くかかる原因を診断します。

# AWS Systems Manager Change Calendar
<a name="systems-manager-change-calendar"></a>

AWS Systems Manager のツールである Change Calendar では、指定したアクション ([Systems Manager Automation](systems-manager-automation.md) ランブックなど) が AWS アカウントで実行できるまたはできない日付と時刻の範囲を設定できます。Change Calendar では、これらの範囲を*イベント*と呼びます。Change Calendar エントリを作成すると、`ChangeCalendar` タイプの [Systems Manager ドキュメント](documents.md)が作成されます。Change Calendar では、ドキュメントに [iCalendar 2.0](https://icalendar.org/) データがプレーンテキスト形式で保存されます。Change Calendar エントリに追加したイベントは、ドキュメントの一部になります。Change Calendar の使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com//systems-manager/change-calendar)を開きます。ナビゲーションペインで、**[Change Calendar]** を選択します。

Systems Manager コンソールでカレンダーとそのイベントを作成できます。また、サポートされているサードパーティーのカレンダープロバイダからエクスポートした iCalendar (`.ics`) ファイルをインポートして、そのイベントを自分のカレンダーに追加できます。サポートされているプロバイダには、Google カレンダー、Microsoft Outlook、iCloud カレンダーが含まれます。

Change Calendar エントリは、次の 2 つのタイプのいずれかになります。

**`DEFAULT_OPEN`**、またはデフォルトでオープン  
カレンダーイベント中を除き、デフォルトですべてのアクションの実行が可能です。イベント中、`DEFAULT_OPEN` カレンダーの状態は `CLOSED` となり、イベントの実行がブロックされます。

**`DEFAULT_CLOSED`**、またはデフォルトでクローズ  
カレンダーイベント中を除き、すべてのアクションがデフォルトでブロックされます。イベント中、`DEFAULT_CLOSED` カレンダーの状態は `OPEN` となり、アクションの実行が許可されます。

スケジュールされたすべての自動化ワークフロー、メンテナンスウィンドウ、および State Manager の関連付けをカレンダーに自動的に追加するように選択できます。また、これらのそれぞれのタイプをカレンダー表示から削除することもできます。

## Change Calendar はどのようなユーザーに適していますか?
<a name="systems-manager-change-calendar-who"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。
+ 次のアクションタイプを実行する AWS の顧客:
  + 自動化ランブックを作成または実行します。
  + Change Manager で変更リクエストを作成します。
  + メンテナンスウィンドウを実行します。
  + State Manager で関連付けを作成します。

  Automation、Change Manager、Maintenance Windows、State Manager はすべて AWS Systems Manager のツールです。これらのツールを Change Calendar と統合することにより、それぞれに関連付ける変更カレンダーの現在の状態に応じて、これらのアクションタイプを許可またはブロックできます。
+ Systems Manager マネージドノードの設定の一貫性、安定性、機能性を維持する管理者。

## Change Calendar の利点
<a name="systems-manager-change-calendar-benefits"></a>

Change Calendar には次のような利点があります。
+ **変更を適用する前に確認する**

  Change Calendar エントリを使用すると、環境に破壊的な影響を及ぼす可能性のある変更を適用する前に確認できます。
+ **適切な時間帯にのみ変更を適用する**

  Change Calendar エントリを使用すると、イベント期間中に環境を安定に維持できます。たとえば、カンファレンスや公開マーケティングのプロモーションなど、リソースに対する需要が高くなると予想される期間に変更をブロックする Change Calendar エントリを作成できます。カレンダーエントリは、休暇中や祝日中など、管理者サポートが制限されると予想される期間に変更をブロックすることもできます。カレンダーエントリを使用すると、失敗したアクションやデプロイのトラブルシューティングを行うための管理者サポートが制限されている時間以外の、特定の時間帯以外の変更を許可できます。
+ **カレンダーの現在または今後の状態を取得する**

  Systems Manager `GetCalendarState` API オペレーションを実行して、カレンダーの現在の状態、指定した時刻の状態、次にカレンダーの状態が変更されるようにスケジュールされている時刻を表示できます。
**注記**  
`GetCalendarState` API には、1 秒あたり 10 リクエストのクォータがあります。Systems Manager のクォータの詳細については、「*Amazon Web Services 全般のリファレンス*」の「[Systems Manager service quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。
+ 

**EventBridge のサポート**  
この Systems Manager ツールは、Amazon EventBridge ルールの*イベント*タイプとしてサポートされています。詳細については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」および「[リファレンス: Systems Manager 用の Amazon EventBridge イベントパターンとタイプ](reference-eventbridge-events.md)」を参照してください。

**Topics**
+ [Change Calendar はどのようなユーザーに適していますか?](#systems-manager-change-calendar-who)
+ [Change Calendar の利点](#systems-manager-change-calendar-benefits)
+ [Change Calendar を設定する](systems-manager-change-calendar-prereqs.md)
+ [「Change Calendar」 の使用](systems-manager-change-calendar-working.md)
+ [Automation ランブックへの Change Calendar の依存関係の追加](systems-manager-change-calendar-automations.md)
+ [Change Calendar のトラブルシューティング](change-calendar-troubleshooting.md)

# Change Calendar を設定する
<a name="systems-manager-change-calendar-prereqs"></a>

AWS Systems Manager のツールである Change Calendar を使用する前に、以下を完了してください。

## 最新のコマンドラインツールをインストールする
<a name="change-calendar-prereqs-tools"></a>

最新のコマンドラインツールをインストールして、カレンダーに関する状態情報を取得します。


| 要件 | 説明 | 
| --- | --- | 
|  AWS CLI  |  (オプション) AWS Command Line Interface (AWS CLI) を使用してカレンダーに関する状態情報を取得するには、AWS CLI の最新リリースをローカルコンピュータにインストールします。 CLI をインストールまたはアップグレードする方法の詳細については、*AWS Command Line Interface ユーザーガイド*の「[AWS CLI のインストール、更新、アンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。  | 
|  AWS Tools for PowerShell  |  (オプション) Tools for PowerShell を使用してカレンダーに関する状態情報を取得するには、ローカルコンピュータに Tools for PowerShell の最新リリースをインストールします。 Tools for PowerShell をインストールまたはアップグレードする方法の詳細については、*AWS Tools for PowerShell ユーザーガイド*の「[AWS Tools for PowerShell のインストール](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)」を参照してください。  | 

## アクセス許可の設定
<a name="change-calendar-prereqs-permissions"></a>

ユーザー、グループ、ロールに管理者権限が割り当てられている場合は、Change Calendar に完全にアクセスできます。管理者権限がない場合は、管理者に `AmazonSSMFullAccess` マネージドポリシーの割り当てを依頼するか、ユーザー、グループ、ロールに必要なアクセス許可を付与するポリシーの割り当てを依頼してください。

Change Calendar を使用するには、以下のアクセス権限が必要です。

**Change Calendar エントリ**  
エントリにイベントを追加および削除したり、Change Calendar エントリを作成、更新、削除したりするには、ユーザー、グループ、またはロールにアタッチされたポリシーで次のアクションが許可されている必要があります。  
+ `ssm:CreateDocument`
+ `ssm:DeleteDocument`
+ `ssm:DescribeDocument`
+ `ssm:DescribeDocumentPermission`
+ `ssm:GetCalendar`
+ `ssm:ListDocuments`
+ `ssm:ModifyDocumentPermission`
+ `ssm:PutCalendar`
+ `ssm:UpdateDocument`
+ `ssm:UpdateDocumentDefaultVersion`

**カレンダーの状態**  
カレンダーの現在または今後の状態に関する情報を取得するには、ユーザー、グループ、またはロールにアタッチされたポリシーで次のアクションが許可されている必要があります。  
+ `ssm:GetCalendarState`

**運用イベント**  
メンテナンスウィンドウ、関連付け、計画された自動化などの運用イベントを表示するには、ユーザー、グループ、またはロールにアタッチされたポリシーで次のアクションが許可されている必要があります。  
+ `ssm:DescribeMaintenanceWindows`
+ `ssm:DescribeMaintenanceWindowExecution`
+ `ssm:DescribeAutomationExecutions`
+ `ssm:ListAssociations`

**注記**  
自分以外のアカウントが所有している (つまり、自分以外のアカウントによって作成されている) Change Calendar エントリは、自分のアカウントと共有されている場合でも読み取り専用になります。メンテナンスウィンドウ、State Manager の関連付け、オートメーションは共有されません。

# 「Change Calendar」 の使用
<a name="systems-manager-change-calendar-working"></a>

AWS Systems Manager のツールである Change Calendar でエントリを追加、管理、削除するときは AWS Systems Manager コンソールを使用します。ソースカレンダーからエクスポートした iCalendar (`.ics`) ファイルをインポートすると、サポートされているサードパーティーのカレンダープロバイダからイベントをインポートすることもできます。また、`GetCalendarState` API オペレーションまたは `get-calendar-state` AWS Command Line Interface (AWS CLI) コマンドを使用すると、特定の時刻の Change Calendar の状態に関する情報を取得できます。

**Topics**
+ [Change Calendar の作成](change-calendar-create.md)
+ [Change Calendar でのイベントの作成と管理](change-calendar-events.md)
+ [サードパーティーのカレンダーからのイベントのインポートと管理](third-party-events.md)
+ [Change Calendar の更新](change-calendar-update.md)
+ [Change Calendar の共有](change-calendar-share.md)
+ [Change Calendar の削除](change-calendar-delete.md)
+ [Change Calendar の状態の取得](change-calendar-getstate.md)

# Change Calendar の作成
<a name="change-calendar-create"></a>

AWS Systems Manager のツールである Change Calendar でエントリを作成すると、`text` 形式を使用する Systems Manager ドキュメント (SSM ドキュメント) が作成されます。

**Change Calendar を作成するには**

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

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

1. [**Create calendar (カレンダーの作成)**] を選択します。

   -または-

   **Change Calendar** ホームページが開いたら、最初に **[Create change calendar]** (変更カレンダーの作成) をクリックします。

1. [**Create calendar (カレンダーの作成)**] ページの [**Calendar details (カレンダーの詳細)**] に、カレンダーエントリの名前を入力します。カレンダーエントリ名には、文字、数字、ピリオド、ダッシュ、アンダースコアを使用できます。カレンダーのエントリの目的がひとめでわかるような具体的な名前にしてください。例: 「**support-off-hours**」。カレンダーエントリを作成した後、この名前を更新することはできません。

1. (オプション) **[Description]** (説明) に、カレンダーエントリの説明を入力します。

1. (オプション) [**Import calendar (カレンダーのインポート)**] で [**Choose file** (ファイルの選択)] を選び、サードパーティーのカレンダープロバイダからエクスポートしたiCalendar (`.ics`) ファイルを選択します。ファイルをインポートすると、そのイベントがカレンダーに追加されます。

   サポートされているプロバイダには、Google カレンダー、Microsoft Outlook、iCloud カレンダーが含まれます。

   詳細については、「[サードパーティーのカレンダープロバイダからのイベントのインポート](change-calendar-import.md)」を参照してください。

1. [**Calendar type (カレンダーの種類)**] で、次のいずれかを選択します。
   + [**Open by default (デフォルトでオープン)**] - カレンダーはオープン (Automation アクションはイベントが開始するまで実行可能) で、関連付けられたイベントの期間中はクローズになります。
   + [**Closed by default (デフォルトでクローズ)**] - カレンダーはクローズ (Automation アクションはイベントが開始されるまで実行不可) で、関連付けられたイベントの期間中はオープンになります。

1. (オプション) **[変更管理イベント]** で、**[変更管理イベントをカレンダーに追加]** を選択します。これを選択すると、毎月のカレンダー表示に、予定されているメンテナンスウィンドウ、State Manager の関連付け、自動化ワークフロー、Change Manager 変更リクエストがすべて表示されます。
**ヒント**  
後でこれらのイベントタイプをカレンダー表示から完全に削除する場合は、カレンダーを編集してこのチェックボックスをオフにして、**[保存]** を選択します。

1. [**Create calendar (カレンダーの作成)**] を選択します。

   カレンダーエントリが作成されると、Systems Manager は、**Change Calendar** の一覧にカレンダーエントリを表示します。列には、カレンダーのバージョンとカレンダーの所有者の AWS アカウント 番号が表示されます。少なくとも 1 つのイベントを作成するかインポートするまでは、カレンダーエントリでアクションを禁止または許可することはできません。イベント作成の詳細については、「[Change Calendar イベントの作成](change-calendar-create-event.md)」を参照してください。イベントのインポートについては、「[サードパーティーのカレンダープロバイダからのイベントのインポート](change-calendar-import.md)」を参照してください。

# Change Calendar でのイベントの作成と管理
<a name="change-calendar-events"></a>

カレンダーを AWS Systems Manager Change Calendar で作成した後、開いているカレンダーまたは閉じているカレンダーに含まれているイベントを作成、更新、削除できます。Change Calendar は AWS Systems Manager のツールです。

**ヒント**  
Systems Manager コンソールでイベントを直接作成する代わりに、サポートされているサードパーティーのカレンダーアプリケーションから iCalendar (`.ics`) ファイルをインポートできます。詳細については、「[サードパーティーのカレンダーからのイベントのインポートと管理](third-party-events.md)」を参照してください。

**Topics**
+ [Change Calendar イベントの作成](change-calendar-create-event.md)
+ [Change Calendar イベントの更新](change-calendar-update-event.md)
+ [Change Calendar イベントの削除](change-calendar-delete-event.md)

# Change Calendar イベントの作成
<a name="change-calendar-create-event"></a>

AWS Systems Manager のツールである Change Calendar のエントリにイベントを追加すると、カレンダーエントリのデフォルトのアクションが中断される期間を指定することができます。たとえば、カレンダーエントリの種類がデフォルトでクローズの場合、カレンダーはイベント中に変更に対してオープンになります。(または、カレンダー上のみで情報ロールを提供する、アドバイザリイベントを作成することもできます。)

現在は、コンソールを使用して作成できるのは、Change Calendar イベントのみです。イベントは、Change Calendar エントリの作成時に作成する Change Calendar ドキュメントに追加されます。

**Change Calendar イベントを作成するには**

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

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

1. カレンダーのリストから、イベントを追加するカレンダーエントリの名前を選択します。

1. カレンダーエントリの詳細ページで、[**Create event** (イベントの作成)] を選択します。

1. [**Create scheduled event** (スケジュールされたイベントの作成)] ページの [**Event details** (イベントの詳細)] に、イベントの表示名を入力します。イベント名には、文字、数字、ピリオド、ダッシュ、アンダースコアを使用できます。イベントの目的がひとめでわかるような具体的な名前にしてください。例: 「**nighttime-hours**」。

1. **[Description]** (説明) にイベントの説明を入力します。例えば、**The support team isn't available during these hours** と指定します。

1. (オプション) このイベントを、視覚的な通知やリマインダーとしてのみ使用する場合は、**[Advisory]** (アドバイザリ) チェックボックスをオンにします。アドバイザリーイベントには、カレンダー上での機能はありません。これらは、カレンダーを表示しているユーザーに情報を提供するためだけのものです。

1. **[Event start date]** (イベント開始日) で、イベントを開始する日付を `MM/DD/YYYY` 形式で入力 (または選択) し、指定した日にイベントを開始する時刻を `hh:mm:ss` (時、分、秒) 形式で入力します。

1. **[Event end date]** (イベント終了日) で、イベントを終了する日付を `MM/DD/YYYY` 形式で入力 (または選択) し、指定した日にイベントを終了する時刻を `hh:mm:ss` (時、分、秒) 形式で入力します。

1. **[Schedule time zone]** (タイムゾーンをスケジュール) で、イベントの開始時刻と終了時刻が適用されるタイムゾーンを選択します。都市名の一部またはグリニッジ標準時 (GMT) とのタイムゾーンの差を入力すると、タイムゾーンをすばやく検索できます。デフォルトは協定世界時 (UTC) です。

1. (オプション) 日ごと、週ごと、月ごとで繰り返されるイベントを作成するには、**[Recurrence]** (繰り返し) をオンにした上で、繰り返しの頻度および (オプションとして) 終了日を指定します。

1. [**Create scheduled event (スケジュールされたアクションの作成)**] を選択します。新しいイベントがカレンダーエントリに追加され、カレンダーエントリの詳細ページの [**Events (イベント)**] タブに表示されます。

# Change Calendar イベントの更新
<a name="change-calendar-update-event"></a>

次の手順に従い、AWS Systems Manager コンソールで Change Calendar イベントを更新します。Change Calendar は AWS Systems Manager のツールです。

**Change Calendar イベントを更新するには**

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

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

1. カレンダーのリストから、イベントを編集するカレンダーエントリの名前を選択します。

1. カレンダーエントリの詳細ページで、[**Events (イベント)**] を選択します。

1. カレンダーページで、編集するイベントを選択します。
**ヒント**  
左上のボタンを使用すると、1 年前後に移動したり、1 か月前後に移動したりできます。タイムゾーンの変更が必要な場合は、右上リストから適切なタイムゾーンを選択します。

1. **[Event details]** (イベントの詳細) で **[Edit]** (編集) をクリックします。

   イベントの名前と説明を変更するには、現在のテキスト値に追加するか、その値を置き換えます。

1. **[Event start date]** (イベント開始日) の値を変更するには、現在の開始日を選択した上で、カレンダーから新しい日付を選択します。開始時刻を変更するには、現在の開始時刻を選択した上で、リストから新しい時刻を選択します。

1. **[Event end date]** (イベント終了日) の値を変更するには、現在の日付を選択した上で、カレンダーから新しい終了日を選択します。終了時刻を変更するには、現在の終了時刻を選択した上で、リストから新しい時刻を選択します。

1. **[Schedule time zone]** (タイムゾーンのスケジュール) の値を変更するには、イベントの開始時刻と終了時刻が適用されるタイムゾーンを選択します。都市名の一部またはグリニッジ標準時 (GMT) とのタイムゾーンの差を入力すると、タイムゾーンをすばやく検索できます。デフォルトは協定世界時 (UTC) です。

1. (オプション) このイベントを、視覚的な通知やリマインダーとしてのみ使用する場合は、**[Advisory]** (アドバイザリ) チェックボックスをオンにします。アドバイザリーイベントには、カレンダー上での機能はありません。これらは、カレンダーを表示しているユーザーに情報を提供するためだけのものです。

1. [**Save**] を選択します。変更内容は、カレンダーエントリの詳細ページの [**Events (イベント)**] タブに表示されます。更新したイベントを選択して、変更を表示します。

# Change Calendar イベントの削除
<a name="change-calendar-delete-event"></a>

AWS マネジメントコンソールを使用して、AWS Systems Manager のツールである Change Calendar で一度にひとつずつイベントを削除できます。

**ヒント**  
カレンダーの作成時に **[変更管理イベントをカレンダーに追加]** を選択した場合は、次の操作を実行できます。  
変更管理イベントタイプをカレンダー表示から「一時的に」非表示にするには、月次プレビューの上部でタイプの **[X]** を選択します。
これらのタイプをカレンダー表示から「完全に」削除するには、カレンダーを編集し、**[カレンダーに変更管理イベントを追加]** チェックボックスをオフにして、**[保存]** を選択します。カレンダー表示からタイプを削除しても、アカウントからは削除されません。

**Change Calendar イベントを削除するには**

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

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

1. カレンダーのリストから、イベントを削除するカレンダーエントリの名前を選択します。

1. カレンダーエントリの詳細ページで、[**Events (イベント)**] を選択します。

1. カレンダーページで、削除するイベントを選択します。
**ヒント**  
左上のボタンを使用して、カレンダーを 1 年前後に移動したり、1 か月前後に移動したりできます。タイムゾーンの変更が必要な場合は、右上リストから適切なタイムゾーンを選択します。

1. [**Event details (イベント詳細)**] ページで、[**Delete (削除)**] を選択します。イベントの削除を確認するプロンプトが表示されたら、**[Confirm]** (確認) をクリックします。

# サードパーティーのカレンダーからのイベントのインポートと管理
<a name="third-party-events"></a>

イベントを直接 AWS Systems Manager コンソールで作成する代わりに、サポートされているサードパーティーのカレンダーアプリケーションから iCalendar (`.ics`) ファイルをインポートできます。カレンダーには、インポートしたイベントのほか、AWS Systems Manager のツールである Change Calendar で作成したイベントを含めることができます。

**[開始する前に]**  
カレンダーファイルをインポートする前に、次の要件と制約を確認してください。

カレンダーのファイル形式  
有効な iCalendar ファイル（`.ics`) のみがサポートされています。

サポートされているカレンダープロバイダ  
以下のサードパーティーのカレンダープロバイダからエクスポートされた `.ics` ファイルのみがサポートされています。  
+ Google カレンダー ([エクスポート手順](https://support.google.com/calendar/answer/37111))
+ Microsoft Outlook ([エクスポート手順](https://support.microsoft.com/en-us/office/export-an-outlook-calendar-to-google-calendar-662fa3bb-0794-4b18-add8-9968b665f4e6))
+ iCloud カレンダー ([エクスポート手順](https://support.apple.com/guide/calendar/import-or-export-calendars-icl1023/mac))

ファイルサイズ  
任意の数の有効な `.ics` ファイルをインポートできます。ただし、各カレンダーでインポートされたファイルすべての合計サイズは 64 KB を超えられません。  
`.ics` ファイルのサイズを最小化するには、カレンダーのエントリに関する基本的な詳細のみをエクスポートしてください。必要に応じて、エクスポートする期間を短縮します。

タイムゾーン  
カレンダー名、カレンダープロバイダ、および少なくとも 1 つのイベントのほか、エクスポートされた `.ics` ファイルには、カレンダーのタイムゾーンも示されます。これが表示されない場合、またはタイムゾーンの識別に問題がある場合は、ファイルをインポートした後、タイムゾーンを指定するように求められます。

反復イベントの制限  
エクスポートされた `.ics` ファイルには、反復するイベントを含めることができます。ただし、ソースカレンダーで 1 つ以上の反復イベントが削除された場合、インポートは失敗します。

**Topics**
+ [サードパーティーのカレンダープロバイダからのイベントのインポート](change-calendar-import.md)
+ [サードパーティーのカレンダープロバイダからのすべてのイベントの更新](change-calendar-import-add-remove.md)
+ [サードパーティーのカレンダーからインポートされたすべてのイベントの削除](change-calendar-delete-ics.md)

# サードパーティーのカレンダープロバイダからのイベントのインポート
<a name="change-calendar-import"></a>

以下の手順に従い、サポートされているサードパーティーのカレンダーアプリケーションから iCalendar (`.ics`) ファイルをインポートします。ファイルに含まれるイベントは、開いているカレンダーまたは閉じているカレンダーのルールに組み込まれます。Change Calendar (AWS Systems Manager のツール) を使用して作成している新しいカレンダー、または既存のカレンダーにファイルをインポートできます。

`.ics` ファイルをインポートした後、Change Calendar インターフェイスを使用して個々のイベントをそのファイルから削除できます。詳細については、「[Change Calendar イベントの削除](change-calendar-delete-event.md)」を参照してください。`.ics` ファイルを削除して、ソースカレンダーからすべてのイベントを削除することもできます。詳細については、「[サードパーティーのカレンダーからインポートされたすべてのイベントの削除](change-calendar-delete-ics.md)」を参照してください。

**サードパーティーのカレンダープロバイダからイベントをインポートするには**

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

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

1. 新しいカレンダーから開始するには、[**Create calendar** (カレンダーの作成)] を選択します。[**Import calendar** (カレンダーのインポート)] で [**Choose file** (ファイルの選択)] を選びます。新しいカレンダーを作成する他の手順については、「[Change Calendar の作成](change-calendar-create.md)」を参照してください。

   -または-

   サードパーティーのイベントを既存のカレンダーにインポートするには、既存のカレンダーの名前を選択して開きます。

1. **[Actions、Edit]** (編集アクション) をクリックした後、**[Import calendar]** (カレンダーのインポート) エリアで、**[Choose file]** (ファイルの選択) をクリックします。

1. ローカルコンピュータで、エクスポートされた `.ics` ファイルに移動して選択します。

1. プロンプトが表示されたら、**Select a time zone **(タイムゾーンの選択)] で、カレンダーに適用するタイムゾーンを選択します。

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

# サードパーティーのカレンダープロバイダからのすべてのイベントの更新
<a name="change-calendar-import-add-remove"></a>

iCalendar `.ics` ファイルのインポート後、ソースカレンダーに複数のイベントが追加されるか削除されると、これらの変更を Change Calendar で反映できます。まず、元のカレンダーを再エクスポートし、新しいファイルを Change Calendar (AWS Systems Manager のツール) にインポートします。Change Calendar のイベントは、新しいファイルの内容を反映するように更新されます。

**サードパーティーのカレンダープロバイダからすべてのイベントを更新するには**

1. サードパーティーのカレンダーで、Change Calendar に反映させたいイベントを追加するか削除し、カレンダーを新しい `.ics` ファイルに再エクスポートします。

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

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

1. カレンダーの一覧からカレンダー名を選択します。

1. **[ファイルの選択]** を選択して、置き換える `.ics` ファイルに移動して選択します。

1. 既存のファイルの上書きに関する通知に対して、[**Confirm** (確認)] を選択します。

# サードパーティーのカレンダーからインポートされたすべてのイベントの削除
<a name="change-calendar-delete-ics"></a>

サードパーティーのプロバイダからインポートしたイベントをカレンダーに含める必要がなくなった場合は、インポートした iCalendar `.ics` ファイルを削除できます。

**サードパーティーのカレンダーからインポートされたすべてのイベントを削除するには**

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

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

1. カレンダーの一覧からカレンダー名を選択します。

1. [**Import calendar** (カレンダーのインポート)] の [**My imported calendars** (インポート済みのカレンダー)] で、インポートされたカレンダーの名前を見つけ、そのカードで **X** を選択します。

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

# Change Calendar の更新
<a name="change-calendar-update"></a>

Change Calendar の説明を更新できますが、名前は変更できません。カレンダーのデフォルトの状態は変更できますが、このカレンダーに関連付けられているイベント中の変更アクションの動作が逆になることに注意してください。たとえば、カレンダーの状態を [**Open by default (デフォルトでオープン)**] から [**Closed by default (デフォルトでクローズ)**] に変更すると、関連付けられたイベントを作成したユーザーが変更を予期していないイベント期間中に不要な変更が加えられることがあります。

Change Calendar を更新すると、エントリの作成時に作成した Change Calendar ドキュメントが編集されます。Change Calendar は AWS Systems Manager のツールです。

**Change Calendar を更新するには**

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

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

1. カレンダーのリストから、更新するカレンダーの名前を選択します。

1. カレンダーの詳細ページで、**[Actions, Edit]** (編集アクション) をクリックします。

1. [**Description** (説明)] で、説明テキストを変更できます。Change Calendar の名前は編集できません。

1. カレンダーの状態を変更するには、[**Calendar type** (カレンダータイプ)] で別の値を選択します。これにより、カレンダーに関連付けられているイベント中の変更アクションの動作が逆になることに注意してください。カレンダータイプを変更する前に、カレンダータイプを変更しても、作成済みのイベント中の不要な変更は許可されないことを他の Change Calendar ユーザーと確認する必要があります。
   + [**Open by default** (デフォルトでオープン)] - カレンダーはオープン (Automation アクションはイベントが開始するまで実行可能) で、関連付けられたイベントの期間中はクローズになります。
   + [**Closed by default** (デフォルトでクローズ)] - カレンダーはクローズ (Automation アクションはイベントが開始されるまで実行不可) で、関連付けられたイベントの期間中はオープンになります。

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

   少なくとも 1 つのイベントを追加するまで、カレンダーでアクションを禁止または許可することはできません。イベントを追加する方法については、「[Change Calendar イベントの作成](change-calendar-create-event.md)」を参照してください。

# Change Calendar の共有
<a name="change-calendar-share"></a>

AWS Systems Manager コンソールを使用して、AWS Systems Manager のツールである Change Calendar のカレンダーを他の AWS アカウントと共有できます。カレンダーを共有した場合、そのカレンダーは共有アカウントのユーザーに対して読み取り専用になります。メンテナンスウィンドウ、State Manager の関連付け、オートメーションは共有されません。

**Change Calendar を共有するには**

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

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

1. カレンダーのリストから、共有するカレンダーの名前を選択します。

1. カレンダーの詳細ページで、**[Sharing]** (共有) をクリックします。

1. **[Actions, Share]** (共有アクション) をクリックします。

1. [**Share calendar** (カレンダーの共有)] の [**Account ID **(アカウント ID)] に、有効な AWS アカウント の ID 番号を入力し、[**Share **(共有)] を選択します。

   共有アカウントのユーザーは Change Calendar を読むことはできますが、変更できません。

# Change Calendar の削除
<a name="change-calendar-delete"></a>

Systems Manager コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、AWS Systems Manager のツールである Change Calendar でカレンダーを削除できます。Change Calendar を削除すると、関連するすべてのイベントが削除されます。

**Change Calendar を削除するには**

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

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

1. カレンダーのリストから、削除するカレンダーの名前を選択します。

1. カレンダーの詳細ページで、**[Actions, Delete]** (削除アクション) をクリックします。カレンダーの削除を確認するプロンプトが表示されたら、[**Delete** (削除)] を選択します。

# Change Calendar の状態の取得
<a name="change-calendar-getstate"></a>

AWS Systems Manager のツールである Change Calendar では、カレンダーの全体的な状態、または特定の時刻における状態を把握できます。また、カレンダーの状態が次回、`OPEN` から `CLOSED`、またはその逆に変化する時刻を表示することも可能です。

**注記**  
Amazon EventBridge と Change Calendar を統合してカレンダーの状態の変化の自動モニタリングを行う方法については、「[Amazon EventBridge と Change Calendar の統合](monitoring-systems-manager-event-examples.md#change-calendar-eventbridge-integration)」を参照してください。EventBridge 統合は、カレンダーの状態が遷移したときにイベントドリブンの通知を提供し、`GetCalendarState` API アクションのポーリングベースのアプローチを補完します。

このタスクは、`GetCalendarState` API オペレーションを使用してのみ実行できます。このセクションの手順では、AWS Command Line Interface (AWS CLI) を使用します。

**Change Calendar の状態を取得するには**
+ 次のコマンドを実行して、特定の時刻の 1 つ以上のカレンダーの状態を表示します。`--calendar-names` パラメータは必須ですが、`--at-time` はオプションです。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

  ```
  aws ssm get-calendar-state \
      --calendar-names "Calendar_name_or_document_ARN_1" "Calendar_name_or_document_ARN_2" \
      --at-time "ISO_8601_time_format"
  ```

  以下はその例です。

  ```
  aws ssm get-calendar-state \
      --calendar-names "arn:aws:ssm:us-east-2:123456789012:document/MyChangeCalendarDocument" "arn:aws:ssm:us-east-2:123456789012:document/SupportOffHours" \
      --at-time "2020-07-30T11:05:14-0700"
  ```

------
#### [ Windows ]

  ```
  aws ssm get-calendar-state ^
      --calendar-names "Calendar_name_or_document_ARN_1" "Calendar_name_or_document_ARN_2" ^
      --at-time "ISO_8601_time_format"
  ```

  以下はその例です。

  ```
  aws ssm get-calendar-state ^
      --calendar-names "arn:aws:ssm:us-east-2:123456789012:document/MyChangeCalendarDocument" "arn:aws:ssm:us-east-2:123456789012:document/SupportOffHours" ^
      --at-time "2020-07-30T11:05:14-0700"
  ```

------

  このコマンドによって以下のような情報が返されます。

  ```
  {
      "State": "OPEN",
      "AtTime": "2020-07-30T16:18:18Z",
      "NextTransitionTime": "2020-07-31T00:00:00Z"
  }
  ```

  結果には、アカウントによって所有または共有されている指定されたカレンダーエントリのカレンダーの状態 (カレンダーのタイプが `DEFAULT_OPEN` か `DEFAULT_CLOSED` か)、`--at-time` の値として指定された時刻、次の移行の時刻が表示されます。`--at-time` パラメータを追加しない場合は、現在の時間が使用されます。
**注記**  
1 つの要求に複数のカレンダーを指定すると、要求内のすべてのカレンダーが開いている場合にのみ、コマンドは `OPEN` のステータスを返します。要求内の 1 つ以上のカレンダーが閉じている場合、返されるステータスは `CLOSED` です。

# Automation ランブックへの Change Calendar の依存関係の追加
<a name="systems-manager-change-calendar-automations"></a>

Automation アクションを AWS Systems Manager のツールである Change Calendar に準拠させるには、[`aws:assertAwsResourceProperty`](automation-action-assertAwsResourceProperty.md) アクションを使用する Automation ランブックにステップを追加します。指定したカレンダーエントリが目的の状態 (`GetCalendarState` または `OPEN`) であることを確認するために `CLOSED` を実行するアクションを設定します。オートメーションランブックは、カレンダーの状態が `OPEN` である場合にのみ次のステップに進むことができます。以下はオートメーションランブックの YAML ベースのサンプル抜粋です。カレンダーの状態が `OPEN` (`DesiredValues` で指定された状態) に一致しない限り、次の手順である `LaunchInstance` に進むことはできません。

以下に例を示します。

```
mainSteps:
  - name: MyCheckCalendarStateStep
    action: 'aws:assertAwsResourceProperty'
    inputs:
      Service: ssm
      Api: GetCalendarState
      CalendarNames: ["arn:aws:ssm:us-east-2:123456789012:document/SaleDays"]
      PropertySelector: '$.State'
      DesiredValues:
      - OPEN
    description: "Use GetCalendarState to determine whether a calendar is open or closed."
    nextStep: LaunchInstance
  - name: LaunchInstance
    action: 'aws:executeScript'
    inputs:
      Runtime: python3.11 
...
```

# Change Calendar のトラブルシューティング
<a name="change-calendar-troubleshooting"></a>

AWS Systems Manager のツールである Change Calendar を使用したトラブルシューティングでは、以下の情報を使用します。

**Topics**
+ [「カレンダーのインポートに失敗しました」エラー](#change-manager-troubleshooting-1)

## 「カレンダーのインポートに失敗しました」エラー
<a name="change-manager-troubleshooting-1"></a>

**問題**: iCalendar (`.ics`) ファイルをインポートする際、カレンダーのインポートが失敗したことが報告されます。
+ **解決策 1** — サポートされているサードパーティーのカレンダープロバイダからエクスポートされたファイルをインポートしていることを確認します。この中には以下が含まれます。
  + Google カレンダー ([エクスポート手順](https://support.google.com/calendar/answer/37111))
  + Microsoft Outlook ([エクスポート手順](https://support.microsoft.com/en-us/office/export-an-outlook-calendar-to-google-calendar-662fa3bb-0794-4b18-add8-9968b665f4e6))
  + iCloud カレンダー ([エクスポート手順](https://support.apple.com/guide/calendar/import-or-export-calendars-icl1023/mac))
+ **解決策 2** -ソースカレンダーに反復イベントが含まれている場合は、そのイベントの個々の発生がキャンセルまたは削除されていないことを確認します。現在、Change Calendar は、個々のキャンセルを伴う反復イベントのインポートに対応していません。この問題を解決するには、ソースカレンダーから反復イベントを削除し、カレンダーを再エクスポートして Change Calendar に再インポートします。その後、Change Calendar インターフェイスを使用して反復イベントを追加します。詳細については、「[Change Calendar イベントの作成](change-calendar-create-event.md)」を参照してください。
+ **解決策 3** - ソースカレンダーに少なくとも 1 つのイベントが含まれていることを確認します。イベントの含まれていない `.ics` ファイルをアップロードしても成功しません。
+ **解決策 4** — `.ics` が大きすぎるためにインポートが失敗したと報告された場合は、カレンダーのエントリに関する基本的な詳細のみをエクスポートしていることを確認してください。必要に応じて、エクスポート期間を短縮します。
+ **解決策 5** — [**Events** (イベント)] タブからインポートしようとしている際、エクスポートされたカレンダーのタイムゾーンを Change Calendar が判別できない場合は、「カレンダーのインポートに失敗しました。Change Calendar は有効なタイムゾーンを見つけるられませんでした。カレンダーは [Edit (編集)] メニューからインポートできます」というメッセージが表示される可能性があります。この場合は、[**Actions, Edit** (アクション、編集)] を選択し、[**Edit calendar** (カレンダーの編集)] ページからファイルをインポートしてみてください。
+ **解決策 6** — インポート前に `.ics` ファイルを編集しないでください。ファイルの内容を変更しようとすると、カレンダーのデータが破損する可能性があります。インポートを試みる前にファイルを変更した場合は、元のカレンダーからカレンダーを再度エクスポートし、アップロードを再試行してください。

# AWS Systems Manager Change Manager
<a name="change-manager"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager は、アプリケーションの設定とインフラストラクチャに対する運用上の変更をリクエスト、承認、実装、および報告するためのエンタープライズ変更管理フレームワークです。単一の*委任管理者アカウント*から AWS Organizations を使用すると、複数の AWS アカウント と複数の AWS リージョン 全体で変更を管理することができます。または、ローカルアカウントを使用して、単一の AWS アカウント の変更を管理できます。AWSリソースとオンプレミスリソースの両方に対する変更を管理する場合に Change Manager を使用します。Change Manager の使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com//systems-manager/change-manager)を開きます。ナビゲーションペインで、**[Change Manager]** を選択します。

Change Manager では、事前に承認された*変更テンプレート*を使用して、リソースに対する変更プロセスのオートメーションと、運用上の変更を行う際の意図しない結果の回避に役立てることができます。各変更テンプレートでは、次の項目を指定します。
+ 変更リクエストの作成時にユーザーが選択できる 1 つ、または複数のオートメーションランブック。リソースに対して行われる変更は、オートメーションランブックに定義されています。作成する変更テンプレートには、カスタムランブックまたは[AWS マネージドランブック](automation-documents-reference.md)を含めることができます。ユーザーが変更リクエストを作成するときは、利用可能なランブックからリクエストに含めるランブックを選択できます。さらに、リクエストを作成するユーザーが変更リクエストで任意のランブックを指定できるようにする変更テンプレートを作成できます。
+ その変更テンプレートを使用して行われた変更リクエストを確認する必要がある、アカウントのユーザー。
+ Amazon Simple Notification Service (Amazon SNS) トピックは、割り当てられた承認者に変更リクエストを確認する準備ができたことを通知するために使用されます。
+ ランブックワークフローをモニタリングするために使用される Amazon CloudWatch アラーム。
+ 変更テンプレートを使用して作成された変更リクエストのステータスの変更に関する通知を送信するために使用される Amazon SNS トピック。
+ 変更テンプレートの分類とフィルタリングに使用する変更テンプレートに適用するタグ。
+ 変更テンプレートから作成された変更リクエストを承認ステップなしで実行できるかどうか (自動承認リクエスト)。

Systems Manager のもうひとつのツールである Change Calendar との統合により、Change Manager は重要なビジネスイベントとのスケジュール競合を回避しながら、変更を安全に実装するためにも役立ちます。Change Manager の AWS Organizations および AWS IAM アイデンティティセンター との統合により、既存の ID 管理システムを使用して、シングルアカウントから組織全体の変更を管理できるようになります。Change Managerから変更の進捗状況を監視して、組織全体における運用上の変更を監査することができるため、可視性と説明責任が向上します。

Change Manager は、[継続的インテグレーション](https://aws.amazon.com/devops/continuous-integration) (CI) プラクティスと[継続的デリバリー](https://aws.amazon.com/devops/continuous-delivery) (CD) 手法の安全管理を補完します。例外がある場合、または承認が必要な場合を除き、Change Managerは CI/CD パイプラインなどの自動化されたリリースプロセスの一環として行われる変更を対象としません。

## Change Manager の仕組み
<a name="how-change-manager-works"></a>

標準または緊急の運用変更を行う必要性が特定されると、組織内の人物が、組織、またはアカウントでの使用のために作成された変更テンプレートのいずれかに基づく変更リクエストを作成します。

リクエストされた変更が手動承認を必要とする場合、Change Manager は Amazon SNS 通知を通じて、指定された承認者に変更リクエストの確認の準備ができたことを通知します。変更テンプレートで変更リクエストの承認者を指定したり、変更リクエスト自体で承認者を指定したりできます。レビューワーは、テンプレートごとに異なる担当者を割り当てることができます。例えば、マネージドノードに対する変更のリクエストを承認する必要がある 1 人のユーザー、ユーザーグループ、または AWS Identity and Access Management (IAM) ロールを割り当てて、データベース変更については別のユーザー、グループ、または IAM ロールを割り当てられます。変更テンプレートで自動承認が許可され、リクエスタのユーザーポリシーで禁止されていない場合、ユーザーはレビューステップなしでリクエストのオートメーションランブックを実行することもできます (変更のフリーズイベントを除く)。

変更テンプレートごとに、最大 5 レベルの承認者を追加できます。例えば、まずテクニカルレビューワーに変更テンプレートから作成された変更リクエストを承認してもらってから、1 人以上のマネージャに第 2 レベルの承認を求めます。

Change Manager は [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md) と統合されています。リクエストされた変更が承認されると、システムはまず、そのリクエストがスケジュールされた他のビジネスアクティビティと競合していないかどうかを判断します。競合が検出された場合、Change Manager は変更をブロックするか、ランブックワークフローを開始する前に追加の承認を要求することができます。例えば、営業時間内の変更のみを許可して、チームが予想外の問題を管理できるようにすることが可能です。営業時間内外での実行をリクエストする変更については、*変更凍結承認者*という形でより高いレベルの経営陣の承認を義務付けることができます。緊急変更の場合、Change Manager は変更リクエストの承認後、競合について Change Calendar をチェックするステップ、またはイベントをブロックするステップを省略できます。

承認された変更を実装するときは、Change Manager が関連する変更リクエストで指定されているオートメーションランブックを実行します。ランブックワークフローの実行時には、承認された変更リクエストで定義されている操作のみが許可されます。このアプローチは、変更の実装時における意図しない結果を回避するために役立ちます。

ランブックワークフローの実行時に実施できる変更を制限することに加えて、Change Manager は同時実行性とエラーしきい値の制御にも役立ちます。ユーザーは、ランブックワークフローが一度に実行できるリソースの数、一度に変更を実行できるアカウントの数、およびプロセスを停止し、ロールバックする (ランブックにロールバックスクリプトが含まれている場合) までに許可する失敗の回数を選択できます。また、CloudWatch アラームを使用して、行われている変更の進捗状況をモニタリングすることもできます。

ランブックワークフローが完了したら、行われた変更の詳細を確認できます。これらの詳細には、変更リクエストの理由、使用された変更テンプレート、変更のリクエスト者と承認者、および変更の実装方法が含まれます。

**詳細情報**  
[Introducing AWS Systems ManagerChange Manager](https://aws.amazon.com/blogs/aws/introducing-systems-manager-change-manager/) (*AWS ニュースブログ*)

## Change Managerは、どのような運用上のメリットを提供できますか?
<a name="change-manager-benefits"></a>

Change Manager には以下のような利点があります。
+ **サービスの中断とダウンタイムのリスクを軽減する**

  Change Manager では、ランブックワークフローの実行時に承認された変更のみが実施されるようにすることで、運用上の変更を安全にします。計画されていない、またはレビューされていない変更は、ブロックすることができます。Change Managerは、何時間にも及ぶ高額な調査やバックトラッキングが必要となるような、人為的なエラーに起因する意図しない結果を避けるために役立ちます。
+ **変更履歴に関する詳細な監査とレポートを取得する**

  Change Managerは、組織全体で行われた変更、それらの変更の意図、およびそれらの承認者と実装者に関する詳細を報告し、監査するための一貫した方法を用いて説明責任を提供します。
+ **スケジュールの競合または違反を回避する**

  Change Managerは、組織のためのアクティブな変更カレンダーに基づいて、祝祭日イベント、または新製品のローンチなどのスケジュールの競合を検出できます。ランブックワークフローの実行を営業時間内に限定する、または追加の承認がある場合にのみ許可することが可能です。
+ **変化するビジネスに合わせて変更要件を導入する**

  異なる事業期間には、異なる変更管理要件を実装することができます。例えば、月末のレポート作成、納税申告時期、またはその他の重要な事業期間中には、変更をブロックする、または不必要な運用上のリスクを生じる可能性がある変更に対して取締役レベルの承認を義務付けることができます。
+ **複数のアカウント全体における変更を一元的に管理する**

  Organizations との統合により、Change Manager は、すべての組織単位 (OU) 全体における変更を単一の委任管理者アカウントから管理することを可能にします。Change Manager は、組織全体での使用、または一部の OU のみでの使用のために有効化できます。

## Change Manager はどのようなユーザーに適していますか?
<a name="change-manager-who"></a>

Change Managerは、次のような AWS のお客様と組織に適しています。
+ クラウドまたはオンプレミス環境に対して行われる運用上の変更の安全性とガバナンスを向上させたいとお考えの AWS のお客様。
+ チーム間のコラボレーションと可視性の向上、ダウンタイムの回避によるアプリケーションの可用性の改善、および手動タスクと反復的なタスクに関連するリスクの軽減を求める組織。
+ 変更管理のベストプラクティスに従う必要がある組織 
+ アプリケーションの設定とインフラストラクチャに対して行われた変更について、完全に監査可能な履歴を必要とするお客様。

## Change Manager の主な特徴は何ですか?
<a name="change-manager-features"></a>

Change Managerの主な特徴には以下が含まれます。
+ **変更管理のベストプラクティスに対する統合サポート**

  Change Managerでは、選択した変更管理のベストプラクティスを運用に適用することができ、以下のオプションを有効にすることが可能です。
  + Change Calendarをチェックしてイベントが現在制限されているかどうかを確認し、変更がカレンダーのオープン期間中にのみ行われるようにする。
  + 変更凍結承認者からの追加の承認によって、制限されたイベント中における変更を許可する。
  + すべての変更テンプレートに対して CloudWatch アラームを指定する必要があります。
  + 変更リクエストの作成に使用する前に、アカウントで作成されたすべての変更テンプレートを確認および承認する必要があります。
+ **カレンダーのクローズ期間と緊急の変更リクエストに対する異なる承認経路**

  制限されたイベントに対して Change Calendar をチェックするオプションを有効にして、そのイベントが完了になるまで承認済みの変更リクエストをブロックすることができます。ただし、カレンダーがクローズ状態になっている場合でも変更を行うことを許可できる 2 番目の承認者 (変更凍結承認者) グループを指定することも可能です。緊急の変更テンプレートを作成することもできます。緊急の変更テンプレートを使用して作成された変更リクエストには引き続き通常の承認が必要ですが、カレンダー制限の対象にはならず、変更凍結承認も必要ありません。
+ **ランブックワークフローの開始方法とタイミングを制御する**

  ランブックワークフローは、スケジュールに従って開始する、または承認が完了され次第開始することができます (カレンダー制限規則の対象となります)。
+ **組み込み通知のサポート**

  組織内で変更テンプレートと変更リクエストを確認および承認するユーザーを指定します。Amazon SNS トピックを変更テンプレートに割り当てると、その変更テンプレートで作成された変更リクエストのステータスの変更に関する通知をトピックのサブスクライバーに送信します。
+ **AWS Systems Manager Change Calendarとの統合**

  Change Managerでは、管理者が指定された期間内におけるスケジュール変更を制限することができます。例えば、営業時間内の変更のみを許可するポリシーを作成して、チームが問題に対処できるようにすることが可能です。重要なビジネスイベント中における変更を制限することもできます。例えば、小売業者は、大規模な販売イベント中に変更を制限することが可能です。制限期間中に追加の承認を義務付けることもできます。
+ **AWS IAM アイデンティティセンター との統合と Active Directory のサポート**

  IAM Identity Center との統合により、組織のメンバーは共通のユーザー のアイデンティティで Systems Manager を使用し、AWS アカウント にアクセスしてリソースを管理することができます。IAM Identity Center を使用することで、AWS 全体のアカウントへのアクセス権をユーザーに割り当てることができます

  Active Directory との統合は、Active Directory アカウントのユーザーを Change Manager 操作用に作成された変更テンプレートの承認者として割り当てることを可能にします。
+ **Amazon CloudWatch アラームとの統合**

  Change Manager は CloudWatch アラームと統合されています。Change Manager はランブックのワークフロー中に CloudWatch アラームをリッスンし、通知の送信などアラームに対して定義されたあらゆるアクションを実行します。
+ **AWS CloudTrail Lake との統合**

  AWS CloudTrail Lake にイベントデータストアを作成すると、アカウントまたは組織で実行されたリクエストにより加えられた変更に関して、監査可能な情報を表示できます。保存されるイベント情報には、以下のような詳細が含まれます。
  + 実行された API アクション
  + これのアクションに含まれるリクエストパラメータ
  + アクションを実行したユーザー
  + 処理中に更新されたリソース
+ **AWS Organizations との統合**

  Organizations が提供するクロスアカウント機能を使用することで、組織内の OU での Change Manager 操作の管理に委任管理者アカウントを使用することができます。Organizations の管理アカウントで、委任管理者アカウントにするアカウントを指定できます。どの OU でChange Managerを使用できるかを制御することも可能です。

## Change Manager の使用料金はかかりますか?
<a name="change-manager-cost"></a>

はい。Change Managerの料金は従量課金制に基づいて設定されています。お支払いいただくのは、使用分の料金だけです。詳細については、[AWS Systems Manager 料金](https://aws.amazon.com/systems-manager/pricing/)を参照してください。

## Change Managerの主要コンポーネントは何ですか?
<a name="change-manager-primary-components"></a>

組織、またはアカウント内での変更プロセスの管理に使用されるChange Managerコンポーネントには、以下が含まれます。

### 委任された管理者アカウント
<a name="change-manager-what-is-delegated-account"></a>

組織全体でChange Managerを使用する場合は、委任管理者アカウントを使用します。これは、Change Manager を含む Systems Manager 全体の操作アクティビティを管理するためのアカウントとして指定される AWS アカウント です。委任管理者アカウントは、組織全体の変更アクティビティを管理します。Change Managerでの使用のために組織をセットアップするときは、どのアカウントがこの役割を担うかを指定します。委任管理者アカウントは、それが割り当てられている組織単位 (OU) 唯一のメンバーである必要があります。Change Manager を単一の AWS アカウント のみで使用する場合、委任管理者アカウントは必要ありません。

**重要**  
組織全体で Change Manager を使用する場合は、常に委任管理者アカウントから変更を行うことをお勧めします。組織内の他のアカウントから変更を行うことはできますが、それらの変更は、委任管理者アカウントで報告されず、表示することもできません。

### 変更テンプレート
<a name="change-manager-what-is-change-template"></a>

変更テンプレートは、必要な承認、利用可能なランブック、変更リクエストの通知オプションなどの項目を定義する、Change Manager の設定のコレクションです。

組織またはアカウント内のユーザーによって作成された変更テンプレートは、承認プロセスを経てから使用することを義務付けることができます。

Change Manager は、2 種類の変更テンプレートをサポートしています。*緊急の変更テンプレート*に基づく承認済み変更リクエストの場合、Change Calendar にブロッキングイベントがある場合でも、要求された変更を行うことができます。*標準的な変更テンプレート*に基づく承認済みの変更リクエストについては、指定された *変更凍結イベント*承認者から追加の承認を受け取っている場合を除いて、Change Calendar にブロッキングイベントがある場合にリクエストされた変更を行うことはできません。

### 変更リクエスト
<a name="change-manager-what-is-change-request"></a>

変更リクエストは、AWS またはオンプレミス環境の 1 つ以上のリソースを更新する Automation ランブックを実行するための Change Manager のリクエストです。変更リクエストは、変更テンプレートを使用して作成されます。

変更リクエストを作成するときは、組織またはアカウント内の 1 人、または複数人の承認者がリクエストを確認して承認する必要があります。必要な承認がなければ、リクエストされた変更を適用するランブックワークフローの実行は許可されません。

システムでは、変更リクエストは AWS Systems Manager OpsCenter の OpsItem の一種です。ただし、`/aws/changerequest` タイプの OpsItems は OpsCenter に表示されません。OpsItems である変更リクエストには、他のタイプの OpsItems に課されているものと同じクォータが適用されます。

さらに、変更リクエストをプログラム的に作成するには、`CreateOpsItem` API オペレーションを呼び出しません。代わりに、`[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html)` API オペレーションを使用します。ただし、変更リクエストは直ちに実行されず、承認を受ける必要があります。また、ワークフローの実行を妨げるブロッキングイベントが Change Calendar に存在していない必要もあります。`StartChangeRequestExecution` アクションは、承認が受け取られており、カレンダーがブロックされていない (またはブロッキングカレンダーイベントを回避する許可が付与されている) 場合に完了することができます。

### Runbook ワークフロー
<a name="change-manager-what-is-runbook-workflow"></a>

ランブックワークフローは、クラウドまたはオンプレミス環境にあるターゲットリソースに対して行われるリクエストされた変更のプロセスです。各変更リクエストには、リクエストされた変更を行うために使用される単一のオートメーションランブックが指定されています。ランブックワークフローは、必要な承認がすべて付与され、Change Calendar にブロッキングイベントがなくなったときに発生します。変更が特定の日時にスケジュールされている場合、ランブックワークフローは、すべての承認が受け取られ、カレンダーがブロックされていないとしても、スケジュールされた日時まで開始されません。

**Topics**
+ [Change Manager の仕組み](#how-change-manager-works)
+ [Change Managerは、どのような運用上のメリットを提供できますか?](#change-manager-benefits)
+ [Change Manager はどのようなユーザーに適していますか?](#change-manager-who)
+ [Change Manager の主な特徴は何ですか?](#change-manager-features)
+ [Change Manager の使用料金はかかりますか?](#change-manager-cost)
+ [Change Managerの主要コンポーネントは何ですか?](#change-manager-primary-components)
+ [Change Manager を設定する](change-manager-setting-up.md)
+ [「Change Manager」 の使用](working-with-change-manager.md)
+ [Change Manager アクティビティの監査とログ記録](change-manager-auditing.md)
+ [Change Manager のトラブルシューティング](change-manager-troubleshooting.md)

# Change Manager を設定する
<a name="change-manager-setting-up"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager を使用して、AWS Organizations で構成されている組織全体、またはシングル AWS アカウントの変更を管理できます。

Change Manager を組織で使用している場合は、「[組織の Change Manager の設定 (管理アカウント)](change-manager-organization-setup.md)」トピックから始めて、「[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)」に進みます。

単一のアカウントで Change Manager を使用している場合は、直接「[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)」に進んでください。

**注記**  
単一のアカウントで Change Manager を使用し始めて、そのアカウントが後ほど Change Manager が有効化されている組織単位に追加された場合は、単一のアカウントでの設定が無視されます。

**Topics**
+ [組織の Change Manager の設定 (管理アカウント)](change-manager-organization-setup.md)
+ [Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)
+ [Change Manager のロールとアクセス許可の設定](change-manager-permissions.md)
+ [自動承認のランブックワークフローへのアクセスを制御する](change-manager-auto-approval-access.md)

# 組織の Change Manager の設定 (管理アカウント)
<a name="change-manager-organization-setup"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

このトピックのタスクは、AWS Organizations で設定された組織で、AWS Systems Manager のツールである Change Manager を使用している場合に適用されます。単一の AWS アカウント のみで Change Manager を使用する場合は、「[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)」トピックに進んでください。

Organizations の*管理アカウント*として機能する AWS アカウント で、 内のこのセクションのタスクを実行します。管理アカウントおよびその他の Organizations の概念については、「[AWS Organizations Organizations の用語と概念](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)」を参照してください。

先に進む前に、Organizations を有効にし、お使いのアカウントを管理アカウントとして指定する必要がある場合は、*AWS Organizations ユーザーガイド*の「[組織の作成と管理](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org.html)」を参照してください。

**注記**  
以下の AWS リージョン ではこのセットアッププロセスを実行できません。  
欧州 (ミラノ) (eu-south-1)
中東 (バーレーン) (me-south-1)
アフリカ (ケープタウン) (af-south-1)
アジアパシフィック (香港) (ap-east-1)
この手順では、確実に管理アカウントの別のリージョンで作業するようにしてください。

セットアップ手順の最中に、AWS Systems Manager のツールである Quick Setup で以下の主要タスクを実行します。
+ **タスク 1: 組織の委任管理者アカウントを登録する**

  Change Managerを使用して実行される変更関連のタスクは、メンバーアカウントの 1 つで管理されます。このアカウントは、*委任管理者アカウント*として指定されるアカウントです。Change Manager に登録する委任管理者アカウントは、すべての Systems Manager 操作のための委任管理者アカウントになります。(他の AWS のサービスに対する委任管理者アカウントがある可能性があります)。Change Manager の管理者アカウント (管理アカウントとは異なります) は、変更テンプレート、変更リクエスト、およびそれぞれの承認を含めた、組織全体での変更アクティビティを管理します。委任管理者アカウントでは、Change Manager操作に対するその他の設定オプションも指定します。
**重要**  
委任管理者アカウントは、Organizations でそれが割り当てられている組織単位 (OU) 唯一のメンバーである必要があります。
+ **タスク 2: Change Manager操作に使用する変更依頼者ロール、またはカスタム職務機能に対するランブックアクセスポリシーを定義して指定する**

  Change Manager で変更リクエストを作成するには、メンバーアカウントのユーザーに AWS Identity and Access Management (IAM) アクセス許可を付与する必要があります。このアクセス許可により、ユーザーは、ユーザーが使用できるように選択したオートメーションランブックと変更テンプレートにのみアクセスできます。
**注記**  
ユーザーが変更リクエストを作成するときは、まず変更テンプレートを選択します。この変更テンプレートでは複数のランブックを使用できますが、ユーザーは変更リクエストごとに 1 つのランブックしか選択できません。変更テンプレートは、ユーザーがリクエストに使用できるランブックを含めることができるように設定することもできます。

  Change Manager は、必要な許可を付与するために*職務機能*という概念を使用します。この概念は IAM でも使用されています。IAM での[職務機能の AWS 管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)とは異なり、ユーザーは Change Manager 職務機能の名前と、それらの職務機能に対する IAM アクセス許可の両方を指定します。

  職務機能を設定するときは、カスタムポリシーを作成して、変更管理タスクの実行に必要な許可のみを提供することをお勧めします。例として、定義した*職務機能*に基づいて、特定のランブック一式にユーザーを制限する許可を指定できます。

  例えば、`DBAdmin` という名前の職務機能を作成できます。この職務機能では、`AWS-CreateDynamoDbBackup` や `AWSConfigRemediation-DeleteDynamoDbTable` などの Amazon DynamoDB データベースに関連するランブックに必要なアクセス許可のみを付与できます。

  別の例として、`AWS-ConfigureS3BucketLogging` や `AWSConfigRemediation-ConfigureS3BucketPublicAccessBlock` などの Amazon Simple Storage Service (Amazon S3) バケットに関連するランブックの使用に必要な許可のみを一部のユーザーに付与することもできます。

  Change Manager のための Quick Setup の設定プロセスは、作成する管理者ロールへの適用に利用できる完全な Systems Manager 管理者権限のセットも作成します。

  デプロイする各Change ManagerのQuick Setup設定は、選択した組織単位でChange Managerテンプレートとオートメーションランブックを実行する許可を持つ委任管理者アカウントに職務機能を作成します。Change Manager の Quick Setup 設定は最大で 15 個作成できます。
+ **タスク 3: Change Managerで使用する組織内のメンバーアカウントを選択する**

  Change Manager は、Organizations でセットアップされているすべての組織単位、およびそれらが運用されているすべての AWS リージョン 内のすべてのメンバーアカウントで使用できます。必要に応じて、Change Managerを一部の組織単位のみで使用することもできます。

**重要**  
この手順を開始する前に、手順にあるステップに目を通して、選択する設定と、付与する許可を理解しておくことを強くお勧めします。特に、作成するカスタム職務機能と、各職務機能に割り当てる許可を計画しておくようにしてください。そうすることによって、この後で作成する職務機能ポリシーを個々のユーザー、ユーザーグループ、または IAM ロールにアタッチするときに、それらのユーザーとグループを対象とする許可のみが付与されることを確実にすることができます。  
ベストプラクティスとして、まず、AWS アカウント 管理者のログイン情報を使用して、委任された管理者アカウントを設定します。その後、変更テンプレートを作成し、それぞれが使用するランブックを特定した後、職務機能とそのアクセス権限を設定します。

組織で使用する Change Manager を設定するには、Systems Manager コンソールの Quick Setup エリアで次のタスクを実行します。

このタスクは、組織用に作成する職務機能ごとに繰り返し実行します。作成する各職務機能には、異なる一連の組織単位に対する許可を設定することができます。

**Organizations の管理アカウントで Change Manager の組織を設定するには**

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

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

1. **Change Manager** カードで **[Create]** (作成) を選択します。

1. [**Delegated administrator account (委任管理者アカウント)**] に、Change Manager の変更テンプレート、変更リクエスト、およびランブックワークフローの管理に使用する の AWS アカウント の ID を入力します。

   以前に Systems Manager 用の委任管理者アカウントを指定した場合は、このフィールドにその ID が既に入力されています。
**重要**  
委任管理者アカウントは、Organizations でそれが割り当てられている組織単位 (OU) 唯一のメンバーである必要があります。  
登録した委任管理者アカウントが後ほどそのロールから登録解除された場合は、システムが、解除と当時に Systems Manager 操作を管理するための許可を削除します。Quick Setupに戻って別の委任管理者アカウントを指定し、すべての職務機能と許可を再度指定する必要があることに留意してください。  
組織全体で Change Manager を使用する場合は、常に委任管理者アカウントから変更を行うことをお勧めします。組織内の他のアカウントから変更を行うことはできますが、それらの変更は、委任管理者アカウントで報告されず、表示することもできません。

1. [**Permissions to request and make changes**] (変更をリクエストして実行する許可) セクションで、以下を実行します。
**注記**  
作成するデプロイメント設定は、それぞれ 1 つの職務機能のみに対する許可ポリシーを提供します。操作で使用する変更テンプレートを作成したら、後で Quick Setup に戻って、さらにジョブ機能を作成できます。

   **管理者ロールを作成する** – すべての AWS アクションに対する IAM アクセス許可を持つ管理者職務機能については、以下を実行します。
**重要**  
ユーザーに完全な管理者許可の付与は頻繁に行わず、ユーザーのロールに完全な Systems Manager アクセスが必要な場合のみにする必要があります。Systems Manager アクセスに関するセキュリティ面での考慮事項についての重要な情報は、「[AWS Systems Manager のためのアイデンティティおよびアクセス管理](security-iam.md)」および「[Systems Manager のセキュリティに関するベストプラクティス](security-best-practices.md)」を参照してください。

   1. [**Job function**] (職務機能) には、このロールとそのアクセス許可を識別するための名前 (例: **MyAWSAdmin**) を入力します。

   1. [**Role and permissions**] (ロールとアクセス許可) オプションには、[**Administrator permissions**] (管理者許可) を選択します。

   **その他の職務機能を作成する** – 管理者ロール以外のロールを作成するには、以下を実行します。

   1. [**Job function**] (職務機能) に、このロールを識別し、その許可を示す名前を入力します。選択する名前は、`DBAdmin` または `S3Admin` など、許可を提供するランブックの範囲を表している必要があります。

   1. [**Role and permissions**] (ロールとアクセス許可) オプションには、[**Custom permissions**] (カスタム許可) を選択します。

   1. [**Permissions policy editor**] (許可ポリシーエディタ) に、この職務機能に付与する IAM アクセス許可を JSON 形式で入力します。
**ヒント**  
IAM ポリシーエディタを使用してポリシーを作成してから、ポリシー JSON を [**Permissions policy**] (アクセス許可ポリシー) フィールドに貼り付けることが推奨されます。

**サンプルポリシー: DynamoDB データベース管理**  
例えば、職務機能がアクセスする必要がある Systems Manager ドキュメント (SSM ドキュメント) を使用するためのアクセス許可を提供するポリシーコンテンツから始めることができます。以下は、DynamoDB データベースに関連する AWS 管理の Automation ランブックのすべてと、米国東部 (オハイオ) リージョン (`us-east-2`) のサンプル AWS アカウント `123456789012` で作成された 2 つの変更テンプレートに対するアクセス権を付与するサンプルポリシーコンテンツです。

   このポリシーには、Change Calendar での変更リクエストの作成に必要な [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html) オペレーションのアクセス許可も含まれます。
**注記**  
この例は包括的ではありません。データベース、およびノードどのその他の AWS リソースを使用するには、追加のアクセス権限が必要になる場合があります。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:CreateDocument",
                   "ssm:DescribeDocument",
                   "ssm:DescribeDocumentParameters",
                   "ssm:DescribeDocumentPermission",
                   "ssm:GetDocument",
                   "ssm:ListDocumentVersions",
                   "ssm:ModifyDocumentPermission",
                   "ssm:UpdateDocument",
                   "ssm:UpdateDocumentDefaultVersion"
               ],
               "Resource": [
                   "arn:aws:ssm:us-east-1:*:document/AWS-CreateDynamoDbBackup",
                   "arn:aws:ssm:us-east-1:*:document/AWS-AWS-DeleteDynamoDbBackup",
                   "arn:aws:ssm:us-east-1:*:document/AWS-DeleteDynamoDbTableBackups",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-DeleteDynamoDbTable",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-EnableEncryptionOnDynamoDbTable",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-EnablePITRForDynamoDbTable",
                   "arn:aws:ssm:us-east-1:111122223333:document/MyFirstDBChangeTemplate",
                   "arn:aws:ssm:us-east-1:111122223333:document/MySecondDBChangeTemplate"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "ssm:ListDocuments",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:StartChangeRequestExecution",
               "Resource": [
                   "arn:aws:ssm:us-east-1:111122223333:document/*",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           }
       ]
   }
   ```

------

   IAM ポリシーの詳細については、*IAM ユーザーガイド*の「[AWS リソースのアクセス管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)」および「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

1. [**Targets**] (ターゲット) セクションで、作成している職務機能の許可を組織全体に付与するか、一部の組織単位のみに付与するかを選択します。

   [**Entire organization**] (組織全体) を選択した場合は、ステップ 9 に進みます。

   [**Custom**] (カスタム) を選択した場合は、ステップ 8 に進みます。

1. [**Target OUs**] (ターゲット OU) セクションで、Change Managerで使用する組織単位のチェックボックスをオンにします。

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

システムが組織のためのChange Managerのセットアップを完了したら、デプロイメントの概要が表示されます。この概要情報には、設定した職務機能用に作成されたロールの名前が含まれています。例えば、`AWS-QuickSetup-SSMChangeMgr-DBAdminInvocationRole`。

**注記**  
Quick Setupは、AWS CloudFormation StackSets を使用して設定をデプロイします。CloudFormation コンソールでは、完了したデプロイメント設定に関する情報を表示することもできます。StackSets の詳細については、*AWS CloudFormation ユーザーガイド*の「[AWS CloudFormation StackSets の操作](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)」を参照してください。

次のステップは、追加のChange Managerオプションの設定です。このタスクは、委任管理者アカウント、または Change Manager での使用のために有効化した組織単位内の任意のアカウントで実行することができます。このタスクでは、ユーザーアイデンティティ管理オプションの選択、変更テンプレートと変更リクエストをレビューして承認または拒否できるユーザーの指定、および組織に対して有効化するベストプラクティスオプションの選択などのオプションを設定します。詳細については、[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md) を参照してください。

# Change Managerオプションとベストプラクティスの設定
<a name="change-manager-account-setup"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

このセクションのタスクは、組織全体で使用するか、シングル AWS アカウントで使用するかにかかわらず、AWS Systems Manager のツールである Change Manager を実行する必要があります。

組織で Change Manager を使用する場合は、委任管理者アカウント、または Change Manager での使用のために有効化した組織単位内の任意のアカウントで以下のタスクを実行することができます。

**Topics**
+ [タスク 1: Change Managerユーザー ID 管理とテンプレートレビューワーの設定](#cm-configure-account-task-1)
+ [タスク 2: Change Manager 変更凍結イベント承認者とベストプラクティスの設定](#cm-configure-account-task-2)
+ [Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md)

## タスク 1: Change Managerユーザー ID 管理とテンプレートレビューワーの設定
<a name="cm-configure-account-task-1"></a>

この手順のタスクは、Change Managerに初めてにアクセスするときに実行します。これらの設定は、Change Manager に戻り **[Settings]** (設定) タブの **[Edit]** (編集) を選択することで、後ほど更新できます。

**Change Managerユーザー ID 管理とテンプレートレビューワーを設定する**

1. AWS マネジメントコンソール にサインインします。

   組織のために Change Manager を使用している場合は、委任管理者アカウントの認証情報を使用してサインインします。ユーザーには、Change Manager 設定を更新するための AWS Identity and Access Management (IAM) アクセス許可が必要です。

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

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

1. サービスのホームページで、使用可能なオプションに応じて、次のいずれかを実行します。
   + AWS Organizations で Change Manager を使用する場合は、[**Set up delegated account**] (委任アカウントをセットアップする) をクリックします。
   + Change Manager を単一の AWS アカウント で使用する場合は、[**Change Manager のセットアップ**] をクリックします。

     -または-

     **サンプル変更リクエストの作成**、[**Skip**] を選択し、[**設定**] タブに進みます。

1. [**User identity management**] (ユーザー ID 管理) には、次のいずれかを選択します。
   + **AWS Identity and Access Management (IAM)** – 既存のユーザー、グループ、ロールを使用して、Change Manager でリクエストの作成と承認、その他のアクションを実行するユーザーを識別します。
   + **AWS IAM アイデンティティセンター (IAM Identity Center)** – [IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/) でアイデンティティの作成と管理を行うか、既存のアイデンティティソースに接続して、Change Manager でアクションを実行するユーザーを識別することができます。

1. [**Template reviewer notification**] (テンプレートレビューワーの通知) セクションで、新しい 変更テンプレートまたは変更テンプレートバージョンをレビューする準備が整ったことをテンプレートレビューワーに通知するために使用する Amazon Simple Notification Service (Amazon SNS) トピックを指定します。選択する Amazon SNS トピックが、テンプレートレビューワーに通知を送信するように設定されていることを確認します。

   変更テンプレートのレビューワーに通知するための Amazon SNS トピックの作成と設定については、「[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md)」を参照してください。

   1. テンプレートレビューワー通知の Amazon SNS トピックを指定するには、以下のいずれかを選択します。
      + **Enter an SNS Amazon Resource Name (ARN)**(SNS Amazon リソースネーム (ARN) を入力) – [**Topic ARN** (トピック ARN) には、既存の Amazon SNS トピックの ARN を入力します。このトピックは、組織のどのアカウントのものでも使用できます。
      + **Select an existing SNS topic (既存の SNS トピックを選択)** – **[Target notification topic] (ターゲット通知トピック)** には、現在の AWS アカウント にある既存の Amazon SNS トピックの ARN を選択します。(このオプションは、現在の AWS アカウント と AWS リージョン で Amazon SNS トピックをまだ作成していない場合は使用できません)。
**注記**  
選択する Amazon SNS トピックは、送信する通知とその送信先のサブスクライバーを指定するように設定されている必要があります。Amazon SNアクセスポリシーは、Change Manager が通知を送信できるように、Systems Manager にアクセス許可も付与する必要があります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

   1. [**Add notification**] (通知を追加) をクリックします。

1. [**Change template reviewers**] (変更テンプレートレビューワー) セクションで、運用での使用に先立って新しい変更テンプレートまたは変更テンプレートバージョンをレビューする、組織またはアカウント内のユーザーを選択します。

   変更テンプレートレビューワーは、他のユーザーが Change Manager ランブックワークフローでの使用のために提出したテンプレートの適合性とセキュリティを検証する責任を担います。

   次の手順を実行して、変更テンプレートのレビューワーを選択します。

   1. [**Add**] (追加) をクリックします。

   1. 変更テンプレートレビューワーとして割り当てる各ユーザー、グループ、または IAM ロールの名前の横にあるチェックボックスをオンにします。

   1. [**Add approvers**] (承認者を追加) をクリックします。

1. [**Submit**] (送信) をクリックします。

 この初期セットアッププロセスを完了したら、[タスク 2: Change Manager 変更凍結イベント承認者とベストプラクティスの設定](#cm-configure-account-task-2) にあるステップに従って、追加のChange Manager設定とベストプラクティスの設定を行います。

## タスク 2: Change Manager 変更凍結イベント承認者とベストプラクティスの設定
<a name="cm-configure-account-task-2"></a>

[タスク 1: Change Managerユーザー ID 管理とテンプレートレビューワーの設定](#cm-configure-account-task-1) のステップを完了したら、*変更凍結イベント* 時の変更リクエストを処理する追加のレビューワーを指定し、Change Manager 操作に対して有効化する利用可能なベストプラクティスを指定できます。

変更凍結イベントとは、現在の変更カレンダーに制限が設定されていることを意味します (AWS Systems Manager Change Calendarのカレンダー状態は `CLOSED` です)。このような場合、変更リクエストを処理する通常の承認者に加えて、または、自動承認が可能なテンプレートを使用して変更リクエストを作成する場合、変更凍結承認者もこの変更リクエストを実行するためのアクセス許可を付与する必要があります。許可が付与されなければ、カレンダーの状態が再度 `OPEN` になるまで変更は処理されません。

**Change Managerの変更凍結イベント承認者とベストプラクティスを設定する**

1. ナビゲーションペインで、**Change Manager** を選択します。

1. [**Settings**] (設定) タブを選択し、[**Edit**] (編集) をクリックします。

1. [**Approvers for change freeze events**] (変更凍結イベントの承認者) セクションで、Change Calendarで使用されているカレンダーが CLOSED 状態の場合でも変更の実行を承認できる、組織またはアカウント内のユーザーを選択します。
**注記**  
変更凍結レビューを有効にするには、**[Best practices] (ベストプラクティス)** にある [**Check Change Calendar for restricted change events**] (制限された変更イベントについて変更カレンダーをチェックする) オプションを有効にする必要があります。

   以下を実行して変更凍結イベントの承認者を選択します。

   1. [**Add**] (追加) をクリックします。

   1. 変更凍結イベントの承認者として割り当てる各ユーザー、グループ、または IAM ロールの名前の横にあるチェックボックスをオンにします。

   1. [**Add approvers**] (承認者を追加) をクリックします。

1. ページの下部にある [**Best practices**] (ベストプラクティス) セクションで、以下の各オプションに実施するベストプラクティスを有効にします。
   + オプション: [**Check Change Calendar for restricted change events**] (制限された変更イベントについて変更カレンダーをチェックする)

     Change Manager が、スケジュールされたイベントによって変更がブロックされていないことを確認するためにChange Calendarのカレンダーをチェックすることを指定するには、まず [**Enabled**] (有効) チェックボックスをオンにしてから、[**Change Calendar**] (変更カレンダー) リストから制限されたイベントをチェックするカレンダーを選択します。

     の詳細については、「Change Calendar」を参照してください。[AWS Systems Manager Change Calendar](systems-manager-change-calendar.md)
   + オプション: [**SNS topic for approvers for closed events**] (クローズドイベントの承認者のための SNS トピック)

     1. 以下のいずれかを選択して、アカウント内の Amazon Simple Notification Service (Amazon SNS) トピックを指定します。これは、変更凍結イベント中に、承認者に通知を送信するために使用されます。([**Best practices**] (ベストプラクティス) の上にある [**Approvers for change freeze events**] (変更凍結イベントの承認者) セクションでも承認者を指定する必要があることに注意してください。)
        + **Enter an SNS Amazon Resource Name (ARN)**(SNS Amazon リソースネーム (ARN) を入力) – [**Topic ARN** (トピック ARN) には、既存の Amazon SNS トピックの ARN を入力します。このトピックは、組織のどのアカウントのものでも使用できます。
        + **Select an existing SNS topic (既存の SNS トピックを選択)** – **[Target notification topic] (ターゲット通知トピック)** には、現在の AWS アカウント にある既存の Amazon SNS トピックの ARN を選択します。(このオプションは、現在の AWS アカウント と AWS リージョン で Amazon SNS トピックをまだ作成していない場合は使用できません)。
**注記**  
選択する Amazon SNS トピックは、送信する通知とその送信先のサブスクライバーを指定するように設定されている必要があります。Amazon SNアクセスポリシーは、Change Manager が通知を送信できるように、Systems Manager にアクセス許可も付与する必要があります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

     1. [**Add notification**] (通知を追加) をクリックします。
   + オプション: [**Require monitors for all templates**] (すべてのテンプレートにモニタリングを義務付ける)

     組織またはアカウントのすべてのテンプレートに変更操作を監視するための Amazon CloudWatch アラームが指定されていることを確実にしたい場合は、[**Enabled**] (有効) チェックボックスをオンにします。
   + オプション: [**Require template review and approval before use**] (使用前のテンプレートのレビューと承認を義務付ける)

     レビューと承認が完了したテンプレートに基づかずに変更リクエストが作成されたり、ランブックワークフローが実行されたりするこがないようにするには、[**Enabled**] (有効) チェックボックスをオンにします。

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

# Change Manager 通知用の Amazon SNS トピックの設定
<a name="change-manager-sns-setup"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager を設定して、変更リクエストおよび変更テンプレートに関連するイベントについて、Amazon Simple Notification Service (Amazon SNS) トピックに通知を送信できます。トピックを追加するChange Managerイベントの通知を受け取るには、以下のタスクを完了します。

**Topics**
+ [タスク 1: Amazon SNS トピックを作成してサブスクライブする](#change-manager-sns-setup-create-topic)
+ [タスク 2: Amazon SNS アクセスポリシーを更新する](#change-manager-sns-setup-encryption-policy)
+ [タスク 3: (オプション) AWS Key Management Service アクセスポリシーを更新する](#change-manager-sns-setup-KMS-policy)

## タスク 1: Amazon SNS トピックを作成してサブスクライブする
<a name="change-manager-sns-setup-create-topic"></a>

まず、Amazon SNS トピックを作成し、サブスクライブする必要があります。詳細については、*Amazon Simple Notification Service デベロッパーガイド*の「[Amazon SNS トピックの作成](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)」および「[Amazon SNS トピックへのサブスクライブ](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-subscribe-endpoint-to-topic.html)」を参照してください。

**注記**  
通知を受け取るには、委任管理アカウントと同じ AWS リージョン と AWS アカウント にある Amazon SNS トピックの Amazon リソースネーム (ARN) を指定する必要があります。

## タスク 2: Amazon SNS アクセスポリシーを更新する
<a name="change-manager-sns-setup-encryption-policy"></a>

以下の手順を使用して Amazon SNS アクセスポリシーを更新し、Systems Manager がタスク 1 で作成した Amazon SNS トピックに Change Manager 通知を発行できるようにします。このタスクを完了しなければ、トピックを追加するイベントの通知を送信するアクセス許可が Change Manager に付与されません。

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

1. ナビゲーションペインで、[**トピック**] を選択します。

1. タスク 1 で作成したトピックを選択してから、[**Edit**] (編集) をクリックします。

1. [**アクセスポリシー**] を展開します。

1. 以下の `Sid` ブロックを既存のポリシーに追加して更新し、それぞれの*ユーザー入力プレースホルダー*をあなた自身の情報で置き換えます

   ```
   {
       "Sid": "Allow Change Manager to publish to this topic",
       "Effect": "Allow",
       "Principal": {
           "Service": "ssm.amazonaws.com"
       },
       "Action": "sns:Publish",
       "Resource": "arn:aws:sns:region:account-id:topic-name",
       "Condition": {
           "StringEquals": {
               "aws:SourceAccount": [
                   "account-id"
               ]
           }
       }
   }
   ```

   既存の `Sid` ブロックの後にこのブロックを入力し、作成したトピックの該当する値で *region*、*account-id*、*topic-name* を作成したトピックの適切な値に置き換えます。

1. **[Save changes]** (変更の保存) をクリックします。

これで、トピックに追加するイベントタイプが発生すると、システムが Amazon SNS トピックに通知を送信するようになりました。

**重要**  
AWS Key Management Service (AWS KMS) のサーバー側の暗号化キーを使用して Amazon SNS トピックを設定した場合は、タスク 3 を完了する必要があります。

## タスク 3: (オプション) AWS Key Management Service アクセスポリシーを更新する
<a name="change-manager-sns-setup-KMS-policy"></a>

Amazon SNS トピックに対して AWS Key Management Service (AWS KMS) サーバー側の暗号化を有効にした場合、トピックを設定したときに選択した AWS KMS key のアクセスポリシーも更新する必要があります。以下の手順を実行してアクセスポリシーを更新し、Systems Manager がタスク 1 で作成した Amazon SNS トピックに Change Manager の承認通知を発行できるようにします。

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

1. ナビゲーションペインで、[**Customer managed keys (カスタマー管理型のキー)**] を選択します。

1. トピックの作成時に選択したカスタマーマネージドキーの ID を選択します。

1. [**Key Policy**] (キーポリシー) セクションで、[**Switch to policy view**] (ポリシービューへの切り替え) を選択します。

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

1. 既存のポリシーの既存の `Sid` ブロックのいずれかの後に、次の `Sid` ブロックを入力します。各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

   ```
   {
       "Sid": "Allow Change Manager to decrypt the key",
       "Effect": "Allow",
       "Principal": {
           "Service": "ssm.amazonaws.com"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey*"
       ],
       "Resource": "arn:aws:kms:region:account-id:key/key-id",
       "Condition": {
           "StringEquals": {
               "aws:SourceAccount": [
                   "account-id"
               ]
           }
       }
   }
   ```

1. 次に、リソースポリシーの既存の `Sid` ブロックのいずれかの後に次の `Sid` ブロックを入力して、[サービス間の混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)を防止します。

   このブロックは、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件コンテキストキーを使用して、Systems Manager がリソースに別のサービスを提供する許可を制限します。

   各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Configure confused deputy protection for AWS KMS keys used in Amazon SNS topic when called from Systems Manager",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:topic-name",
               "Condition": {
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:ssm:us-east-1:111122223333:*"
                   },
                   "StringEquals": {
                       "aws:SourceAccount": "111122223333"
                   }
               }
           }
       ]
   }
   ```

------

1. **[Save changes]** (変更の保存) をクリックします。

# Change Manager のロールとアクセス許可の設定
<a name="change-manager-permissions"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

デフォルトでは、Change Manager にはリソースでアクションを実行するアクセス許可がありません。AWS Identity and Access Management (IAM) サービスロールまたは*ロールの継承*を使用してアクセスを許可する必要があります。このロールでは、ユーザーに代わって Change Manager が承認済み変更リクエストで指定された Runbook ワークフローを安全に実行できます。このロールは、Change Manager に対して AWS Security Token Service (AWS STS) [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 信頼を付与します。

これらのアクセス許可を組織内の複数のユーザーの代理として行動するために 1 つのロールに提供すれば、該当するユーザーは、そのアクセス許可の配列を自分で取得する必要がなくなります アクセス許可で許可されるアクションは、承認済みの操作のみに制限されます。

アカウントまたは組織のユーザーは、変更リクエストを作成するときに、このロールの継承を選択して変更オペレーションを実行できます。

Change Manager の新しいロールの継承を作成するか、必要なアクセス許可で既存のロールを更新できます。

Change Manager のサービスロールを作成する必要がある場合、次のタスクを完了します。

**Topics**
+ [タスク 1: Change Manager のロールの継承ポリシーを作成する](#change-manager-role-policy)
+ [タスク 2: Change Manager のロールの継承を作成する](#change-manager-role)
+ [タスク 3: `iam:PassRole` ポリシーを他のロールにアタッチする](#change-manager-passpolicy)
+ [タスク 4: 他の AWS のサービスを呼び出すためにロールの継承をインラインポリシーに追加する](#change-manager-role-add-inline-policy)
+ [タスク 5: Change Manager へのユーザーアクセスを設定する](#change-manager-passrole)

## タスク 1: Change Manager のロールの継承ポリシーを作成する
<a name="change-manager-role-policy"></a>

以下の手順を使用して、Change Manager ロールの継承にアタッチするポリシーを作成します。

**Change Manager のロールの継承ポリシーを作成するには**

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

1. ナビゲーションペインで、**Policies** を選択し、**Create Policy** を選択します。

1. [**ポリシーの作成**] ページで [**JSON**] タブをクリックし、デフォルトのコンテンツを次のように置き換えます。これは次のステップで実際の Change Manager オペレーションで変更します。
**注記**  
複数のアカウントとAWS リージョンを持つ組織ではなく、1 つの AWS アカウントで使用するポリシーを作成する場合、最初のステートメントブロックを省略できます。Change Manager を使用する単一のアカウントの場合、`iam:PassRole` アクセス許可は必要ありません。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/AWS-SystemsManager-job-functionAdministrationRole",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": "ssm.amazonaws.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:DescribeDocument",
                   "ssm:GetDocument",
                   "ssm:StartChangeRequestExecution"
               ],
               "Resource": [
                   "arn:aws:ssm:us-east-1::document/template-name",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:ListOpsItemEvents",
                   "ssm:GetOpsItem",
                   "ssm:ListDocuments",
                   "ssm:DescribeOpsItems"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. `iam:PassRole` アクションに対して、`Resource` 値を更新して Runbook ワークフローを開始するアクセス許可を付与する組織に対して定義されているすべてのジョブ関数の ARN を含めます。

1. *region*、*account-id*、*template-name*、*delegated-admin-account-id*、*job-function* プレスホルダーを Change Manager オペレーションの値で置き換えます。

1. 2 番目の `Resource` ステートメントでリストを更新して、アクセス許可を付与するすべての変更テンプレートを含めます。`"Resource": "*"` を指定して組織のすべての変更テンプレートにアクセス許可を付与することもできます。

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

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

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

1. [**Review policy**] (ポリシーの確認) ページの [**Name**] (名前) ボックスに **MyChangeManagerAssumeRole** などの名前を入力し、説明を入力します。

1. [**ポリシーの作成**] を選択し、「[タスク 2: Change Manager のロールの継承を作成する](#change-manager-role)」に進みます。

## タスク 2: Change Manager のロールの継承を作成する
<a name="change-manager-role"></a>

以下の手順を使用して、Change Manager の Change Manager のロールの継承 (サービスロールの一種) を作成します

**Change Manager のロールの継承ポリシーを作成するには**

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

1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

1. **[Select trusted entity]** (信頼できるエンティティを選択) で、次のように選択します。

   1. **[Trusted entity type]** (信頼できるエンティティタイプ) で、**[AWS service]** ( のサービス) を選択します。

   1. **[その他の AWS のサービス のユースケース]** で、**[Systems Manager]** を選択します

   1. 以下のイメージに示されている、**[Systems Manager]** を選択します。  
![\[ユースケースとして選択した Systems Manager のオプションを示すスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/iam_use_cases_for_MWs.png)

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

1. [**アタッチされたアクセス許可ポリシー**] ページで、[タスク 1: Change Manager のロールの継承ポリシーを作成する](#change-manager-role-policy) で作成したロールの継承 (**MyChangeManagerAssumeRole** など) を検索します。

1. ロールの継承ポリシー名の横にあるチェックボックスを選択し、[**次へ: タグ**] を選択します。

1. **[Role name]** (ロール名) に、新しいインスタンスプロファイルの名前 (**MyChangeManagerAssumeRole** など) を入力します。

1. (オプション) **[Description]** (説明) で、このインスタンスロールの説明を更新します。

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

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

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

1. **[Create role]** (ロールの作成) を選択します。**ロール**ページが再度表示されます。

1. **ロール** ページで作成したロールを選択して、**概要** ページを開きます。

## タスク 3: `iam:PassRole` ポリシーを他のロールにアタッチする
<a name="change-manager-passpolicy"></a>

`iam:PassRole` ポリシーを IAM インスタンスプロファイルまたは IAM サービスロールにアタッチするには、次の手順を使用します。(Systems Manager サービスは IAM インスタンスプロファイルを使用して EC2 インスタンスと通信します。[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境の非 EC2 マネージドノードでは、代わりに IAM サービスロールが使用されます。)

`iam:PassRole` ポリシーをアタッチすることにより、Change Manager サービスは、ランブックワークフローを実行するときに他のサービスまたは Systems Manager ツールにロールの継承アクセス許可を渡すことができます。

**`iam:PassRole` ポリシーを IAM インスタンスプロファイルまたはサービスロールにアタッチするには**

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

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. 前のステップで作成した Change Manager のロールの継承 (**MyChangeManagerAssumeRole** など) を検索し、その名前を選択します。

1. ロールの継承の [**Summary**] (サマリー) ページで [**Permissions**] (アクセス許可) タブを選択します。

1. **[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) を選択します。

1. [**ポリシーの作成**] ページの [**Visual editor**] (ビジュアルエディタ) タブを選択します。

1. [**サービス**]、[**IAM**] の順に選択します。

1. [**Filter actions (フィルタアクション)**] テキストボックスに「**PassRole**」と入力し、[**PassRole**] オプションを選択します。

1. [**リソース**] を展開します。[**Specific**] (固有) が選択されていることを確認し、[**Add ARN**] (ARN の追加) を選択します。

1. [**ロールの ARN を指定する**] フィールドに、ロールの継承アクセス許可を渡す IAM インスタンスプロファイルロールまたは IAM サービスロールの ARN を入力します。システムによって、[**アカウント**] と [**Role name with path (ロール名とパス)**] フィールドが入力されます。

1. [**Add**] (追加) をクリックします。

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

1. **[Name]** (名前) に、このポリシーを識別する名前を入力し、**[Create policy]** (ポリシーの作成) を選択します。

**詳細情報**  
+ [Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)
+ [ハイブリッドおよびマルチクラウド環境で Systems Manager に必要な IAM サービスロールを作成する](hybrid-multicloud-service-role.md)

## タスク 4: 他の AWS のサービスを呼び出すためにロールの継承をインラインポリシーに追加する
<a name="change-manager-role-add-inline-policy"></a>

Change Manager のロールの継承を使用して変更リクエストが他の AWS のサービスを呼び出すとき、ロールの継承は、該当するサービスを呼び出すアクセス許可で設定されている必要があります。この要件は、変更リクエストで使用される `AWS-ConfigureS3BucketLogging`、`AWS-CreateDynamoDBBackup`、`AWS-RestartEC2Instance` ランブックなど、すべての AWS オートメーションランブック (AWS-\$1 runbooks) に適用されます。この要件は、他のサービスを呼び出すアクションを使用して他の AWS のサービスを呼び出すように作成したカスタムランブックにも適用されます。たとえば、`aws:executeAwsApi`、`aws:CreateStack`、または `aws:copyImage` などのアクションを使用する場合は、それらのサービスを呼び出すためのアクセス許可を持つサービスロールを設定する必要があります。ロールに IAM インラインポリシーを追加することで、他の AWS のサービスへのアクセス許可を有効にできます。

**インラインポリシーをロールの継承に追加して、他の AWS のサービス (IAM コンソール) を呼び出すには**

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

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

1. リストで、更新するロールの継承の名前 (`MyChangeManagerAssumeRole` など) を選択します。

1. **[アクセス許可]** タブを選択します。

1. **[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) を選択します。

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

1. 呼び出す AWS のサービスの JSON ポリシードキュメントを入力します。JSON ポリシードキュメントの 2 つの例を以下に示します。

   **Amazon S3 `PutObject` および `GetObject` の例**

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------

   **Amazon EC2 `CreateSnapshot` および `DescribeSnapShots` の例**

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":"ec2:CreateSnapshot",
            "Resource":"*"
         },
         {
            "Effect":"Allow",
            "Action":"ec2:DescribeSnapshots",
            "Resource":"*"
         }
      ]
   }
   ```

------

    IAM ポリシー言語の詳細については、*IAM ユーザーガイド*の「[IAM JSON ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)」を参照してください。

1. 完了したら、[**ポリシーの確認**] を選択します。構文エラーがある場合は、[Policy Validator (ポリシー検証)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html) によってレポートされます。

1. **[Name]** (名前) に、作成するポリシーを識別する名前を入力します。ポリシーの **[Summary]** (概要) を参照して、ポリシーによって付与された許可を確認します。次に [**ポリシーの作成**] を選択して作業を保存します。

1. インラインポリシーを作成した後は、自動的にロールに埋め込まれます。

## タスク 5: Change Manager へのユーザーアクセスを設定する
<a name="change-manager-passrole"></a>

ユーザー、グループ、ロールに管理者権限が割り当てられている場合は、Change Manager にアクセスできます。管理者権限がない場合は、管理者が `AmazonSSMFullAccess` マネージドポリシー (または同等のアクセス許可を付与するポリシー) を ユーザー、グループ、ロールに割り当てる必要があります。

Change Manager を使用するようにユーザーを設定するには、次の手順を使用します。選択したユーザーには、Change Manager を設定して実行するアクセス許可が付与されます。

組織で使用している アイデンティティアプリケーションに応じて、ユーザーアクセスを設定するために使用できる 3 つのオプションのいずれかを選択できます。ユーザーアクセスを設定するときに、以下を割り当て、または追加します。

1. Systems Manager へのアクセスを許可する `AmazonSSMFullAccess` ポリシーまたは同等のポリシーを割り当てます。

1. `iam:PassRole` ポリシーを割り当てます。

1. [タスク 2: Change Manager のロールの継承を作成する](#change-manager-role) の最後にコピーしたロールを継承する Change Manager の ARN を追加します。

アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
+ AWS IAM アイデンティティセンター のユーザーとグループ:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

これで Change Manager に必要なロールの設定が完了しました。これで Change Manager オペレーションで Change Manager のロールの継承 ARN を使用できるようになりました。

# 自動承認のランブックワークフローへのアクセスを制御する
<a name="change-manager-auto-approval-access"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

組織またはアカウント用に作成された各変更テンプレートでは、そのテンプレートから作成された変更リクエストを自動承認済変更リクエストとして実行できるかどうかを指定できます。つまり、レビューステップなしで自動的に実行できます (変更凍結イベントを除く)。

ただし、特定のユーザー、グループ、または AWS Identity and Access Management (IAM) ロールは、変更テンプレートで許可されている場合でも、自動承認の変更リクエストを実行しないようにした方がいいかもしれません。これを行うには、ユーザー、グループ、または IAM ロールに割り当てられる IAM ポリシーで、`StartChangeRequestExecution` オペレーションの `ssm:AutoApprove` 条件キーを使用します。

次のポリシーをインラインポリシーとして追加できます。このポリシーでは、条件を `false` に指定し、ユーザーが自動承認可能な変更リクエストを実行できないようにします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
            {
            "Effect": "Allow",
            "Action": "ssm:StartChangeRequestExecution",
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "ssm:AutoApprove": "false"
                }
            }
        }
    ]
}
```

------

インラインポリシーの指定の詳細については、*IAM ユーザーガイド*で「[インラインポリシー](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies)」と「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

Systems Manager ポリシーの条件キーの詳細については、「[Condition keys for Systems Manager](security_iam_service-with-iam.md#policy-conditions)」(Systems Manager の条件キー) を参照してください。

# 「Change Manager」 の使用
<a name="working-with-change-manager"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager では、組織全体のユーザー、またはシングル AWS アカウント内のユーザーが、必要な許可が付与されている変更関連タスクを実行できます。Change Manager タスクには、以下が含まれます。
+ 変更テンプレートを作成、確認、承認または拒否します。

  変更テンプレートは、必要な承認、利用可能なランブック、変更リクエストの通知オプションなどの項目を定義する、Change Manager の設定のコレクションです。
+ 変更リクエストを作成、確認、承認または拒否します。

  変更リクエストは、AWS またはオンプレミス環境の 1 つ以上のリソースを更新する Automation ランブックを実行するための Change Manager のリクエストです。変更リクエストは、変更テンプレートを使用して作成されます。
+ 組織またはアカウントのどのユーザーを変更テンプレートおよび変更リクエストに対するレビューワーにできるかを指定します。
+ Change Managerでのユーザー ID の管理方法、およびChange Manager操作で実施される利用可能な*ベストプラクティス*オプションなどの構成設定を編集する。これらの設定の実行に関する詳細については、「[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)」を参照してください。

**Topics**
+ [変更テンプレートの使用](change-templates.md)
+ [変更リクエストの使用](change-requests.md)
+ [変更リクエストの詳細、タスク、およびタイムラインの確認 (コンソール)](reviewing-changes.md)
+ [変更リクエストの集計数の表示 (コマンドライン)](change-requests-review-aggregate-command-line.md)

# 変更テンプレートの使用
<a name="change-templates"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

変更テンプレートは、必要な承認、利用可能なランブック、変更リクエストの通知オプションなどの項目を定義する、Change Manager の設定のコレクションです。

**注記**  
AWS には、AWS Systems Manager のツールである Change Manager を試すために使用できるサンプルの [Hello World](change-templates-aws-managed.md) 変更テンプレートが用意されています。組織またはアカウント内のリソースに許可する変更を定義するには、独自の変更テンプレートを作成してください。

ランブックワークフローの実行時に行われる変更は、オートメーションランブックの内容に基づきます。作成する変更テンプレートには、変更リクエストを作成するユーザーが、更新時の実行用に選択できる 1 つ、または複数のオートメーションランブックを含めることができます。また、変更テンプレートを作成して、リクエスタが変更リクエストに対して利用できるオートメーションランブックを選択できるようにすることもできます。

変更テンプレートは、**[Create template] (テンプレートの作成)** コンソールページの **[Builder] (ビルダー)** オプションを使用して簡単に作成することができます。または、[**Editor**] (エディタ) オプションを使用して、ランブックワークフローに望ましい設定を使った JSON または YAML コンテンツを手動で作成することも可能です。コマンドラインツールを使用して、変更テンプレートの JSON コンテンツを外部ファイルに保存して、変更テンプレートを作成することもできます。

**Topics**
+ [AWS 管理の `Hello World` 変更テンプレートを試す](change-templates-aws-managed.md)
+ [変更テンプレートの作成](change-templates-create.md)
+ [変更テンプレートの確認と、承認または拒否](change-templates-review.md)
+ [変更テンプレートの削除](change-templates-delete.md)

# AWS 管理の `Hello World` 変更テンプレートを試す
<a name="change-templates-aws-managed"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager の設定が完了したら、サンプルの変更テンプレート `AWS-HelloWorldChangeTemplate` を使用してレビューと承認のプロセスをテストすることができます。このテンプレートでは、サンプル Automation ランブック `AWS-HelloWorld` を使用します。このテンプレートは、設定された許可、承認者の割り当て、および承認プロセスをテスト、または検証するために設計されています。AWS から、組織またはアカウントでこの変更テンプレートを使用するための承認が既に提供されています。この変更テンプレートに基づく変更リクエストは、いずれも組織またはアカウントのレビューワーによる承認を受ける必要があります。

このテンプレートに関連付けられたランブックワークフローの結果は、リソースに変更を行うのではなく、オートメーションステップの出力にメッセージを書き出します。

**開始する前に**  
作業を開始する前に、次のタスクが完了していることを確認してください。
+ 組織全体の変更の管理に AWS Organizations を使用して場合は、「[組織の Change Manager の設定 (管理アカウント)](change-manager-organization-setup.md)」で説明されている組織のセットアップタスクを完了します。
+ 「[Change Managerオプションとベストプラクティスの設定](change-manager-account-setup.md)」の説明に従って、委任管理者アカウントまたは単一のアカウントにChange Managerを設定します。
**注記**  
Change Manager 設定で [**Require monitors for all templates** (すべてのテンプレートに監視プログラムを義務付ける)] のベストプラクティスのオプションを有効にした場合は、Hello World 変更テンプレートをテストしている間、それを一時的に無効にしてください。

**AWS 管理の Hello World 変更テンプレートを試すには**

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

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

1. [**Create request**] (リクエストを作成) をクリックします。

1. 「`AWS-HelloWorldChangeTemplate`」という名前の変更テンプレートを選択し、[**Next**] (次へ) を選択します。

1. [**Name**] (名前) には、**MyChangeRequestTest** など、その目的を識別しやすくする変更リクエストの名前を入力します。

1. 変更リクエストを作成する残りの手順については、「[変更リクエストの作成変更リクエストの作成 (コンソール)](change-requests-create.md)」を参照してください。

**次のステップ**  
変更リクエストの承認については、「[変更リクエストの確認と、承認または拒否](change-requests-review.md)」を参照してください。

変更リクエストのステータスと結果を表示するには、Change Manager の [**Requests** (リクエスト)] タブで変更リクエストの名前を選択します。

# 変更テンプレートの作成
<a name="change-templates-create"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

変更テンプレートは、必要な承認、利用可能なランブック、変更リクエストの通知オプションなどの項目を定義する、Change Manager の設定のコレクションです。

AWS Systems Manager のツールである Change Manager で、ビルダーオプションとエディタオプション、コマンドラインツールが含まれているコンソールを使用して、オペレーションの変更テンプレートを作成できます。

**Topics**
+ [変更テンプレートの承認について](cm-approvals-templates.md)
+ [ビルダーを使用した変更テンプレートの作成](change-templates-custom-builder.md)
+ [エディタを使用した変更テンプレートの作成](change-templates-custom-editor.md)
+ [コマンドラインツールを使用した変更テンプレートの作成](change-templates-tools.md)

# 変更テンプレートの承認について
<a name="cm-approvals-templates"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

作成する各変更テンプレートでは、そのテンプレートから作成された変更リクエストの承認レベルを最大 5 つ指定できます。これらのレベルごとに、最大 5 人の潜在的な承認者を指定できます。承認者は 1 人のユーザーに限定されません。IAM グループまたは IAM ロールを個別の承認者として指定することもできます。IAM グループと IAM ロールでは、そのグループまたはロールに属する 1 人以上のユーザーが、変更リクエストに必要な承認の総数の受け取りに対して、承認を提供することができます。変更テンプレートに必要な数よりも多くの承認者を指定することもできます。

Change Manager では、レベルごとの承認とラインごとの承認という、2 つの主要な承認アプローチをサポートしています。状況によっては、この 2 つのタイプを組み合わせることもできます。Change Manager オペレーションでは、レベルごとの承認のみを使用することをお勧めします。

------
#### [ Per-level approvals ]

推奨 2023 年 1 月 23 日現在、Change Manager はレベルごとの承認をサポートしています。このモデルでは、変更テンプレートの各承認レベルにおいて、最初にそのレベルに必要な承認数を指定します。次に、そのレベルに必要な数以上の承認者を指定し、さらに多くの承認者を指定できます。ただし、変更リクエストの承認に必要なのは、指定したレベルごとの承認者数だけです。例えば、5 人の承認者を指定できますが、必要なのは 3 人です。

この承認タイプのコンソールビューと JSON サンプルについては、「[レベルごとの承認設定の例](approval-type-samples.md#per-level-approvals)」を参照してください。

------
#### [ Per-line approvals ]

下位互換性のサポート Change Manager のオリジナルリリースでは、行ごとの承認のみがサポートされていました。このモデルでは、承認レベルに指定されたすべての承認者が、承認ラインとして表示されます。変更リクエストをそのレベルで承認するには、各承認者が承認する必要がありました。2023 年 1 月 23 日より前は、これが承認をサポートする唯一のモデルでした。この日付より前に作成された変更テンプレートは、引き続き行単位の承認をサポートしますが、代わりにレベルごとの承認を使用することをお勧めします。

この承認タイプのコンソールビューと JSON サンプルについては、「[行ごとの承認設定の例](approval-type-samples.md#per-line-approvals)」を参照してください。

------
#### [ Combined per-line and per-level approvals ]

非推奨 コンソールの **[ビルダー]** タブでは、行ごとの承認の追加がサポートされなくなりました。ただし、場合によっては、変更テンプレートで行ごとの承認とレベルごとの承認の両方が行われることがあります。これは、2023 年 1 月 23 日より前に作成された変更テンプレートを更新した場合や、YAML コンテンツを手動で編集して変更テンプレートを作成または更新した場合に発生する可能性があります。

この承認タイプのコンソールビューと JSON サンプルについては、「[レベルごとと行ごとの承認設定を組み合わせた例](approval-type-samples.md#combined-approval-levels)」を参照してください。

------

**重要**  
ラインごとの承認とレベルごとの承認を組み合わせた変更テンプレートを作成することは可能ですが、この設定は推奨されておらず、必要もありません。より多くの承認が必要な承認タイプ (ラインごとまたはレベルごとの承認) が優先されます。例えば、次のようになります。  
変更テンプレートでレベルごとに 3 つの承認が指定されているが、1 行につき 5 つの承認が指定されている場合は、5 つの承認が必要です。
変更テンプレートでレベルごとに 4 つの承認が指定されているが、1 行につき 2 つの承認が指定されている場合は、4 つの承認が必要です。

YAML または JSON コンテンツを手動で編集することで、行ごとおよびレベルごとの両方の承認を含むレベルを作成できます。作成すると、**[ビルダー]** タブに、レベルと個々のラインの両方に必要な承認数を指定するためのコントロールが表示されます。ただし、コンソールを使用して追加した新しいレベルでは、引き続きレベルごとの承認設定のみがサポートされます。

## 変更リクエストの通知と拒否
<a name="notifications-and-rejections"></a>

Amazon SNSの通知  
変更テンプレートを使用して変更リクエストが作成されると、そのレベルの承認通知対象として指定されている Amazon Simple Notiﬁcation Service (Amazon SNS) トピックのサブスクライバーに通知が送信されます。変更テンプレートで通知トピックを指定することも、変更リクエストを作成するユーザーに通知トピックを指定させることもできます。  
あるレベルで必要最小限の承認が受理されると、次のレベルの Amazon SNS トピックのサブスクライバーに通知が送信され、以降も同様に通知が送信されます。  
指定した IAM ロール、グループ、ユーザーに、指定した必要な承認数を満たすのに十分な承認者を指定してください。例えば、3 人のユーザーを含む 1 つの IAM グループのみを 1 人の承認者として指定した場合、そのレベルで必須と指定できるのは 5 つの承認ではなく、3 つ以下となります。

変更リクエストの却下  
承認レベルと承認者をいくつ指定していても、そのリクエストのランブックワークフローの発生を防ぐには、変更リクエストを 1 回却下するだけで済みます。

# Change Manager 承認タイプの例
<a name="approval-type-samples"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

次のサンプルは、Change Manager の 3 種類の承認タイプのコンソールビューと JSON コンテンツを示しています。

**Topics**
+ [レベルごとの承認設定の例](#per-level-approvals)
+ [行ごとの承認設定の例](#per-line-approvals)
+ [レベルごとと行ごとの承認設定を組み合わせた例](#combined-approval-levels)

## レベルごとの承認設定の例
<a name="per-level-approvals"></a>

次のイメージに示されたレベルごとの承認レベル設定では、3 つの承認が必要です。これらの承認は、承認者として指定された IAM ユーザー、グループ、ロールを自由に組み合わせて行うことができます。指定された承認者には、2 人の IAM ユーザー (John Stiles と Ana Carolina Silva)、3 人のメンバーを含むユーザーグループ (`GroupOfThree`)、10 人のユーザーを代表するユーザーロール (`RoleOfTen`) が含まれます。

`GroupOfThree` グループ内の 3 人のユーザー全員が変更リクエストを承認すると、そのレベルで変更リクエストが承認されます。各ユーザー、グループ、ロールの承認を受け取る必要はありません。承認の最小数は、指定した承認者を任意に組み合わせて得ることができます。Change Manager オペレーションでは、レベルごとの承認を使用することをお勧めします。

![\[3 人の承認が必要で、4 人の承認者が指定されていることを示す承認レベルです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/Add-approval-2.png)


次のサンプルは、この構成の YAML コードの一部を示しています。

**注記**  
このバージョンの YAML コードには、追加の入力である `MinRequiredApprovals` (先頭が大文字の `M`) が含まれています。この入力の値は、利用可能なすべてのレビューワーから必要とされる承認数を示します。`Approvers` リスト内の各承認者の `minRequiredApprovals` (先頭が小文字の `m`) 値が `0` (ゼロ) であることにも注意してください。これは、承認者が承認全体に貢献できるが、必要ではないことを示しています。

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
      Message: Please approve this change request
      MinRequiredApprovals: 3
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 0
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 0
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 0
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 0
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

## 行ごとの承認設定の例
<a name="per-line-approvals"></a>

次のイメージに示された承認レベルの設定では、4 人の承認者が指定されています。指定された承認者には、2 人の IAM ユーザー (John Stiles と Ana Carolina Silva)、3 人のメンバーを含むユーザーグループ (`GroupOfThree`)、10 人のユーザーを代表するユーザーロール (`RoleOfTen`) が含まれます。下位互換性のために行ごとの承認がサポートされていますが、推奨されていません。

![\[行ごとに必要な 4 人の承認者を示す承認レベルです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/Add-approval-1.png)


この行ごとの承認設定で変更リクエストが承認されるには、John Stiles、Ana Carolina Silva、`GroupOfThree` グループの 1 人のメンバー、`RoleOfTen` ロールの 1 人のメンバー全員による承認が必要です。

次のサンプルは、この構成の YAML コードの一部を示しています。

**注記**  
各 `minRequiredApprovals` 承認者の値が `1` であることに注意してください。これは、各承認者から 1 つの承認が必要であることを示しています。

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 10000
    inputs:
      Message: Please approve this change request
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 1
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 1
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 1
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 1
executableRunBooks:
  - name: AWS-HelloWorld
    version: $DEFAULT
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

## レベルごとと行ごとの承認設定を組み合わせた例
<a name="combined-approval-levels"></a>

次のイメージに示されているように、レベルごとと行ごとの承認を組み合わせた設定では、レベルに 3 つの承認が指定され、明細項目の承認に 4 つの承認が指定されています。より多くの承認が必要な承認タイプが他の承認タイプよりも優先されるため、この設定では 4 つの承認が必要です。レベルごとの承認と行ごとの承認の組み合わせは推奨されていません。

![\[レベルに 3 つの承認が必要で、行に 4 つの承認が必要な承認レベルを示しています。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/Add-approval-3.png)


```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
      Message: Please approve this change request
      MinRequiredApprovals: 3
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 1
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 1
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 1
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 1
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

**Topics**
+ [変更テンプレートの承認について](cm-approvals-templates.md)
+ [ビルダーを使用した変更テンプレートの作成](change-templates-custom-builder.md)
+ [エディタを使用した変更テンプレートの作成](change-templates-custom-editor.md)
+ [コマンドラインツールを使用した変更テンプレートの作成](change-templates-tools.md)

# ビルダーを使用した変更テンプレートの作成
<a name="change-templates-custom-builder"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager の変更テンプレートにビルダーを使用して、JSON または YAML 構文を使用しなくても、変更テンプレートで定義されたランブックワークフローを設定できます。オプションを指定すると、入力が、Systems Manager がランブックワークフローを実行するために使用できる YAML 形式に変換されます。

**ビルダーを使用して変更テンプレートを作成するには**

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

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

1. [**Create template**] (テンプレートの作成) をクリックします。

1. [**Name**] (名前) には、**UpdateEC2LinuxAMI** など、その目的を識別しやすくするテンプレート名を入力します。

1. [**Change template details**] (変更テンプレートの詳細) セクションで、以下を実行します。
   + [**Description**] (説明) には、作成している変更テンプレートが、いつ、どのように使用されるのかに関する簡単な説明を入力します。

     この説明は、変更リクエストを作成するユーザーが、正しい変更テンプレートを使用しているかどうかを判断するのに役立ちます。変更リクエストのレビューワーが、リクエストを承認すべきかどうかを理解するためにも役立ちます。
   + [**Change template type**] (変更テンプレートタイプ) で、標準変更テンプレートと緊急変更テンプレートのどちらを作成するかを指定します。

     緊急変更テンプレートは、AWS Systems Manager Change Calendar で使用されているカレンダー内のイベントによって変更がブロックされている場合でも、変更を行う必要がある場合に使用されます。緊急変更テンプレートから作成された変更リクエストは、指定された承認者によって承認される必要がありますが、要求された変更は、カレンダーがブロックされている場合でも実行できます。
   + [**Runbook options**] (ランブックオプション) では、変更リクエストの作成時にユーザーが選択できるランブックを指定します。ランブックは、1 つ、または複数追加することができます。その代わりに、リクエスタが使用するランブックを指定できるようにすることも可能です。いずれの場合も、変更リクエストに含めることができるランブックは 1 つだけです。
   + [**Runbook**] (ランブック) には、ユーザーがその変更リクエスト用に選択できるランブックの名前と、それらのバージョンを選択します。変更テンプレートに追加するランブックの数に関係なく、変更リクエストごとに選択できるランブックは 1 つだけです。

     上記の [**Any runbook can be used**] (任意のランブックを使用できる) を先に選択した場合は、ランブックを指定しません。
**ヒント**  
ランブックとそのバージョンを選択したら、[**View**] (表示) をクリックし、Systems Manager ドキュメントインターフェイスでランブックの内容を調べます。

1. [**Template information**] (テンプレート情報) セクションで、Markdown を使用して、この変更テンプレートから変更リクエストを作成するユーザーの情報を入力します。当社では、変更リクエストを作成するユーザーに対して含めることができる質問セットを用意していますが、代わりに他の情報や質問を追加することもできます。
**注記**  
Markdown は、ドキュメント、およびドキュメント内の個々のステップに wiki 形式の説明を追加できるようにするマークアップ言語です。Markdown の使用に関する詳細については、「[AWS での Markdown の使用](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html)」を参照してください。

   これには、変更、およびロールバック計画の一環として実行する必要がある手動ステップをリストアップするなど、承認者が各変更リクエストを許可するかどうかを判断できるように、ユーザーがその変更リクエストについて回答する質問を提供することをお勧めします。
**ヒント**  
[**Hide preview**] (プレビューを非表示)と [**Show preview**] (プレビューを表示) を切り替えて、作成しながら内容を確認します。

1. [**Change request approvals**] (変更リクエスト承認) セクションで、以下を実行します。
   + (オプション) この変更テンプレートから作成された変更リクエストを、承認者が確認せずに自動的に実行できるようにする場合は (変更凍結イベントを除く)、[**Enable auto-approval** (自動承認の有効化)] を選択します。
**注記**  
変更テンプレートで自動承認を有効にすると、レビュー担当者をバイパスする*オプション*をユーザーに提供できます。レビュー担当者は、変更リクエストの作成時に指定できます。このため、変更テンプレートでレビュー担当者のオプションを指定する必要があります。
**重要**  
変更テンプレートの自動承認を有効にすると、ユーザーは変更リクエストを実行する前にレビュー担当者によるレビューが不要なテンプレートを使用して変更リクエストを送信できます (変更凍結イベントの承認者を除く)。特定のユーザー、グループ、または IAM ロールによる自動承認リクエストの送信を制限する場合は、この目的で IAM ポリシーの条件を使用できます。詳細については、「[自動承認のランブックワークフローへのアクセスを制御する](change-manager-auto-approval-access.md)」を参照してください。
   + **[このレベルで必要な承認数]** で、この変更テンプレートから作成された変更リクエストがこのレベルで受け取る必要がある承認数を選択します。
   + 必須の第 1 レベルの承認者を追加するには、[**Add approver** (承認者を追加)] を選択した後、以下のいずれかを選択します。
     + **Template specified approvers (テンプレートで指定された承認者)** – この変更テンプレートから作成された変更リクエストを承認するために、アカウントからユーザー、グループ、または AWS Identity and Access Management (IAM) ロールを 1 つ以上選択します。このテンプレートを使用して作成された変更リクエストはいずれも、指定された各承認者によって確認および承認される必要があります。
     + **Request specified approvers** (リクエストで指定された承認者) – 変更リクエストを作成するユーザーがリクエストの作成時にレビューワーを指定します。レビューワーは、アカウント内のユーザーのリストから選択できます。

       [**Required**] (必須) 列に入力する数字は、この変更テンプレートを使用する変更リクエストによって指定される必要があるレビューワーの人数を決定します。
**重要**  
2023 年 1 月 23 日より前は、**[ビルダー]** タブでは、行ごとの承認のみの指定がサポートされていました。**[ビルダー]** タブを使用して既存の変更テンプレートに追加する新しい変更テンプレートと新しいレベルは、レベルごとの承認のみをサポートしています。Change Manager オペレーションでは、レベルごとの承認のみを使用することをお勧めします。  
詳細については、「[変更テンプレートの承認について](cm-approvals-templates.md)」を参照してください。
   + [**SNS topic to notify approvers**] (承認者に通知する SNS トピック) には、以下を実行します。

     1. 次のいずれかを選択して、アカウント内の Amazon Simple Notification Service (Amazon SNS) トピックを指定します。これは、変更リクエストがレビューできることを承認者に通知を送信するときに使用されます。
        + **Enter an SNS Amazon Resource Name (ARN)**(SNS Amazon リソースネーム (ARN) を入力) – [**Topic ARN** (トピック ARN) には、既存の Amazon SNS トピックの ARN を入力します。このトピックは、組織のどのアカウントのものでも使用できます。
        + **Select an existing SNS topic (既存の SNS トピックを選択)** – **[Target notification topic] (ターゲット通知トピック)** には、現在の AWS アカウント にある既存の Amazon SNS トピックの ARN を選択します。(このオプションは、現在の AWS アカウント と AWS リージョン で Amazon SNS トピックをまだ作成していない場合は使用できません)。
        + **Specify SNS topic when the change request is created**(変更リクエストの作成時に SNS トピックを指定) – 変更リクエストを作成するユーザーが、通知に使用する Amazon SNS トピックを指定できます。
**注記**  
選択する Amazon SNS トピックは、送信する通知とその送信先のサブスクライバーを指定するように設定されている必要があります。Amazon SNアクセスポリシーは、Change Manager が通知を送信できるように、Systems Manager にアクセス許可も付与する必要があります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

     1. [**Add notification**] (通知を追加) をクリックします。

1.  (オプション) 承認者のレベルを追加するには、[**Add approval level**] (承認レベルを追加) をクリックし、このレベルのテンプレートで指定された承認者とリクエストで指定された承認者の中から選択します。次に、このレベルの承認者に通知する SNS トピックを選択します。

   第 1 レベルの承認者がすべての承認を受信すると、第 2 レベルの承認者に通知され、という流れをたどります。

   各テンプレートには、最大 5 レベルの承認者を追加できます。例えば、第 1 レベルでは技術ロールのユーザーの承認を求め、次に 2 番目のレベルでは管理職の承認を求めることができます。

1. [**Monitoring**] (モニタリング) セクションの [**CloudWatch alarm to monitor**] (監視する CloudWatch アラーム) に、このテンプレートに基づくランブックワークフローの進行状況を監視するための、現在のアカウントにある Amazon CloudWatch アラームの名前を入力します。
**ヒント**  
新しいアラームを作成する、または指定するアラームの設定を確認するには、[**Open the Amazon CloudWatch console**] (Amazon CloudWatch コンソールを開く) をクリックします。CloudWatch アラームの使用の詳細については、*Amazon CloudWatch ユーザーガイド*の「[CloudWatch アラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。

1. [**Notifications**] (通知) セクションで、以下を実行します。

   1. 次のいずれかを選択して、アカウント内の Amazon SNS トピックを指定します。これは、この変更テンプレートを使用して作成された変更リクエストに関する通知を送信するために使用されます。
      + **Enter an SNS Amazon Resource Name (ARN)**(SNS Amazon リソースネーム (ARN) を入力) – [**Topic ARN** (トピック ARN) には、既存の Amazon SNS トピックの ARN を入力します。このトピックは、組織のどのアカウントのものでも使用できます。
      + **Select an existing SNS topic (既存の SNS トピックを選択)** – **[Target notification topic] (ターゲット通知トピック)** には、現在の AWS アカウント にある既存の Amazon SNS トピックの ARN を選択します。(このオプションは、現在の AWS アカウント と AWS リージョン で Amazon SNS トピックをまだ作成していない場合は使用できません)。
**注記**  
選択する Amazon SNS トピックは、送信する通知とその送信先のサブスクライバーを指定するように設定されている必要があります。Amazon SNアクセスポリシーは、Change Manager が通知を送信できるように、Systems Manager にアクセス許可も付与する必要があります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

   1. [**Add notification**] (通知を追加) をクリックします。

1. (オプション) [**Tags**] (タグ) セクションで、変更テンプレートにタグキーの名前/値ペアを 1 つ、または複数適用します。

   タグは、リソースに割り当てるオプションのメタデータです。タグを使用することで、目的、所有者、または環境などの異なる方法でリソースを分類できます。例えば、変更テンプレートが実行する変更のタイプと、実行される環境を特定するために、タグを付けることができます。この場合、以下のキーの名前と値のペアを指定します。
   + `Key=TaskType,Value=InstanceRepair`
   + `Key=Environment,Value=Production`

1. [**Save and preview**] (保存してプレビュー) をクリックします。

1. 作成する変更テンプレートの詳細を確認します。

   レビューのために送信する前に変更テンプレートを変更したい場合は、[**Actions、Edit**] (アクション、編集) と選択します。

   変更テンプレートの内容に問題がなければ、**[Submit for Review] (レビューのために送信)** をクリックします。Change Manager の [**Settings**] (設定) タブでテンプレートレビューワーとして指定された組織またはアカウント内のユーザーに、新しい変更テンプレートのレビューが保留中であることが通知されます。

   Amazon SNS トピックが変更テンプレートで指定されている場合、変更テンプレートが拒否または承認されたときに通知が送信されます。この変更テンプレートに関連する通知が届かない場合は、後ほど Change Manager に戻って、そのステータスを確認できます。

# エディタを使用した変更テンプレートの作成
<a name="change-templates-custom-editor"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

コンソールコントロールを使用する代わりに JSON または YAML を入力して、AWS Systems Manager のツールである Change Manager に変更テンプレートを設定するには、このトピックの手順を実行します。

**エディタを使用して変更テンプレートを作成するには**

1. ナビゲーションペインで、**Change Manager** を選択します。

1. [**Create template**] (テンプレートの作成) をクリックします。

1. [**Name**] (名前) には、**RestartEC2LinuxInstance** など、その目的を識別しやすくするテンプレート名を入力します。

1. 上記の [**Change template details**] (変更テンプレートの詳細) で [**Editor**] (エディタ) を選択します。

1. [**Document editor**] (ドキュメントエディタ) セクションで [**Edit**] (編集) をクリックしてから、変更テンプレートの JSON コンテンツ、または YAML コンテンツを入力します。

   以下に例を示します。
**注記**  
パラメータ `minRequiredApprovals` は、このテンプレートを使用して作成された変更リクエストを承認する必要がある、指定されたレベルのレビュー担当者の数を指定するために使用されます。  
この例では、2 つのレベルの承認を示しています。承認レベルは最大 5 つまで指定できますが、必要なレベルは 1 つだけです。  
最初のレベルでは、特定のユーザー「John-Doe」が各変更リクエストを承認する必要があります。その後、IAM ロール `Admin` のいずれか 3 名のメンバーが変更リクエストを承認する必要があります。  
変更テンプレートの承認の詳細については、「[変更テンプレートの承認について](cm-approvals-templates.md)」を参照してください。

------
#### [ YAML ]

   ```
   description: >-
     This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld.
   templateInformation: >
     ### Document Name: HelloWorldChangeTemplate
   
     ## What does this document do?
   
     This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld.
   
     ## Input Parameters
   
     * ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for
     approvers.
   
     * Approver: (Required) The name of the approver to send this request to.
   
     * ApproverType: (Required) The type of reviewer.
       * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser
   
     ## Output Parameters
   
     This document has no outputs
   schemaVersion: '0.3'
   parameters:
     ApproverSnsTopicArn:
       type: String
       description: Amazon Simple Notification Service ARN for approvers.
     Approver:
       type: String
       description: IAM approver
     ApproverType:
       type: String
       description: >-
         Approver types for the request. Allowed values include IamUser, IamGroup,
         IamRole, SSOGroup, and SSOUser.
   executableRunBooks:
     - name: AWS-HelloWorld
       version: '1'
   emergencyChange: false
   autoApprovable: false
   mainSteps:
     - name: ApproveAction1
       action: 'aws:approve'
       timeoutSeconds: 3600
       inputs:
         Message: >-
           A sample change request has been submitted for your review in Change
           Manager. You can approve or reject this request.
         EnhancedApprovals:
           NotificationArn: '{{ ApproverSnsTopicArn }}'
           Approvers:
             - approver: John-Doe
               type: IamUser
               minRequiredApprovals: 1
     - name: ApproveAction2
       action: 'aws:approve'
       timeoutSeconds: 3600
       inputs:
         Message: >-
           A sample change request has been submitted for your review in Change
           Manager. You can approve or reject this request.
         EnhancedApprovals:
           NotificationArn: '{{ ApproverSnsTopicArn }}'
           Approvers:
             - approver: Admin
               type: IamRole
               minRequiredApprovals: 3
   ```

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

   ```
   {
      "description": "This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld",
      "templateInformation": "### Document Name: HelloWorldChangeTemplate\n\n
       ## What does this document do?\n
       This change template demonstrates the feature set available for creating change templates for Change Manager. 
       This template starts a Runbook workflow for the Automation runbook called AWS-HelloWorld.\n\n
       ## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n
       * Approver: (Required) The name of the approver to send this request to.\n
       * ApproverType: (Required) The type of reviewer.  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n
       ## Output Parameters\nThis document has no outputs\n",
      "schemaVersion": "0.3",
      "parameters": {
         "ApproverSnsTopicArn": {
            "type": "String",
            "description": "Amazon Simple Notification Service ARN for approvers."
         },
         "Approver": {
            "type": "String",
            "description": "IAM approver"
         },
         "ApproverType": {
            "type": "String",
            "description": "Approver types for the request. Allowed values include IamUser, IamGroup, IamRole, SSOGroup, and SSOUser."
         }
      },
      "executableRunBooks": [
         {
            "name": "AWS-HelloWorld",
            "version": "1"
         }
      ],
      "emergencyChange": false,
      "autoApprovable": false,
      "mainSteps": [
         {
            "name": "ApproveAction1",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "John-Doe",
                        "type": "IamUser",
                        "minRequiredApprovals": 1
                     }
                  ]
               }
            }
         },
           {
            "name": "ApproveAction2",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "Admin",
                        "type": "IamRole",
                        "minRequiredApprovals": 3                  
                     }
                  ]
               }
            }
         }
      ]
   }
   ```

------

1. [**Save and preview**] (保存してプレビュー) をクリックします。

1. 作成する変更テンプレートの詳細を確認します。

   レビューのために送信する前に変更テンプレートを変更したい場合は、[**Actions、Edit**] (アクション、編集) と選択します。

   変更テンプレートの内容に問題がなければ、**[Submit for Review] (レビューのために送信)** をクリックします。Change Manager の [**Settings**] (設定) タブでテンプレートレビューワーとして指定された組織またはアカウント内のユーザーに、新しい変更テンプレートのレビューが保留中であることが通知されます。

   Amazon Simple Notification Service (Amazon SNS) トピックが変更テンプレートで指定されている場合、変更テンプレートが拒否または承認されたときに通知が送信されます。この変更テンプレートに関連する通知が届かない場合は、後ほど Change Manager に戻って、そのステータスを確認できます。

# コマンドラインツールを使用した変更テンプレートの作成
<a name="change-templates-tools"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

以下の手順では、AWS Command Line Interface (AWS CLI) (Linux、macOS、または Windows Server の場合) または AWS Tools for Windows PowerShell を使用して、AWS Systems Manager のツールである Change Manager で変更リクエストを作成する方法について説明します。

**変更テンプレートを作成するには**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. ローカルマシンに `MyChangeTemplate.json` などの名前の JSON ファイルを作成してから、変更テンプレートのコンテンツを貼り付けます。
**注記**  
変更テンプレートは、オートメーションランブックと同じサポートのすべてが含まれていないスキーマ 0.3 のバージョンを使用します。

   以下に例を示します。
**注記**  
パラメータ `minRequiredApprovals` は、このテンプレートを使用して作成された変更リクエストを承認する必要がある、指定されたレベルのレビュー担当者の数を指定するために使用されます。  
この例では、2 つのレベルの承認を示しています。承認レベルは最大 5 つまで指定できますが、必要なレベルは 1 つだけです。  
最初のレベルでは、特定のユーザー「John-Doe」が各変更リクエストを承認する必要があります。その後、IAM ロール `Admin` のいずれか 3 名のメンバーが変更リクエストを承認する必要があります。  
変更テンプレートの承認の詳細については、「[変更テンプレートの承認について](cm-approvals-templates.md)」を参照してください。

   ```
   {
      "description": "This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld",
      "templateInformation": "### Document Name: HelloWorldChangeTemplate\n\n
       ## What does this document do?\n
       This change template demonstrates the feature set available for creating change templates for Change Manager. 
       This template starts a Runbook workflow for the Automation runbook called AWS-HelloWorld.\n\n
       ## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n
       * Approver: (Required) The name of the approver to send this request to.\n
       * ApproverType: (Required) The type of reviewer.  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n
       ## Output Parameters\nThis document has no outputs\n",
      "schemaVersion": "0.3",
      "parameters": {
         "ApproverSnsTopicArn": {
            "type": "String",
            "description": "Amazon Simple Notification Service ARN for approvers."
         },
         "Approver": {
            "type": "String",
            "description": "IAM approver"
         },
         "ApproverType": {
            "type": "String",
            "description": "Approver types for the request. Allowed values include IamUser, IamGroup, IamRole, SSOGroup, and SSOUser."
         }
      },
      "executableRunBooks": [
         {
            "name": "AWS-HelloWorld",
            "version": "1"
         }
      ],
      "emergencyChange": false,
      "autoApprovable": false,
      "mainSteps": [
         {
            "name": "ApproveAction1",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "John-Doe",
                        "type": "IamUser",
                        "minRequiredApprovals": 1
                     }
                  ]
               }
            }
         },
           {
            "name": "ApproveAction2",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "Admin",
                        "type": "IamRole",
                        "minRequiredApprovals": 3                  
                     }
                  ]
               }
            }
         }
      ]
   }
   ```

1. 次のコマンドを実行して、変更テンプレートを作成します。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-document \
       --name MyChangeTemplate \
       --document-format JSON \
       --document-type Automation.ChangeTemplate \
       --content file://MyChangeTemplate.json \
       --tags Key=tag-key,Value=tag-value
   ```

------
#### [ Windows ]

   ```
   aws ssm create-document ^
       --name MyChangeTemplate ^
       --document-format JSON ^
       --document-type Automation.ChangeTemplate ^
       --content file://MyChangeTemplate.json ^
       --tags Key=tag-key,Value=tag-value
   ```

------
#### [ PowerShell ]

   ```
   $json = Get-Content -Path "C:\path\to\file\MyChangeTemplate.json" | Out-String
   New-SSMDocument `
       -Content $json `
       -Name "MyChangeTemplate" `
       -DocumentType "Automation.ChangeTemplate" `
       -Tags "Key=tag-key,Value=tag-value"
   ```

------

   指定できるオプションの詳細については、「[https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html)」を参照してください。

   システムが以下のような情報をレスポンスします。

   ```
   {
      "DocumentDescription":{
         "CreatedDate":1.585061751738E9,
         "DefaultVersion":"1",
         "Description":"Use this template to update an EC2 Linux AMI. Requires one
         approver specified in the template and an approver specified in the request.",
         "DocumentFormat":"JSON",
         "DocumentType":"Automation",
         "DocumentVersion":"1",
         "Hash":"0d3d879b3ca072e03c12638d0255ebd004d2c65bd318f8354fcde820dEXAMPLE",
         "HashType":"Sha256",
         "LatestVersion":"1",
         "Name":"MyChangeTemplate",
         "Owner":"123456789012",
         "Parameters":[
            {
               "DefaultValue":"",
               "Description":"Level one approvers",
               "Name":"LevelOneApprovers",
               "Type":"String"
            },
            {
               "DefaultValue":"",
               "Description":"Level one approver type",
               "Name":"LevelOneApproverType",
               "Type":"String"
            },
      "cloudWatchMonitors": {
         "monitors": [
            "my-cloudwatch-alarm"
         ]
      }
         ],
         "PlatformTypes":[
            "Windows",
            "Linux"
         ],
         "SchemaVersion":"0.3",
         "Status":"Creating",
         "Tags":[
   
         ]
      }
   }
   ```

Change Manager の [**Settings**] (設定) タブでテンプレートレビューワーとして指定された組織またはアカウント内のユーザーに、新しい変更テンプレートのレビューが保留中であることが通知されます。

Amazon Simple Notification Service (Amazon SNS) トピックが変更テンプレートで指定されている場合、変更テンプレートが拒否または承認されたときに通知が送信されます。この変更テンプレートに関連する通知が届かない場合は、後ほど Change Manager に戻って、そのステータスを確認できます。

# 変更テンプレートの確認と、承認または拒否
<a name="change-templates-review"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager で変更テンプレートのレビューワーとして指定されている場合、新しい変更テンプレートまたは変更テンプレートの新しいバージョンが確認待ちであるときに通知を受け取ります。Amazon Simple Notification Service (Amazon SNS) トピックから通知が送信されます。

**注記**  
この機能は、変更テンプレート確認通知の送信に Amazon SNS トピックを使用するようにアカウントが設定されているかどうかにより異なります。テンプレートレビューワーの通知トピックの指定に関する情報については、「[タスク 1: Change Managerユーザー ID 管理とテンプレートレビューワーの設定](change-manager-account-setup.md#cm-configure-account-task-1)」を参照してください。

変更テンプレートをレビューするには、通知に記載されているリンクを開き、AWS マネジメントコンソール にサインインして、この手順のステップに従います。

**変更テンプレートを確認して承認または却下するには**

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

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

1. [**Overview**] (概要) タブの [**Change templates**] (変更テンプレート) セクションで、[**Pending review**] (レビュー待ち) の番号を選択します。

1. [**Change templates**] (変更テンプレート) のリストで、確認する変更テンプレートの名前を見つけて選択します。

1. [Summary] (概要) ページで、提案された変更テンプレートのコンテンツを確認して、以下のいずれかを実行します。
   + 変更テンプレートを承認し、変更リクエストで使用できるようにするには、[**Approve**] (承認) を選択します。
   + 変更テンプレートを拒否し、変更リクエストで使用できないようにするには、[**Reject**] (拒否] を選択します。

# 変更テンプレートの削除
<a name="change-templates-delete"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

このトピックでは、Systems Manager のツールである Change Manager で作成したテンプレートを削除する方法について説明します。組織で Change Manager を使用している場合、この手順は委任された管理者アカウントで実行します。

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

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

1. [**Templates (テンプレート)**] タブを選択します。

1. 削除するテンプレートの名前を選択します。

1. [**アクション、テンプレートの削除**] を選択します。

1. 確認ダイアログに「**DELETE**」という語を入力してから、[**削除**] を選択します。

# 変更リクエストの使用
<a name="change-requests"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

変更リクエストは、AWS またはオンプレミス環境の 1 つ以上のリソースを更新する Automation ランブックを実行するための Change Manager のリクエストです。変更リクエストは、変更テンプレートを使用して作成されます。

AWS Systems Manager のツールである Change Manager で変更リクエストを作成する場合、組織またはアカウント内の 1 人以上の承認者がリクエストを確認して承認する必要があります。必要な承認がなければ、リクエストされた変更を実施するランブックワークフローの実行は許可されません。

**Topics**
+ [変更リクエストの作成](change-requests-create.md)
+ [変更リクエストの確認と、承認または拒否](change-requests-review.md)

# 変更リクエストの作成
<a name="change-requests-create"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager で変更リクエストを作成すると、選択する変更テンプレートでは通常次の処理が行われます。
+ 変更リクエストの承認者を指定する、または必要な承認の数を指定する
+ 変更リクエストについて承認者に通知するために使用する Amazon Simple Notification Service (Amazon SNS) トピックを指定します。
+ Amazon CloudWatch アラームを指定して、変更リクエストのランブックワークフローをモニタリングします
+ リクエストされた変更を行うために選択できるオートメーションランブックを特定する

変更テンプレートは、使用する独自のオートメーションランブックを指定して、誰がリクエストのレビューと承認を行うかを指定できるように設定されている場合もあります。

**重要**  
組織全体で Change Manager を使用する場合は、常に委任管理者アカウントから変更を行うことをお勧めします。組織内の他のアカウントから変更を行うことはできますが、それらの変更は、委任管理者アカウントで報告されず、表示することもできません。

**Topics**
+ [変更リクエストの承認について](#cm-approvals-requests)
+ [変更リクエストの作成 (コンソール)](#change-requests-create-console)
+ [変更リクエストの作成 (AWS CLI)](#change-requests-create-cli)

## 変更リクエストの承認について
<a name="cm-approvals-requests"></a>

変更テンプレートに指定された要件によっては、そのテンプレートから作成する変更リクエストは、リクエストのランブックワークフローを実行する前に、最大 5 つのレベルの承認を必要とする場合があります。これらの各レベルに関して、テンプレート作成者は最大 5 人の潜在的な承認者を指定できます。承認者は 1 人のユーザーに限定されません。この意味での承認者は、IAM グループまたは IAM ロールとすることもできます。IAM グループと IAM ロールでは、そのグループまたはロールに属する 1 人以上のユーザーが、変更リクエストに必要な承認の総数の受け取りに対して、承認を提供することができます。テンプレート作成者は、変更テンプレートに必要な数よりも多くの承認者を指定することもできます。

**オリジナルの承認ワークフローと更新および/または承認**  
2023 年 1 月 23 日より前に作成された変更テンプレートを使用する場合、変更リクエストをそのレベルで承認するには、指定された各承認者から承認を受ける必要があります。例えば、次のイメージに示された承認レベルの設定では、4 人の承認者が指定されています。指定承認者には、2 人のユーザー (John Stiles と Ana Carolina Silva)、3 人のメンバーで構成されたユーザーグループ (GroupOfThree)、10 人のユーザーを代表するユーザーロール (RoleOfTen) が含まれます。

![\[行ごとに必要な 4 人の承認者を示す承認レベルです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/Add-approval-1.png)


このレベルで変更リクエストが承認されるには、John Stiles、Ana Carolina Silva、`GroupOfThree` グループの 1 人のメンバー、`RoleOfTen` ロールの 1 人のメンバーによる承認が必要です。

テンプレート作成者は、2023 年 1 月 23 日以降に作成された変更テンプレートを使用して、承認レベルごとに必要な承認の総数を指定できます。これらの承認は、承認者として指定されたユーザー、グループ、ロールを自由に組み合わせて行うことができます。変更テンプレートでは、1 つのレベルに対して 1 つの承認しか必要としませんが、例えば、2 人の個人ユーザー、2 つのグループ、1 人のロールを潜在的な承認者として指定できます。

例えば、次のイメージに示された承認レベルエリアでは、3 つの承認が必要です。テンプレートで指定された承認者には、2 人のユーザー (John Stiles と Ana Carolina Silva)、3 人のメンバーを含むユーザーグループ (`GroupOfThree`)、10 人のユーザーを代表するユーザーロール (`RoleOfTen`) が含まれます。

![\[3 人の承認が必要で、4 人の承認者が指定されていることを示す承認レベルです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/Add-approval-2.png)


`GroupOfThree` グループ内の 3 人のユーザー全員が変更リクエストを承認すると、そのレベルで変更リクエストが承認されます。各ユーザー、グループ、ロールの承認を受け取る必要はありません。承認の最小数は、潜在的な承認者を任意に組み合わせて得ることができます。

変更リクエストが作成されると、そのレベルの承認通知対象として指定されている Amazon SNS トピックのサブスクライバーに通知が送信されます。変更テンプレートの作成者が、使用する必要のある通知トピックを指定したか、指定を許可した可能性があります。

任意のレベルで必要最小限の承認が受理されると、次のレベルの Amazon SNS トピックのサブスクライバーに通知が送信され、以降も同様に通知が送信されます。

承認レベルと承認者がいくつ指定されていても、そのリクエストのランブックワークフローの発生を防ぐには、変更リクエストを 1 回却下するだけで済みます。

## 変更リクエストの作成 (コンソール)
<a name="change-requests-create-console"></a>

次の手順では、Systems Manager コンソールを使用して変更リクエストを作成する方法について説明します。

**変更リクエストを作成するには（コンソール）**

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

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

1. [**Create request**] (リクエストを作成) をクリックします。

1. この変更リクエストに使用する変更テンプレートを検索して選択します。

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

1. [**Name**] (名前) には、**UpdateEC2LinuxAMI-us-east-2** など、その目的を識別しやすくする変更リクエストの名前を入力します。

1. [**Runbook**] (ランブック) には、リクエストした変更を行うために使用するランブックを選択します。
**注記**  
ランブックを選択するオプションが利用できなくなっている場合は、使用する必要があるランブックが変更テンプレートの作成者によって指定されています。

1. [**Change request information**] (変更リクエストの情報) には、Markdown を使用して、変更リクエストに関する追加情報を提供します。これは、レビューワーが変更リクエストを承認するか拒否するかを決定するために役立ちます。使用しているテンプレートの作成者が、指示、または回答する質問を提供している場合もあります。
**注記**  
Markdown は、ドキュメント、およびドキュメント内の個々のステップに wiki 形式の説明を追加できるようにするマークアップ言語です。Markdown の使用に関する詳細については、「[AWS での Markdown の使用](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html)」を参照してください。

1. [**Workflow start time**] (ワークフロー開始時刻) セクションで、以下のいずれかを選択します。
   + **スケジュールされた時刻にオペレーションを実行する** – [**Requested start time**] (リクエストされた開始時刻) には、このリクエストのランブックワークフローの実行について提案する日付と時刻を入力します。[**Estimated end time**] (予想終了時間) で、ランブックワークフローが完了する予想日時を入力します。(この時間は、レビュー担当者に伝える予想に過ぎません。)
**ヒント**  
[**View Change Calendar**] (変更カレンダーを表示) をクリックして、指定した時刻にブロッキングイベントがないかどうかをチェックします。
   + **Run the operation as soon as possible after approval** (承認後、できるだけ早くオペレーションを実行する) – 変更リクエストが承認されると、変更を行うことができる無制限期間になり次第、ランブックワークフローが実行されます。

1. [**Change request approvals**] (変更リクエスト承認) セクションで、以下を実行します。

   1. **承認タイプ**オプションを表示するには、以下のいずれかを選択します。
      + **自動承認** - 選択した変更テンプレートは、変更リクエストを自動的に実行できるように設定され、承認者の確認は不要です。ステップ 11 に進みます。
**注記**  
Systems Manager の使用を管理する IAM ポリシーで指定されているアクセス許可は、自動承認の変更リクエストを自動的に実行するために送信することを制限してはなりません。
      + **承認者の指定** — この変更リクエストを確認および承認するには、単一または複数のユーザー、グループ、または IAM ロールを追加する必要があります。
**注記**  
Systems Manager の使用を管理する IAM ポリシーで指定されているアクセス許可によって、自動承認変更リクエストを実行できる場合でも、レビュー担当者を指定できます。

   1. [**Add approver** (承認者を追加)] をクリックして、利用可能なレビュー担当者のリストから単一または複数のユーザー、グループ、またはまたは AWS Identity and Access Management (IAM) ロールを選択します。
**注記**  
1 人、または複数人の承認者が既に指定されている場合があります。これは、選択した変更テンプレートに、必須の承認者が既に指定されていることを意味します。これらの承認者をリクエストから削除することはできません。**[承認者を追加]** ボタンが有効になっていない場合は、選択したテンプレートでリクエストへのレビューワーの追加が許可されていません。

      変更リクエストの承認の詳細については、「[変更リクエストの承認について](#cm-approvals-requests)」を参照してください。

   1. [**SNS topic to notify approvers**] (承認者に通知する SNS トピック) で以下のいずれかを選択して、この変更リクエストに追加している承認者への通知の送信に使用される、アカウント内の Amazon SNS トピックを指定します。
**注記**  
Amazon SNS トピックを指定するオプションが利用できなくなっている場合、選択した変更テンプレートで、使用する Amazon SNS トピックが既に指定されています。
      + **Enter an SNS Amazon Resource Name (ARN)**(SNS Amazon リソースネーム (ARN) を入力) – [**Topic ARN** (トピック ARN) には、既存の Amazon SNS トピックの ARN を入力します。このトピックは、組織のどのアカウントのものでも使用できます。
      + **Select an existing SNS topic** (既存の SNS トピックを選択) – [**Target notification topic**] (ターゲット通知トピック) には、現在のアカウントにある既存の Amazon SNS トピックの ARN を選択します。(このオプションは、現在の AWS アカウント と AWS リージョン で Amazon SNS トピックをまだ作成していない場合は使用できません)。
**注記**  
選択する Amazon SNS トピックは、送信する通知とその送信先のサブスクライバーを指定するように設定されている必要があります。Amazon SNアクセスポリシーは、Change Manager が通知を送信できるように、Systems Manager にアクセス許可も付与する必要があります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

   1. [**Add notification**] (通知を追加) をクリックします。

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

1. [**IAM role** (IAM ロール)] では、この変更リクエストに指定されたランブックの実行に必要な許可を持つ、*現在のアカウント*の IAM ロールを選択します。

   このロールは、オートメーションのサービスロール (または assume ロール) と呼ばれることもあります。このロールの詳細については、「[オートメーションの設定](automation-setup.md)」を参照してください。

1. [**Deployment location**] (デプロイの場所) セクションで、以下のいずれかを選択します。
**注記**  
AWS Organizations でセットアップされた組織ではなく、単一の AWS アカウント アカウントのみで Change Manager を使用している場合、デプロイ先を指定する必要はありません。
   + **Apply change to this account** (このアカウントに変更を適用) – ランブックワークフローは現在のアカウントのみで実行されます。組織の場合、これは委任管理者アカウントを意味します。
   + **Apply change to multiple organizational units (OUs)** (複数の組織単位 (OU) に変更を適用) – 以下を実行します。

     1. [**Accounts and organizational units (OUs)**] (アカウントと組織単位 (OU)) には、組織内のメンバーアカウントの ID を **123456789012** 形式で入力、または組織単位の ID を **o-o96EXAMPLE** 形式で入力します。

     1. (オプション) [**Execution role name**] (実行ロール名) に、*ターゲットアカウント*、またはこの変更リクエストに指定されているランブックを実行するために必要な許可を持つ OU の IAM ロールの名前を入力します。このロールの名前は、指定した OU 内のすべてのアカウントが同じ名前を使用する必要があります。

     1. (オプション) 指定する追加のアカウント、または OU ごとに [**Add another target location**] (別のターゲットロケーションを追加する) を選択して、ステップ a と b を繰り返します。

     1. [**ターゲット AWS リージョン]** には、米国東部 (オハイオ) の `Ohio (us-east-2)` など、変更を行うリージョンを選択します。

     1. [**Rate control**] (レート制御) を展開します。

        [**Concurrency**] (同時実行値) に数値を入力して、それがランブックワークフローを同時に実行できるアカウントの数と割合のどちらを表しているかをリストから選択します。

        [**Error threshold**] (エラーしきい値) に数値を入力して、それが操作の停止までにランブックワークフローが失敗できるアカウントの数と割合のどちらを表しているかをリストから選択します。

1. [**Deployment targets**] (デプロイターゲット) セクションで、以下を実行します。

   1. 次のいずれかを選択します。
      + **Single resource** (単一のリソース) – 変更は 1 つのリソースにしか行われません。例えば、この変更リクエストのランブックで定義されている操作に応じて、これは 1 つのノード、または 1 つの Amazon Machine Image (AMI) になります。
      + **Multiple resources** (複数のリソース) – [**Parameter**] (パラメータ) には、この変更リクエストのランブックからの利用可能なパラメータから選択します。この選択は、更新されるリソースのタイプを反映します。

        例えば、この変更リクエストのランブックが `AWS-RetartEC2Instance` である場合は、`InstanceId` を選択してから、以下を選択することで、どのインスタンスが更新されるのかを定義します。
        + **Specify tags** (タグを指定する) – 更新されるすべてのリソースに付けられるタグのキーバリューペアを入力します。
        + [**Choose a resource group**] (リソースグループを選択する) – 更新されるすべてのリソースが属するリソースグループの名前を選択します。
        + **Specify parameter values** (パラメータ値を指定する) – [**Runbook parameters**] (ランブックのパラメータ) セクションで更新するリソースを特定します。
        + **Target all instances** (すべてのインスタンスをターゲットにする) – ターゲットロケーションにあるすべてのマネージドノードで変更を行います。

   1. [**Multiple resources**] (複数のリソース) を選択した場合は、[**Rate control**] (レート制御) を展開します。

      [**Concurrency**] (同時実行値) に数値を入力して、ランブックワークフローが同時に更新できるターゲットの数と割合のどちらを表しているかをリストから選択します。

      [**Error threshold**] (エラーしきい値) に数値を入力して、操作の停止までに更新が失敗できるターゲットの数と割合のどちらを表しているかをリストから選択します。

1. 前のステップで、複数のリソースを更新するために [**Specify parameter values**] (パラメータ値を指定する) を選択した場合: [**Runbook parameters**] (ランブックのパラメータ) セクションで、必要な入力パラメータの値を指定します。指定する必要があるパラメータ値は、選択した変更テンプレートに関連付けられたオートメーションランブックの内容に基づきます。

   例えば、変更テンプレートが `AWS-RetartEC2Instance` ランブックを使用する場合、[**instanceId**] パラメータには 1 つ、または複数のインスタンス ID を入力する必要があります。または、[**Show interactive instance picker**] (インタラクティブなインスタンスピッカーを表示) を選択して、利用可能なインスタンスを 1 つずつ選択します。

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

1. [**Review and submit**] (レビューして送信) ページで、この変更リクエストに指定したリソースとオプションを再確認します。

   変更を行うすべてのセクションの [**Edit**] (編集) ボタンをクリックします。

   変更リクエストの内容に問題がなければ、[**Submit for approval**] (承認のために送信) をクリックします。

リクエスト用に選択した変更テンプレートで Amazon SNS トピックが指定されている場合は、リクエストが拒否または承認されたときに通知が送信されます。リクエストの通知が届かない場合は、Change Manager に戻って、リクエストのステータスを確認できます。

## 変更リクエストの作成 (AWS CLI)
<a name="change-requests-create-cli"></a>

変更リクエストを作成するには、AWS Command Line Interface(AWS CLI) を使用して、変更リクエストのオプションとパラメータを JSON ファイルで指定し、`--cli-input-json` オプションを使用してコマンドに含めることができます。

**変更リクエストを作成するには (AWS CLI)**

1. まだ AWS CLI または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。

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

1. `MyChangeRequest.json` などの名前でローカルマシンに JSON ファイルを作成し、次の内容を貼り付けます。

   変更リクエストの値で*プレースホルダー*を置き換えます。
**注記**  
このサンプル JSON では、`AWS-HelloWorldChangeTemplate` 変更テンプレートおよび `AWS-HelloWorld` ランブックを使用して変更リクエストを作成します。このサンプルを独自の変更リクエストに適用するには、「*AWS Systems Manager API リファレンス*」で「[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html)」を参照してください。使用可能なすべてのパラメータに関する情報が掲載されています。  
変更リクエストの承認の詳細については、「[変更リクエストの承認について](#cm-approvals-requests)」を参照してください。

   ```
   {
       "ChangeRequestName": "MyChangeRequest",
       "DocumentName": "AWS-HelloWorldChangeTemplate",
       "DocumentVersion": "$DEFAULT",
       "ScheduledTime": "2021-12-30T03:00:00",
       "ScheduledEndTime": "2021-12-30T03:05:00",
       "Tags": [
           {
               "Key": "Purpose",
               "Value": "Testing"
           }
       ],
       "Parameters": {
           "Approver": [
               "JohnDoe"
           ],
           "ApproverType": [
               "IamUser"
           ],
           "ApproverSnsTopicArn": [
               "arn:aws:sns:us-east-2:123456789012:MyNotificationTopic"
           ]
       },
       "Runbooks": [
           {
               "DocumentName": "AWS-HelloWorld",
               "DocumentVersion": "1",
               "MaxConcurrency": "1",
               "MaxErrors": "1",
               "Parameters": {
                   "AutomationAssumeRole": [
                       "arn:aws:iam::123456789012:role/MyChangeManagerAssumeRole"
                   ]
               }
           }
       ],
       "ChangeDetails": "### Document Name: HelloWorldChangeTemplate\n\n## What does this document do?\nThis change template demonstrates the feature set available for creating change templates for Change Manager. This template starts a Runbook workflow for the Automation document called AWS-HelloWorld.\n\n## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n* Approver: (Required) The name of the approver to send this request to.\n* ApproverType: (Required) The type of reviewer.\n  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n## Output Parameters\nThis document has no outputs \n"
   }
   ```

1. JSON ファイルを作成したディレクトリで、次のコマンドを実行します。

   ```
   aws ssm start-change-request-execution --cli-input-json file://MyChangeRequest.json
   ```

   システムが以下のような情報をレスポンスします。

   ```
   {
       "AutomationExecutionId": "b3c1357a-5756-4839-8617-2d2a4EXAMPLE"
   }
   ```

# 変更リクエストの確認と、承認または拒否
<a name="change-requests-review"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager で変更リクエストのレビューワーとして指定されている場合、新しい変更リクエストが確認待ちであるときに、Amazon Simple Notification Service (Amazon SNS) トピックを通じて通知を受け取ります。

**注記**  
この機能は、変更テンプレートで、確認通知を送信するために Amazon SNS が指定されているかどうかによって異なります。詳細については、[Change Manager 通知用の Amazon SNS トピックの設定](change-manager-sns-setup.md) を参照してください。

変更リクエストをレビューするには、通知に記載されているリンクを開く、または AWS マネジメントコンソール に直接サインインして、この手順のステップに従うことができます。

**注記**  
Amazon SNS トピックが変更テンプレートのレビューワーに割り当てられている場合、変更リクエストのステータスが変更されたときに、トピックのサブスクライバーに通知が送信されます。  
変更リクエストの承認の詳細については、「[変更リクエストの承認について](change-requests-create.md#cm-approvals-requests)」を参照してください。

## 変更リクエストの確認と、承認または拒否 (コンソール)
<a name="change-requests-review-console"></a>

次の手順では、Systems Manager コンソールを使用して変更リクエストを確認して承認または拒否する方法について説明します。

**1 つの変更リクエストを確認して承認または却下するには**

1. 受け取った E メール通知のリンクを開き、AWS マネジメントコンソール にサインインすると、レビューする変更リクエストに移動します。

1. [Summary] (概要) ページで、提案された変更リクエストの内容を確認します。

   変更リクエストを承認するには、[**承認**] を選択します。この承認に追加するコメントをダイアログボックスに入力してから、[**Approve**] (承認) をクリックします。このリクエストによって提示されるランブックワークフローの実行は、スケジュールされている日時に開始、または変更を妨げる制限がなくなり次第開始されます。

   -または-

   変更リクエストを拒否するには、[**Reject**] (却下) を選択します。この拒否に追加するコメントをダイアログボックスに入力してから、[**Reject**] (拒否) をクリックします。

**複数の変更リクエストを一括で確認して承認または却下するには**

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

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

1. [**Approvals**] (承認) タブを選択します。

1. (オプション) 各リクエストの名前を選択してユーザーの承認待ちのリクエストの詳細を確認し、[**Approvals**] (承認) タブに戻ります。

1. 承認する各変更リクエストのチェックボックスを選択します。

   -または-

   拒否する各変更リクエストのチェックボックスを選択します。

1. この承認または居にに関するコメントをダイアログボックスに入力します。

1. 選択した変更リクエストを承認するか拒否するかに応じて、[**承認**] または [**拒否**] を選択します。

## 変更リクエストの確認と、承認または拒否 (コマンドライン)
<a name="change-requests-review-command-line"></a>

次の手順では、(Linux、macOS または Windows Server で) AWS Command Line Interface (AWS CLI) を使用して変更リクエストをレビューし、承認または拒否する方法を説明します。

**変更リクエストを確認して承認または却下するには**

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

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

1. ローカルマシンで、AWS CLI コールのパラメータを指定する JSON ファイルを作成します。

   ```
   {
     "OpsItemFilters": 
     [
       {
         "Key": "OpsItemType",
         "Values": ["/aws/changerequest"],
         "Operator": "Equal"
       }
     ],
     "MaxResults": number
   }
   ```

   JSON ファイルに承認者の Amazon リソースネーム (ARN) を指定することで、特定の承認者の結果をフィルタリングできます。以下はその例です。

   ```
   {
     "OpsItemFilters": 
     [
       {
         "Key": "OpsItemType",
         "Values": ["/aws/changerequest"],
         "Operator": "Equal"
       },
       {
         "Key": "ChangeRequestByApproverArn",
         "Values": ["arn:aws:iam::account-id:user/user-name"],
         "Operator": "Equal"
       }
     ],
     "MaxResults": number
   }
   ```

1. JSON ファイルに指定した変更リクエストの最大数を表示するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-ops-items \
   --cli-input-json file://filename.json
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-ops-items ^
   --cli-input-json file://filename.json
   ```

------

1. 次のコマンドを実行して、変更リクエストを承認または拒否します。

------
#### [ Linux & macOS ]

   ```
   aws ssm send-automation-signal \
       --automation-execution-id ID \
       --signal-type Approve_or_Reject \
       --payload Comment="message"
   ```

------
#### [ Windows ]

   ```
   aws ssm send-automation-signal ^
   --automation-execution-id ID ^
       --signal-type Approve_or_Reject ^
       --payload Comment="message"
   ```

------

   リクエスト用に選択した変更テンプレートで Amazon SNS トピックが指定されている場合は、リクエストが拒否または承認されたときに通知が送信されます。リクエストの通知が届かない場合は、Change Manager に戻って、リクエストのステータスを確認できます。このコマンドを使用するときのその他のオプションの詳細については、AWS CLI コマンドリファレンスの「AWS Systems Manager」セクションの「[https://docs.aws.amazon.com/cli/latest/reference/ssm/send-automation-signal.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/send-automation-signal.html)」を参照してください。

# 変更リクエストの詳細、タスク、およびタイムラインの確認 (コンソール)
<a name="reviewing-changes"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager のダッシュボードで、変更リクエストに関する情報 (変更処理済みのリクエストを含む) を表示できます。これらの詳細情報には、変更を行うランブックを実行するオートメーションオペレーションへのリンクが含まれます。オートメーション実行 ID はリクエストの作成時に生成されますが、プロセスは、すべての承認が付与され、変更を妨げる制限がなくなるまで実行されません。

**変更リクエストの詳細、タスク、タイムラインを確認するには**

1. ナビゲーションペインで、**Change Manager** を選択します。

1. [**Requests**] (リクエスト) タブを選択します。

1. [**Change requests**] (変更リクエスト) セクションで、確認する変更リクエストを検索します。

   検索結果は、[**Create date range**] (作成日付の範囲) オプションを使用して特定の期間に制限することができます。

   以下のプロパティを使ってリクエストをフィルタリングできます。
   + `Status`
   + `Request ID`
   + `Approver`
   + `Requester`

   例えば、過去 24 時間に正常に完了したすべての変更リクエストの詳細を表示するには、以下を実行します。

   1. [**Create date range**] (作成日付の範囲) で [**1d**] を選択します。

   1. 検索ボックスで、[**Status, CompletedWithSuccess**] (ステータス、CompletedWithSuccess) の順に選択します。

   1. 検索結果から正常に完了した変更リクエストの名前を選択して、結果を確認します。

1. 次のタブに変更リクエストに関する情報を表示します。
   + [**Request details**] (リクエストの詳細) – リクエスタ、変更テンプレート、および変更用に選択したオートメーションランブックなどの変更リクエストに関する基本的な詳細情報を表示します。また、オートメーションオペレーションの詳細へのリンクを開いて、リクエストで指定されているランブックパラメータ、変更リクエストに割り当てられた Amazon CloudWatch アラーム、およびそのリクエストに提供された承認とコメントに関する情報を表示することもできます。
   + **Task** (タスク) – 完了した変更リクエストのタスクステータス、ターゲットリソース、関連するオートメーションランブック内のステップ、および同時実行値とエラーしきい値の詳細など、変更におけるタスクに関する情報を表示します。
   + **Timeline** (タイムライン) – 日時順にリストされた変更リクエストに関連するすべてのイベントの概要を表示します。概要には、変更リクエストが作成された日時、割り当てられた承認者によるアクション、承認された変更リクエストの実行がスケジュールされている日時に関するメモ、ランブックワークフローの詳細、および変更プロセスの全体とランブックの各ステップに関するステータス変更が表示されます。
   + **関連付けられたイベント** – [AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) に記録された変更リクエストに関する監査可能な詳細を表示します。詳細には、実行された API アクション、それらアクションに含まれるリクエストパラメータ、アクションを実行したユーザーアカウント、プロセス中に更新されたリソースなどが含まれています。

     CloudTrail Lake イベントトラッキングを有効にすると、CloudTrail Lake に変更リクエストに関連するイベントのイベントデータストアが作成されます。変更リクエストを実行したアカウントまたは組織はイベントの詳細を確認できます。CloudTrail Lake イベントトラッキングは、アカウントまたは組織のどの変更リクエストからでも有効にできます。CloudTrail Lake 統合の有効化とイベントデータストアの作成については、「[変更リクエストイベントのモニタリング](monitoring-change-request-events.md)」を参照してください。
**注記**  
**CloudTrail Lake** の使用には料金がかかります。詳細については、「[AWS CloudTrail 料金表](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

# 変更リクエストの集計数の表示 (コマンドライン)
<a name="change-requests-review-aggregate-command-line"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

[GetOpsSummary](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetOpsSummary.html) API オペレーションを使用すると、AWS Systems Manager のツールである Change Manager で変更リクエストの集計数を表示できます。この API オペレーションは、単一 AWS リージョン 内の単一の AWS アカウント、または複数のアカウントと複数のリージョンに関する集計数を返します。

**注記**  
複数の AWS アカウント と複数の AWS リージョン に関する変更リクエストの集計数を表示するには、リソースデータ同期をセットアップして設定する必要があります。詳細については、「[インベントリのリソースデータ同期を作成する](inventory-create-resource-data-sync.md)」を参照してください。

次の手順には、変更要求の集計数を表示するために (Linux、macOS または Windows Server で) AWS Command Line Interface (AWS CLI) を使用する方法が説明されています。

**変更リクエストの集計数を表示するには**

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

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

1. 以下のコマンドのいずれかを実行します。

   **単一のアカウントとリージョン**

   このコマンドは、AWS CLI セッションが設定されている AWS アカウント と AWS リージョン に対するすべての変更リクエストの数を返します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
   --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
   --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
   --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
   --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   このコールは、以下のような情報を返します。

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "38",
                               "Status": "Open"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

   **複数のアカウントおよび/またはリージョン**

   このコマンドは、リソースデータ同期に指定されている AWS アカウント と AWS リージョン のすべての変更リクエストの数を返します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   このコールは、以下のような情報を返します。

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "43",
                               "Status": "Open"
                           },
                           {
                               "Count": "2",
                               "Status": "Resolved"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

   **複数のアカウントと特定のリージョン**

   このコマンドは、リソースデータ同期に指定されている AWS アカウント のすべての変更リクエストの数を返します。返されるのはコマンドで指定されたリージョンからのデータのみです。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.SourceRegion,Values='Region',Type=Equal Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.SourceRegion,Values='Region',Type=Equal Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   **複数のアカウントとリージョン (出力をリージョンごとに分類)**

   このコマンドは、リソースデータ同期に指定されている AWS アカウント と AWS リージョン のすべての変更リクエストの数を返します。出力には、リージョンごとの集計数情報が表示されます。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]'
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]'
   ```

------

   このコールは、以下のような情報を返します。

   ```
   {
           "Entities": [
               {
                   "Data": {
                       "AWS:OpsItem": {
                           "Content": [
                               {
                                   "Count": "38",
                                   "SourceRegion": "us-east-1",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "4",
                                   "SourceRegion": "us-east-2",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "1",
                                   "SourceRegion": "us-west-1",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "2",
                                   "SourceRegion": "us-east-2",
                                   "Status": "Resolved"
                               }
                           ]
                       }
                   }
               }
           ]
       }
   ```

   **複数のアカウントとリージョン (出力をアカウントおよびリージョンごとに分類)**

   このコマンドは、リソースデータ同期に指定されている AWS アカウント と AWS リージョン のすべての変更リクエストの数を返します。出力は、集計数情報をアカウントおよびリージョン別に分類します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceAccountId","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]}]'
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceAccountId","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]}]'
   ```

------

   このコールは、以下のような情報を返します。

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "38",
                               "SourceAccountId": "123456789012",
                               "SourceRegion": "us-east-1",
                               "Status": "Open"
                           },
                           {
                               "Count": "4",
                               "SourceAccountId": "111122223333",
                               "SourceRegion": "us-east-2",
                               "Status": "Open"
                           },
                           {
                               "Count": "1",
                               "SourceAccountId": "111122223333",
                               "SourceRegion": "us-west-1",
                               "Status": "Open"
                           },
                           {
                               "Count": "2",
                               "SourceAccountId": "444455556666",
                               "SourceRegion": "us-east-2",
                               "Status": "Resolved"
                           },
                           {
                               "Count": "1",
                               "SourceAccountId": "222222222222",
                               "SourceRegion": "us-east-1",
                               "Status": "Open"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

# Change Manager アクティビティの監査とログ記録
<a name="change-manager-auditing"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

Amazon CloudWatch と AWS CloudTrail アラームを使用して、AWS Systems Manager のツールである Change Manager でアクティビティを監査できます。

Systems Manager の監査とログ記録のオプションに関する詳細については、「[AWS Systems Manager でのログ記録とモニタリング](monitoring.md)」を参照してください。

## CloudWatch アラームを使用した Change Manager アクティビティの監査
<a name="change-manager-logging-auditing-alarms"></a>

CloudWatch アラームを設定して、変更テンプレートに割り当てることができます。アラームで定義された条件のいずれかが満たされると、そのアラームに指定されたアクションが実行されます。アラームの設定では、アラーム条件が満たされたときに通知する Amazon Simple Notification Service (Amazon SNS) トピックを指定できます。

Change Managerテンプレートの作成に関する詳細については、「[変更テンプレートの使用](change-templates.md)」を参照してください。

CloudWatch アラームの作成の詳細については、*Amazon CloudWatch ユーザーガイド*の「[CloudWatch アラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。

## CloudTrail を使用した Change Manager アクティビティの監査
<a name="change-manager-logging-auditing-cloudtrail"></a>

CloudTrail は、Systems Manager コンソール、AWS Command Line Interface (AWS CLI)、およびSystems Manager SDK で実行された API 呼び出しをキャプチャします。情報は、この情報が保存されている CloudTrail コンソールまたは Amazon Simple Storage Service (Amazon S3) バケットで確認できます。アカウントのすべての CloudTrail ログに対して 1 つのバケットが使用されています。

Change Manager アクションのログには、変更テンプレートドキュメントの作成、変更テンプレートおよび変更リクエストの承認と拒否、オートメーションランブックによって生成されたアクティビティなどが表示されます。Systems Manager アクティビティの CloudTrail ログの表示と使用の詳細については、「[AWS CloudTrail による AWS Systems Manager API コールのログ記録](monitoring-cloudtrail-logs.md)」を参照してください。

# Change Manager のトラブルシューティング
<a name="change-manager-troubleshooting"></a>

**Change Manager の可用性の変更**  
AWS Systems ManagerChange Manager は、2025 年 11 月 7 日以降、新規のお客様の受付を終了します。Change Manager を使用する場合は、その日付の前にサインアップしてください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Change Manager の可用性の変更](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html)」を参照してください。

AWS Systems Manager のツールである Change Manager を使用したトラブルシューティングでは、以下の情報を使用します。

**Topics**
+ [Active Directory (グループの使用時における変更リクエストの承認中に発生する「グループ *\$1GUID\$1* が見つかりません」エラー](#change-manager-troubleshooting-sso)

## Active Directory (グループの使用時における変更リクエストの承認中に発生する「グループ *\$1GUID\$1* が見つかりません」エラー
<a name="change-manager-troubleshooting-sso"></a>

**問題**: ユーザー ID 管理に AWS IAM アイデンティティセンター (IAM Identity Center) を使用するとき、承認許可が付与された Active Directory グループのメンバーに「承認されていません」または「グループが見つかりません」というエラーが Change Manager に表示されます。
+ **解決策**: AWS マネジメントコンソール へのアクセスのために IAM Identity Center で Active Directory グループを選択すると、これらの Active Directory グループからの情報を IAM Identity Center にコピーする定期的な同期がスケジュールされます。このプロセスは、Active Directory グループメンバーシップを通じて承認されたユーザーがリクエストを正常に承認する前に完了しておく必要があります。詳細については、*AWS IAM アイデンティティセンター ユーザーガイド*の「[Microsoft AD directory に接続する](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-ad.html)」を参照してください。

# AWS Systems Manager ドキュメント
<a name="documents"></a>

AWS Systems Manager ドキュメント (SSM ドキュメント) は、Systems Manager がマネージドインスタンスで実行するアクションを定義します。Systems Manager には、ランタイムでパラメータを指定して使用できる事前設定済みのドキュメントが 100 件以上含まれています。Systems Manager のドキュメントコンソールの、**[Owned by Amazon]** (Amazon 所有) タブを選択するか、`ListDocuments` API オペレーションを呼び出す際に `Owner` フィルターで Amazon を指定することで、事前設定済みのドキュメントを確認できます。ドキュメントは JavaScript Object Notation (JSON) や YAML を使用し、これにはユーザーが指定するパラメータおよびステップが含まれます。

セキュリティを強化するため、SSM ドキュメントでは、2025 年 7 月 14 日からパラメータ処理時に環境変数補間がサポートされるようになりました。この機能はスキーマバージョン 2.2 および SSM Agent バージョン 3.3.2746.0 以降で利用でき、コマンドインジェクション攻撃の防止に役立ちます。

SSM ドキュメントの使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com/systems-manager/documents)を開きます。ナビゲーションペインで、**[ドキュメント]** を選択します。

**重要**  
Systems Manager において、*Amazon 所有*の SSM ドキュメントとは、Amazon Web Services 自体によって作成および管理されているドキュメントです。*Amazon 所有*のドキュメントでは、ドキュメント名に `AWS-*` のようなプレフィックスが含まれます。ドキュメントの所有者は、AWS 内の特定のユーザーアカウントではなく Amazon と見なされます。これらのドキュメントは公開されており、誰でも使用できます。

## ドキュメントツールには自社の組織にどのようなメリットがありますか?
<a name="ssm-docs-benefits"></a>

AWS Systems Manager のツールであるドキュメントには以下のメリットがあります。
+ **ドキュメントのカテゴリ**

  必要なドキュメントを検索しやすくするには、検索するドキュメントの種類に応じてカテゴリを選択します。検索範囲を広げる場合は、同じドキュメントタイプに対して複数のカテゴリを選択できます。異なるドキュメントタイプに関するカテゴリの選択はサポートされていません。カテゴリーは、Amazon が所有するドキュメントでのみ使用できます。
+  **ドキュメントのバージョン** 

  ドキュメントの異なるバージョンを作成して保存できます。その後、各ドキュメントのデフォルトのバージョンを指定できます。ドキュメントのデフォルトバージョンは、新しいバージョンに更新したり、古いバージョンのドキュメントに戻すことができます。ドキュメントのコンテンツを変更すると、Systems Manager は自動的にドキュメントのバージョンを増やします。コンソール、AWS Command Line Interface (AWS CLI) コマンド、または API コールでドキュメントバージョンを指定することで、ドキュメントの任意のバージョンを取得または使用できます。
+  **必要に応じてドキュメントをカスタマイズする** 

  ドキュメントのステップやアクションをカスタマイズする場合は、独自のドキュメントを作成できます。システムが、それが作成された AWS リージョン 内の AWS アカウント により、ドキュメントを保存します。SSM ドキュメントの作成方法の詳細については、「[SSM ドキュメントコンテンツを作成する](documents-creating-content.md)」を参照してください。
+  **タグのドキュメント** 

  ドキュメントにタグを付けると、そのタグに基づいてドキュメントをすばやく識別できます。たとえば、特定の環境、部門、ユーザー、グループ、または期間でドキュメントをタグ付けできます。ユーザーやグループがアクセスできるタグを指定する AWS Identity and Access Management (IAM) ポリシーを作成することで、ドキュメントへのアクセスを制限することもできます。
+  **ドキュメントの共有** 

  ドキュメントを公開するか、または同じ AWS リージョン の特定の AWS アカウント と共有できます。例えば、顧客または従業員に提供するすべての Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに同じ設定を適用したい場合などは、アカウント間でドキュメントを共有すると便利です。これは、インスタンス上のアプリケーションまたはパッチを最新の状態に保つことに加えて、顧客のインスタンスで特定のアクティビティを拒否したい場合にも利用できます。または、組織全体の従業員アカウントで使用されているインスタンスに、特定の内部リソースへのアクセス許可が確実に付与されるようにする場合があります。詳細については、「[SSM ドキュメントの共有](documents-ssm-sharing.md)」を参照してください。

## ドキュメントを使用すべきユーザー
<a name="documents-who"></a>
+ 大規模な運用での効率改善、手動による介入が原因で起きうるエラー数の削減、一般的な問題の解決までの時間の短縮などに、AWS Systems Manager ツールの使用をお考えのすべてのお客様。
+ デプロイおよび設定タスクを自動化しようとするインフラストラクチャの専門家。
+ 一般的な問題の確実な解決、トラブルシューティングの効率向上、および反復処理の削減を希望する管理者。
+ 通常手動で実行しているタスクの自動化を目指すユーザー。

## SSM ドキュメントの種類について教えてください。
<a name="what-are-document-types"></a>

次の表に、各タイプの SSM ドキュメントと、それらの用途についての説明を示します。


****  

| タイプ | 以下で使用 | 詳細 | 
| --- | --- | --- | 
|  ApplicationConfiguration ApplicationConfigurationSchema  |   [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html)   |  AWS Systems Manager のツールである AWS AppConfig を使用すると、アプリケーション設定を作成、管理し、迅速にデプロイできます。`ApplicationConfiguration` ドキュメントタイプを使用するドキュメントを作成することにより、設定データを SSM ドキュメントに保存できます。詳細については、「*AWS AppConfig ユーザーガイド*」の「[Freeform configurations](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#free-form-configurations)」(自由形式の設定) を参照してください。 SSM ドキュメントで設定を作成する場合は、対応する JSON スキーマを指定する必要があります。スキーマは `ApplicationConfigurationSchema` ドキュメントタイプを使用し、一連のルールと同様に、各アプリケーション構成設定で許可されるプロパティを定義します。詳細については、「*AWS AppConfig ユーザーガイド*」の「[About validators](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile-validators.html)」(バリデーターについて) を参照してください。  | 
|  Automation ランブック  |   [オートメーション](systems-manager-automation.md)   [State Manager](systems-manager-state.md)   [Maintenance Windows](maintenance-windows.md)   |  Amazon Machine Image (AMI) の作成や更新など、一般的なメンテナンスやデプロイメントタスクを実行する際に、Automation ランブックを使用します。State Manager は、Automation ランブックを使用して設定を適用します。これらのアクションは、インスタンスのライフサイクル中いつでも 1 つ、または複数のターゲットで実行できます。Maintenance Windowsは、指定されたスケジュールに基づいた一般的なメンテナンスタスクとデプロイメントタスクの実行に Automation ランブックを使用します。 Linux ベースのオペレーティングシステム用にサポートされているAutomation ランブックはすべて、macOS 向けの EC2 インスタンスでもサポートされています。  | 
|  Change Calendar ドキュメント  |   [Change Calendar](systems-manager-change-calendar.md)   |  AWS Systems Manager のツールである Change Calendar は、`ChangeCalendar` ドキュメントタイプを使用します。Change Calendar ドキュメントには、Automation アクションによる環境の変更を許可または禁止できるカレンダーエントリと関連するイベントが保存されます。Change Calendar では、ドキュメントに [iCalendar 2.0](https://icalendar.org/) データがプレーンテキスト形式で保存されます。 Change Calendar は、macOS の EC2 インスタンスではサポートされていません。  | 
|  AWS CloudFormation テンプレート  |   [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)   |  AWS CloudFormation テンプレートは、CloudFormation スタックでプロビジョニングするリソースについて記述します。CloudFormation テンプレートを Systems Manager のドキュメントとして保存すると、Systems Manager のドキュメント機能のメリットを活用できます。これには、複数のバージョンのテンプレートの作成と比較、同じ AWS リージョン の他のアカウントとのテンプレートの共有が含まれます。 Systems Manager のツールである Application Manager を使用して、CloudFormation テンプレートとスタックを作成して編集できます。詳細については、「[Application Manager での CloudFormation テンプレートとスタックの使用](application-manager-working-stacks.md)」を参照してください。  | 
|  コマンドのドキュメント  |   [Run Command](run-command.md)   [State Manager](systems-manager-state.md)   [Maintenance Windows](maintenance-windows.md)   |  AWS Systems Manager のツールである Run Command は、コマンドドキュメントを使用してコマンドを実行します。AWS Systems Manager のツールである State Manager は、コマンドドキュメントを使用して設定を適用します。これらのアクションは、インスタンスのライフサイクル中にいつでも、1 つまたは複数のターゲットで実行できます。AWS Systems Manager のツールである Maintenance Windows は、指定されたスケジュールに基づいて設定を適用するためにコマンドドキュメントを使用します。 ほとんどのコマンドドキュメントは、Systems Manager でサポートされているすべての Linux および Windows Server オペレーティングシステムでサポートされています。macOS 向けの EC2 インスタンスでは、以下のコマンドドキュメントがサポートされています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/documents.html)  | 
|  AWS Config コンフォーマンスパックテンプレート  |   [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)   |  AWS Config コンフォーマンスパックテンプレートは YAML 形式のドキュメントで、AWS Config マネージドルールまたはカスタムルールおよび修復アクションのリストを含むコンフォーマンスパックを作成するために使用されます。 詳細については、「[コンフォーマンスパック](https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html)」を参照してください。  | 
|  パッケージドキュメント  |   [Distributor](distributor.md)   |  AWS Systems Manager のツールである Distributor では、パッケージは、SSM ドキュメントで表されます。パッケージドキュメントには、マネージドインスタンスにインストールするソフトウェアまたはアセットを含む添付 ZIP アーカイブファイルが含まれています。Distributor でパッケージを作成するパッケージドキュメントを作成します。 Distributor は、Oracle Linux および macOS マネージドインスタンスではサポートされていません。  | 
|  ポリシードキュメント  |   [State Manager](systems-manager-state.md)   |  AWS Systems Manager のツールである Inventory では、`AWS-GatherSoftwareInventory` ポリシードキュメントと State Manager の関連付けを使って、マネージドインスタンスからインベントリデータを収集します。独自の SSM ドキュメントを作成するときは、Automation ランブックとコマンドドキュメントがマネージドインスタンスへのポリシーの適用に推奨される方法です。 Systems Manager Inventory と `AWS-GatherSoftwareInventory` ポリシードキュメントは、Systems Manager のサポート対象のすべてのオペレーティングシステムでサポートされています。  | 
|  インシデント後分析テンプレート  |   [Incident Manager インシデント後分析](https://docs.aws.amazon.com/incident-manager/latest/userguide/analysis.html)   |  Incident Manager は、インシデント後分析テンプレートを使用して、AWS オペレーション管理のベストプラクティスに基づいて分析を作成します。 御社のチームは、テンプレートを使用して作成した分析を、インシデント対応での改善点を特定するために使用できます。  | 
|  セッションドキュメント  |   [Session Manager](session-manager.md)   |  AWS Systems Manager のツールである Session Manager は、セッションドキュメントを使用して、ポート転送セッション、インタラクティブコマンドを実行するセッション、SSH トンネルを作成するセッションなど、開始するセッションのタイプを決定します。 セッションドキュメントは、Systems Manager でサポートされているすべての Linux および Windows Server オペレーティングシステムでサポートされています。macOS 向けの EC2 インスタンスでは、以下のコマンドドキュメントがサポートされています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/documents.html)  | 

**SSM ドキュメントクォータ**  
SSM ドキュメントのクォータの詳細については、「Amazon Web Services 全般のリファレンス」の「[Systems Manager Service Quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。

**Topics**
+ [ドキュメントツールには自社の組織にどのようなメリットがありますか?](#ssm-docs-benefits)
+ [ドキュメントを使用すべきユーザー](#documents-who)
+ [SSM ドキュメントの種類について教えてください。](#what-are-document-types)
+ [ドキュメントコンポーネント](documents-components.md)
+ [SSM ドキュメントコンテンツを作成する](documents-creating-content.md)
+ [ドキュメントでの作業](documents-using.md)
+ [パラメータ処理の問題のトラブルシューティング](parameter-troubleshooting.md)

# ドキュメントコンポーネント
<a name="documents-components"></a>

このセクションには、SSM ドキュメントを構成するコンポーネントに関する情報が含まれます。

**Topics**
+ [スキーマ、機能、および例](documents-schemas-features.md)
+ [データ要素とパラメータ](documents-syntax-data-elements-parameters.md)
+ [コマンドドキュメントプラグインリファレンス](documents-command-ssm-plugin-reference.md)

# スキーマ、機能、および例
<a name="documents-schemas-features"></a>

AWS Systems Manager (SSM) ドキュメントでは以下のスキーマバージョンを使用しています。
+ `Command` タイプのドキュメントは、スキーマバージョン 1.2、2.0 および 2.2 を使用できます。使用しているドキュメントがスキーマ 1.2 である場合は、スキーマバージョン 2.2 を使用するドキュメントを作成することをお勧めします。
+ `Policy` タイプのドキュメントは、スキーマバージョン 2.0 以降を使用する必要があります。
+ `Automation` タイプのドキュメントは、スキーマバージョン 0.3 を使用する必要があります。
+ `Session` タイプのドキュメントは、スキーマバージョン 1.0 を使用する必要があります。
+ JSON あるいは YAML でドキュメントを作成できます。

`Session` ドキュメントスキーマの詳細については、「[セッションドキュメントスキーマ](session-manager-schema.md)」を参照してください。

`Command` および `Policy` ドキュメントで最新バージョンのスキーマを使用することで、次の機能を利用できます。


**スキーマバージョン 2.2 ドキュメントの機能**  

| 機能 | 詳細 | 
| --- | --- | 
|  ドキュメントの編集  |  ドキュメントは更新可能になりました。バージョン 1.2 では、ドキュメントを更新した場合に別の名前で保存する必要がありました。  | 
|  バージョンの自動管理  |  ドキュメントを更新すると新しいバージョンが作成されます。これはスキーマのバージョンではなく、ドキュメントのバージョンです。  | 
|  デフォルトバージョン  |  ドキュメントに複数のバージョンがある場合、どのバージョンがデフォルトのドキュメントかを指定できます。  | 
|  順序付け  |  ドキュメントのプラグインまたは*ステップ*を指定した順序で実行します。  | 
|  クロスプラットフォームのサポート  |  クロスプラットフォームをサポートすることで、同じ SSM ドキュメント内で異なるプラグインに異なるオペレーティングシステムを指定できます。クロスプラットフォームのサポートはステップ内の `precondition` パラメータを使用します。  | 
| パラメータ補間 | 補間とは、文字列に変数値を挿入または置換することを意味します。文字列を使用する前に、実際の値で空白を埋めるものと考えてください。SSM ドキュメントのコンテキストでは、パラメータ補間により、コマンドを実行する前に文字列パラメータを環境変数に対して補間することができるため、コマンドインジェクションに対するセキュリティを高めることができます。`ENV_VAR` に設定すると、エージェントは、パラメータの値を含む `SSM_parameter-name` という名前の環境変数を作成します。 | 

**注記**  
新しい Systems Manager 機能および SSM ドキュメント機能を使用するには、インスタンスの AWS Systems Manager SSM Agent を常に最新バージョンに更新しておく必要があります。詳細については、「[Run Command を使用して SSM Agent を更新する](run-command-tutorial-update-software.md#rc-console-agentexample)」を参照してください。

次の表はスキーマのメジャーバージョン間の相違点の一覧です。


****  

| バージョン 1.2 | バージョン 2.2 (最新バージョン) | 詳細 | 
| --- | --- | --- | 
|  runtimeConfig  |  mainSteps  |  バージョン 2.2 では、`mainSteps` の代わりに `runtimeConfig` セクションを使用します。`mainSteps` セクションでは、Systems Manager でステップを順番に実行できます。  | 
|  プロパティ  |  inputs  |  バージョン 2.2 では、`inputs` セクションの代わりに `properties` セクションを使用します。`inputs` セクションは、ステップのパラメータを受け入れます。  | 
|  commands  |  runCommand  |  バージョン 2.2 では、`inputs` セクションは `runCommand` パラメータを使用します。`commands` パラメータは使用しません。  | 
|  id  |  action  |  バージョン 2.2 では、`Action` の代わりに `ID` を使用します。これは名前のみの変更です。  | 
|  該当なし  |  name  |  バージョン 2.2 では、`name` はステップの任意のユーザー定義名です。  | 

**前提条件パラメータを使用する**  
スキーマバージョン 2.2 以降では、`precondition` パラメータを使用して、各プラグインのターゲットオペレーティングシステムを指定したり、SSM ドキュメントで定義した入力パラメータを検証したりすることができます。`precondition` パラメータは、SSM ドキュメントの入力パラメータと、`platformType`、`Linux`、および `MacOS` の値を使用する `Windows` の参照をサポートします。`StringEquals` 演算子のみがサポートされています。

スキーマバージョン 2.2 以降を使用するドキュメントの場合、`precondition` が指定されていないと、各プラグインはそのプラグインとオペレーティングシステムとの互換性に基づいて実行またはスキップされます。オペレーティングシステムとのプラグインの互換性は、`precondition` の前に評価されます。スキーマ 2.0 以前を使用するドキュメントの場合は、互換性のないプラグインはエラーをスローします。

例えば、スキーマバージョンが 2.2 のドキュメントで、`precondition` が指定されておらず `aws:runShellScript` プラグインが一覧表示されている場合、そのステップは Linux インスタンスで実行されますが、Windows Server インスタンスではシステムによってこれがスキップされます。これは、`aws:runShellScript` が Windows Server インスタンスと互換性がないためです。しかし、スキーマバージョンが 2.0 のドキュメントでは、`aws:runShellScript` プラグインを指定して、ドキュメントを Windows Server インスタンスで実行した場合、実行は失敗します。SSM ドキュメントでの前提条件パラメータの例は後でこのセクションで確認できます。

## スキーマバージョン 2.2
<a name="documents-schema-twox"></a>

**最上位の要素**  
以下の例では、スキーマバージョン 2.2 を使用した SSM ドキュメントの最上位要素を示しています。

------
#### [ YAML ]

```
---
schemaVersion: "2.2"
description: A description of the document.
parameters:
  parameter 1:
    property 1: "value"
    property 2: "value"
  parameter 2:
    property 1: "value"
    property 2: "value"
mainSteps:
  - action: Plugin name
    name: A name for the step.
    inputs:
      input 1: "value"
      input 2: "value"
      input 3: "{{ parameter 1 }}"
```

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

```
{
   "schemaVersion": "2.2",
   "description": "A description of the document.",
   "parameters": {
       "parameter 1": {
           "property 1": "value",
           "property 2": "value"
        },
        "parameter 2":{
           "property 1": "value",
           "property 2": "value"
        } 
    },
   "mainSteps": [
      {
         "action": "Plugin name",
         "name": "A name for the step.",
         "inputs": {
            "input 1": "value",
            "input 2": "value",
            "input 3": "{{ parameter 1 }}"
         }
      }
   ]
}
```

------

**スキーマバージョン 2.2 の例**  
以下の例では、`aws:runPowerShellScript` プラグインを使用してターゲットインスタンスで PowerShell コマンドを実行しています。

------
#### [ YAML ]

```
---
schemaVersion: "2.2"
description: "Example document"
parameters:
  Message:
    type: "String"
    description: "Example parameter"
    default: "Hello World"
    allowedValues: 
    - "Hello World"
mainSteps:
  - action: "aws:runPowerShellScript"
    name: "example"
    inputs:
      timeoutSeconds: '60'
      runCommand:
      - "Write-Output {{Message}}"
```

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

```
{
   "schemaVersion": "2.2",
   "description": "Example document",
   "parameters": {
      "Message": {
         "type": "String",
         "description": "Example parameter",
         "default": "Hello World",
         "allowedValues": ["Hello World"]
      }
   },
   "mainSteps": [
      {
         "action": "aws:runPowerShellScript",
         "name": "example",
         "inputs": {
            "timeoutSeconds": "60",
            "runCommand": [
               "Write-Output {{Message}}"
            ]
         }
      }
   ]
}
```

------

**スキーマバージョン 2.2 の precondition パラメータ例**  
スキーマバージョン 2.2 ではクロスプラットフォームのサポートを提供します。つまり、単一の SSM ドキュメント内で異なるプラグインに異なるオペレーティングシステムを指定できます。クロスプラットフォームのサポートは、次の例のようにステップ内で `precondition`パラメータを使用します。`precondition` パラメータは、SSM ドキュメントで定義した入力パラメータの検証にも使用できます。これは、次の例の 2 番目にあります。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: cross-platform sample
mainSteps:
- action: aws:runPowerShellScript
  name: PatchWindows
  precondition:
    StringEquals:
    - platformType
    - Windows
  inputs:
    runCommand:
    - cmds
- action: aws:runShellScript
  name: PatchLinux
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - cmds
```

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

```
{
   "schemaVersion": "2.2",
   "description": "cross-platform sample",
   "mainSteps": [
      {
         "action": "aws:runPowerShellScript",
         "name": "PatchWindows",
         "precondition": {
            "StringEquals": [
               "platformType",
               "Windows"
            ]
         },
         "inputs": {
            "runCommand": [
               "cmds"
            ]
         }
      },
      {
         "action": "aws:runShellScript",
         "name": "PatchLinux",
         "precondition": {
            "StringEquals": [
               "platformType",
               "Linux"
            ]
         },
         "inputs": {
            "runCommand": [
               "cmds"
            ]
         }
      }
   ]
}
```

------

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
parameters:
  action:
    type: String
    allowedValues:
    - Install
    - Uninstall
  confirmed:
    type: String
    allowedValues:
    - True
    - False
mainSteps:
- action: aws:runShellScript
  name: InstallAwsCLI
  precondition:
    StringEquals:
    - "{{ action }}"
    - "Install"
  inputs:
    runCommand:
    - sudo apt install aws-cli
- action: aws:runShellScript
  name: UninstallAwsCLI
  precondition:
    StringEquals:
    - "{{ action }} {{ confirmed }}"
    - "Uninstall True"
  inputs:
    runCommand:
    - sudo apt remove aws-cli
```

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

```
{
   "schemaVersion": "2.2",
   "parameters": {
      "action": {
         "type": "String",
         "allowedValues": [
            "Install",
            "Uninstall"
         ]
      },
      "confirmed": {
         "type": "String",
         "allowedValues": [
            true,
            false
         ]
      }
   },
   "mainSteps": [
      {
         "action": "aws:runShellScript",
         "name": "InstallAwsCLI",
         "precondition": {
            "StringEquals": [
               "{{ action }}",
               "Install"
            ]
         },
         "inputs": {
            "runCommand": [
               "sudo apt install aws-cli"
            ]
         }
      },
      {
         "action": "aws:runShellScript",
         "name": "UninstallAwsCLI",
         "precondition": {
            "StringEquals": [
               "{{ action }} {{ confirmed }}",
               "Uninstall True"
            ]
         },
         "inputs": {
            "runCommand": [
               "sudo apt remove aws-cli"
            ]
         }
      }
   ]
}
```

------

**SSM Agent のバージョンが 3.3.2746.0 より前である、スキーマバージョン 2.2 補間の例**  
バージョンが 3.3.2746.0 より前である SSM Agent では、エージェントは `interpolationType` パラメータを無視し、代わりに raw 文字列の置換を実行します。`SSM_parameter-name` を明示的に参照する場合は、これを明示的に設定する必要があります。次の Linux の例では、`SSM_Message` 環境変数が明示的に参照されています。

```
{
    "schemaVersion": "2.2",
    "description": "An example document",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType" : "ENV_VAR",
	     "allowedPattern: "^[^"]*$"

        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "inputs": {
            "runCommand": [
              "if [ -z "${SSM_Message+x}" ]; then",
              "    export SSM_Message=\"{{Message}}\"",
              "fi",
              "",
              "echo $SSM_Message"
            ]
        }
    }
}
```

**注記**  
SSM ドキュメントが二重中括弧 `{{ }}` を使用していない場合、`allowedPattern` は理論的には必要ありません。

**スキーマバージョン 2.2 State Manager の例**  
Systems Manager のツールである State Manager で以下の SSM ドキュメントを使用すると、ClamAV のウイルス対策ソフトウェアをダウンロードしてインストールできます。State Manager によって特定の設定が適用されます。つまり、State Manager 関連付けが実行されるごとに、ClamAV ソフトウェアがインストールされているかが、システムによってチェックされます。インストールされていない場合には、State Manager はこのドキュメントを返します。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: State Manager Bootstrap Example
parameters: {}
mainSteps:
- action: aws:runShellScript
  name: configureServer
  inputs:
    runCommand:
    - sudo yum install -y httpd24
    - sudo yum --enablerepo=epel install -y clamav
```

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

```
{
   "schemaVersion": "2.2",
   "description": "State Manager Bootstrap Example",
   "parameters": {},
   "mainSteps": [
      {
         "action": "aws:runShellScript",
         "name": "configureServer",
         "inputs": {
            "runCommand": [
               "sudo yum install -y httpd24",
               "sudo yum --enablerepo=epel install -y clamav"
            ]
         }
      }
   ]
}
```

------

**スキーマバージョン 2.2 インベントリの例**  
State Manager で以下の SSM ドキュメントを使用すると、インスタンスに関するインベントリのメタデータを収集できます。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: Software Inventory Policy Document.
parameters:
  applications:
    type: String
    default: Enabled
    description: "(Optional) Collect data for installed applications."
    allowedValues:
    - Enabled
    - Disabled
  awsComponents:
    type: String
    default: Enabled
    description: "(Optional) Collect data for AWS Components like amazon-ssm-agent."
    allowedValues:
    - Enabled
    - Disabled
  networkConfig:
    type: String
    default: Enabled
    description: "(Optional) Collect data for Network configurations."
    allowedValues:
    - Enabled
    - Disabled
  windowsUpdates:
    type: String
    default: Enabled
    description: "(Optional) Collect data for all Windows Updates."
    allowedValues:
    - Enabled
    - Disabled
  instanceDetailedInformation:
    type: String
    default: Enabled
    description: "(Optional) Collect additional information about the instance, including
      the CPU model, speed, and the number of cores, to name a few."
    allowedValues:
    - Enabled
    - Disabled
  customInventory:
    type: String
    default: Enabled
    description: "(Optional) Collect data for custom inventory."
    allowedValues:
    - Enabled
    - Disabled
mainSteps:
- action: aws:softwareInventory
  name: collectSoftwareInventoryItems
  inputs:
    applications: "{{ applications }}"
    awsComponents: "{{ awsComponents }}"
    networkConfig: "{{ networkConfig }}"
    windowsUpdates: "{{ windowsUpdates }}"
    instanceDetailedInformation: "{{ instanceDetailedInformation }}"
    customInventory: "{{ customInventory }}"
```

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

```
{
   "schemaVersion": "2.2",
   "description": "Software Inventory Policy Document.",
   "parameters": {
      "applications": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for installed applications.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "awsComponents": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for AWS Components like amazon-ssm-agent.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "networkConfig": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for Network configurations.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "windowsUpdates": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for all Windows Updates.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "instanceDetailedInformation": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect additional information about the instance, including\nthe CPU model, speed, and the number of cores, to name a few.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "customInventory": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for custom inventory.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      }
   },
   "mainSteps": [
      {
         "action": "aws:softwareInventory",
         "name": "collectSoftwareInventoryItems",
         "inputs": {
            "applications": "{{ applications }}",
            "awsComponents": "{{ awsComponents }}",
            "networkConfig": "{{ networkConfig }}",
            "windowsUpdates": "{{ windowsUpdates }}",
            "instanceDetailedInformation": "{{ instanceDetailedInformation }}",
            "customInventory": "{{ customInventory }}"
         }
      }
   ]
}
```

------

**スキーマバージョン 2.2 `AWS-ConfigureAWSPackage` の例**  
以下の例は `AWS-ConfigureAWSPackage` ドキュメントを示しています。`mainSteps` セクションの `aws:configurePackage` ステップには `action` プラグインが含まれています。

**注記**  
Linux オペレーティングシステムでは、`AmazonCloudWatchAgent` パッケージ、および `AWSSupport-EC2Rescue` パッケージのみがサポートされています。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Install or uninstall the latest version or specified version of an AWS
  package. Available packages include the following: AWSPVDriver, AwsEnaNetworkDriver,
  AwsVssComponents, and AmazonCloudWatchAgent, and AWSSupport-EC2Rescue.'
parameters:
  action:
    description: "(Required) Specify whether or not to install or uninstall the package."
    type: String
    allowedValues:
    - Install
    - Uninstall
  name:
    description: "(Required) The package to install/uninstall."
    type: String
    allowedPattern: "^arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:([a-z0-9][-.a-z0-9]{0,62})?:package\\/[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$|^[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$"
  version:
    type: String
    description: "(Optional) A specific version of the package to install or uninstall."
mainSteps:
- action: aws:configurePackage
  name: configurePackage
  inputs:
    name: "{{ name }}"
    action: "{{ action }}"
    version: "{{ version }}"
```

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

```
{
   "schemaVersion": "2.2",
   "description": "Install or uninstall the latest version or specified version of an AWS package. Available packages include the following: AWSPVDriver, AwsEnaNetworkDriver, AwsVssComponents, and AmazonCloudWatchAgent, and AWSSupport-EC2Rescue.",
   "parameters": {
      "action": {
         "description":"(Required) Specify whether or not to install or uninstall the package.",
         "type":"String",
         "allowedValues":[
            "Install",
            "Uninstall"
         ]
      },
      "name": {
         "description": "(Required) The package to install/uninstall.",
         "type": "String",
         "allowedPattern": "^arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:([a-z0-9][-.a-z0-9]{0,62})?:package\\/[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$|^[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$"
      },
      "version": {
         "type": "String",
         "description": "(Optional) A specific version of the package to install or uninstall."
      }
   },
   "mainSteps":[
      {
         "action": "aws:configurePackage",
         "name": "configurePackage",
         "inputs": {
            "name": "{{ name }}",
            "action": "{{ action }}",
            "version": "{{ version }}"
         }
      }
   ]
}
```

------

## スキーマバージョン 1.2
<a name="documents-schema-onex"></a>

次の例では、スキーマバージョン 1.2 のドキュメントの最上位要素を示します。

```
{
   "schemaVersion":"1.2",
   "description":"A description of the SSM document.",
   "parameters":{
      "parameter 1":{
         "one or more parameter properties"
      },
      "parameter 2":{
         "one or more parameter properties"
      },
      "parameter 3":{
         "one or more parameter properties"
      }
   },
   "runtimeConfig":{
      "plugin 1":{
         "properties":[
            {
               "one or more plugin properties"
            }
         ]
      }
   }
}
```

**スキーマバージョン 1.2 `aws:runShellScript` の例**  
以下の例は `AWS-RunShellScript` SSM ドキュメントを示しています。**runtimeConfig** セクションには `aws:runShellScript` プラグインが含まれます。

```
{
    "schemaVersion":"1.2",
    "description":"Run a shell script or specify the commands to run.",
    "parameters":{
        "commands":{
            "type":"StringList",
            "description":"(Required) Specify a shell script or a command to run.",
            "minItems":1,
            "displayType":"textarea"
        },
        "workingDirectory":{
            "type":"String",
            "default":"",
            "description":"(Optional) The path to the working directory on your instance.",
            "maxChars":4096
        },
        "executionTimeout":{
            "type":"String",
            "default":"3600",
            "description":"(Optional) The time in seconds for a command to complete before it is considered to have failed. Default is 3600 (1 hour). Maximum is 172800 (48 hours).",
            "allowedPattern":"([1-9][0-9]{0,3})|(1[0-9]{1,4})|(2[0-7][0-9]{1,3})|(28[0-7][0-9]{1,2})|(28800)"
        }
    },
    "runtimeConfig":{
        "aws:runShellScript":{
            "properties":[
                {
                    "id":"0.aws:runShellScript",
                    "runCommand":"{{ commands }}",
                    "workingDirectory":"{{ workingDirectory }}",
                    "timeoutSeconds":"{{ executionTimeout }}"
                }
            ]
        }
    }
}
```

## スキーマバージョン 0.3
<a name="automation-doc-syntax-examples"></a>

**最上位の要素**  
次の例では、スキーマバージョン 0.3 の Automation ランブックの最上位要素を JSON 形式で示します。

```
{
    "description": "document-description",
    "schemaVersion": "0.3",
    "assumeRole": "{{assumeRole}}",
    "parameters": {
        "parameter1": {
            "type": "String",
            "description": "parameter-1-description",
            "default": ""
        },
        "parameter2": {
            "type": "String",
            "description": "parameter-2-description",
            "default": ""
        }
    },
    "variables": {
        "variable1": {
            "type": "StringMap",
            "description": "variable-1-description",
            "default": {}
        },
        "variable2": {
            "type": "String",
            "description": "variable-2-description",
            "default": "default-value"
        }
    },
    "mainSteps": [
        {
            "name": "myStepName",
            "action": "action-name",
            "maxAttempts": 1,
            "inputs": {
                "Handler": "python-only-handler-name",
                "Runtime": "runtime-name",
                "Attachment": "script-or-zip-name"
            },
            "outputs": {
                "Name": "output-name",
                "Selector": "selector.value",
                "Type": "data-type"
            }
        }
    ],
    "files": {
        "script-or-zip-name": {
            "checksums": {
                "sha256": "checksum"
            },
            "size": 1234
        }
    }
}
```

**YAML Automation ランブックの例**  
次の例では、Automation ランブックの内容を YAML 形式で示します。このバージョン 0.3 のドキュメントスキーマの実例では、Markdown を使用してドキュメントの説明をフォーマットする方法も示しています。

```
description: >-
  ##Title: LaunchInstanceAndCheckState

  -----

  **Purpose**: This Automation runbook first launches an EC2 instance
  using the AMI ID provided in the parameter ```imageId```. The second step of
  this document continuously checks the instance status check value for the
  launched instance until the status ```ok``` is returned.


  ##Parameters:

  -----

  Name | Type | Description | Default Value

  ------------- | ------------- | ------------- | -------------

  assumeRole | String | (Optional) The ARN of the role that allows Automation to
  perform the actions on your behalf. | -

  imageId  | String | (Optional) The AMI ID to use for launching the instance.
  The default value uses the latest Amazon Linux AMI ID available. | {{
  ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 }}
schemaVersion: '0.3'
assumeRole: 'arn:aws:iam::111122223333::role/AutomationServiceRole'
parameters:
  imageId:
    type: String
    default: '{{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 }}'
    description: >-
      (Optional) The AMI ID to use for launching the instance. The default value
      uses the latest released Amazon Linux AMI ID.
  tagValue:
    type: String
    default: ' LaunchedBySsmAutomation'
    description: >-
      (Optional) The tag value to add to the instance. The default value is
      LaunchedBySsmAutomation.
  instanceType:
    type: String
    default: t2.micro
    description: >-
      (Optional) The instance type to use for the instance. The default value is
      t2.micro.
mainSteps:
  - name: LaunchEc2Instance
    action: 'aws:executeScript'
    outputs:
      - Name: payload
        Selector: $.Payload
        Type: StringMap
    inputs:
      Runtime: python3.11
      Handler: launch_instance
      Script: ''
      InputPayload:
        image_id: '{{ imageId }}'
        tag_value: '{{ tagValue }}'
        instance_type: '{{ instanceType }}'
      Attachment: launch.py
    description: >-
      **About This Step**


      This step first launches an EC2 instance using the ```aws:executeScript```
      action and the provided python script.
  - name: WaitForInstanceStatusOk
    action: 'aws:executeScript'
    inputs:
      Runtime: python3.11
      Handler: poll_instance
      Script: |-
        def poll_instance(events, context):
          import boto3
          import time

          ec2 = boto3.client('ec2')

          instance_id = events['InstanceId']

          print('[INFO] Waiting for instance status check to report ok', instance_id)

          instance_status = "null"

          while True:
            res = ec2.describe_instance_status(InstanceIds=[instance_id])

            if len(res['InstanceStatuses']) == 0:
              print("Instance status information is not available yet")
              time.sleep(5)
              continue

            instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status']

            print('[INFO] Polling to get status of the instance', instance_status)

            if instance_status == 'ok':
              break

            time.sleep(10)

          return {'Status': instance_status, 'InstanceId': instance_id}
      InputPayload: '{{ LaunchEc2Instance.payload }}'
    description: >-
      **About This Step**


      The python script continuously polls the instance status check value for
      the instance launched in Step 1 until the ```ok``` status is returned.
files:
  launch.py:
    checksums:
      sha256: 18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE
```

## 安全なパラメータ処理の例
<a name="secure-parameter-examples"></a>

ここでは、環境変数 `interpolationType` を使用した安全なパラメータ処理の例を紹介します。

### 基本的なセキュアコマンドの実行
<a name="basic-secure-command"></a>

この例は、コマンドパラメータを安全に処理する方法を示しています。

**注記**  
SSM ドキュメントが二重中括弧 `{{ }}` を使用していない場合、`allowedPattern` は理論的には必要ありません。

------
#### [ YAML ]

```
---

schemaVersion: '2.2'
description: An example document.
parameters:
  Message:
    type: String
    description: "Message to be printed"
    default: Hello
    interpolationType: ENV_VAR
    allowedPattern: "^[^"]*$"
mainSteps:
  - action: aws:runShellScript
    name: printMessage
    precondition:
      StringEquals:
        - platformType
        - Linux
    inputs:
      runCommand:
        - echo {{Message}}
```

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

```
{
    "schemaVersion": "2.2",
    "description": "An example document.",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType": "ENV_VAR",
            "allowedPattern": "^[^"]*$"
        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "precondition": {
           "StringEquals": ["platformType", "Linux"]
        },
        "inputs": {
            "runCommand": [
              "echo {{Message}}"
            ]
        }
    }]
}
```

------

### インタプリタ型言語でのパラメータの使用
<a name="interpreted-language-example"></a>

この例は、Python での安全なパラメータ処理を示しています。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Secure Python script execution'
parameters:
  inputData:
    type: String
    description: 'Input data for processing'
    interpolationType: 'ENV_VAR'
mainSteps:
  - action: aws:runPowerShellScript
    name: runPython
    inputs:
      runCommand:
        - |
          python3 -c '
          import os
          import json
          
          # Safely access parameter through environment variable
          input_data = os.environ.get("SSM_inputData", "")
          
          # Process the data
          try:
              processed_data = json.loads(input_data)
              print(f"Successfully processed: {processed_data}")
          except json.JSONDecodeError:
              print("Invalid JSON input")
          '
```

------

### 下位互換性の例
<a name="backwards-compatibility-example"></a>

この例は、下位互換性を保ちながらパラメータを安全に処理する方法を示しています。

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Backwards compatible secure parameter handling'
parameters:
  userInput:
    type: String
    description: 'User input to process'
    interpolationType: 'ENV_VAR'
    allowedPattern: '^[^"]*$'

mainSteps:
  - action: aws:runShellScript
    name: processInput
    inputs:
      runCommand:
        - |
          # Handle both modern and legacy agent versions
          if [ -z "${SSM_userInput+x}" ]; then
              # Legacy agent - fall back to direct parameter reference
              export SSM_userInput="{{userInput}}"
          fi
          
          # Process the input securely
          echo "Processing input: $SSM_userInput"
```

------

**注記**  
SSM ドキュメントが二重中括弧 `{{ }}` を使用していない場合、`allowedPattern` は理論的には必要ありません。

## パラメータのセキュリティベストプラクティス
<a name="parameter-security-best-practices"></a>

SSM ドキュメントでパラメータを処理するときは、次のベストプラクティスに従います。
+ **環境変数補間を使用する** - コマンド実行に使用する文字列パラメータには、常に `interpolationType: "ENV_VAR"` を使用します。
+ **入力検証を実装する** - `allowedPattern` を使用して、パラメータ値を安全なパターンに制限します。
+ **レガシーシステムを処理する** - 環境変数補間をサポートしていない SSM Agent の古いバージョン向けにフォールバックロジックを含めます。
+ **特殊文字をエスケープする** - コマンドにパラメータ値を使用するときは、特殊文字を適切にエスケープして、シェルによる解釈を防ぎます。
+ **パラメータスコープを制限する** - ユースケースには、できる限り制限の厳しいパラメータパターンを使用します。

# データ要素とパラメータ
<a name="documents-syntax-data-elements-parameters"></a>

このトピックでは、SSM ドキュメントで使用されるデータ要素について説明します。ドキュメントの作成に使用されるスキーマのバージョンは、ドキュメントで使用できる構文とデータ要素を定義します。コマンドドキュメントには、スキーマバージョン 2.2 以降を使用することをお勧めします。Automation ランブックはスキーマバージョン 0.3 を使用します。さらに、Automation ランブックでは、マークアップ言語である Markdown の使用がサポートされています。これにより、wiki スタイルの説明をドキュメントやドキュメント内の個々のステップに追加できます。Markdown の使用に関する詳細については、「AWS マネジメントコンソール 入門ガイド」の「[コンソールでの Markdown の使用](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html)」を参照してください。

次のセクションでは、SSM ドキュメントに含めることができるデータ要素について説明します。

## 最上位のデータ要素
<a name="top-level"></a>

**schemaVersion**  
使用するスキーマバージョン。  
型: バージョン  
必須: はい

**description**  
ドキュメントの目的を説明するために提供する情報。またこのフィールドを使用して、ドキュメントの実行にパラメータの値が必要か否か、またはパラメータの値の指定が任意か否かを指定することもできます。必須と任意のパラメータはこのトピックのサンプルをご参照ください。  
タイプ: 文字列  
必須: いいえ

**パラメータ**  
ドキュメントが許可するパラメータを定義する構造。  
文字列パラメータを処理する際のセキュリティを強化するには、`interpolationType` プロパティを指定して環境変数補間を使用します。`ENV_VAR` に設定すると、システムは、パラメータの値を含む `SSM_parameter-name` という名前の環境変数を作成します。  
次は、環境変数 `interpolationType` を使用するパラメータの例です。  

```
{
    "schemaVersion": "2.2",
    "description": "An example document.",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType" : "ENV_VAR",
            "allowedPattern": "^[^"]*$"

        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "precondition" : {
           "StringEquals" : ["platformType", "Linux"]
        },
        "inputs": {
            "runCommand": [
              "echo {{Message}}"
            ]
        }
    }
}
```
SSM ドキュメントが二重中括弧 `{{ }}` を使用していない場合、`allowedPattern` は理論的には必要ありません。
頻繁に使用するパラメータの場合は、そのパラメータを AWS Systems Manager のツールである Parameter Store に保存することをお勧めします。次に、デフォルト値として Parameter Store パラメータを参照するパラメータをドキュメントで定義できます。Parameter Store パラメータを参照するには、次の構文を使用します。  

```
{{ssm:parameter-name}}
```
他のドキュメントパラメータと同じ方法で、Parameter Store パラメータを参照するパラメータを使用できます。次の例では、`commands` パラメータのデフォルト値は Parameter Store パラメータ `myShellCommands` です。`commands` パラメータを `runCommand` 文字列として指定すると、ドキュメントは `myShellCommands` パラメータに格納されているコマンドを実行します。  

```
---
schemaVersion: '2.2'
description: runShellScript with command strings stored as Parameter Store parameter
parameters:
  commands:
    type: StringList
    description: "(Required) The commands to run on the instance."
    default: ["{{ ssm:myShellCommands }}"],
            interpolationType : 'ENV_VAR'
            allowedPattern: '^[^"]*$'

mainSteps:
- action: aws:runShellScript
  name: runShellScriptDefaultParams
  inputs:
    runCommand:"{{ commands }}"
```

```
{
    "schemaVersion": "2.2",
    "description": "runShellScript with command strings stored as Parameter Store parameter",
    "parameters": {
      "commands": {
        "type": "StringList",
        "description": "(Required) The commands to run on the instance.",
        "default": ["{{ ssm:myShellCommands }}"],
        "interpolationType" : "ENV_VAR"
      }
    },
    "mainSteps": [
      {
        "action": "aws:runShellScript",
        "name": "runShellScriptDefaultParams",
        "inputs": {
            "runCommand": [
              "{{ commands }}"
          ]
        }
      }
    ]
  }
```
`String` および `StringList` Parameter Store パラメータは、ドキュメントの `parameters` セクションで参照できます。`SecureString` Parameter Store パラメータは参照できません。
の詳細については、「Parameter Store」を参照してください。[AWS Systems Manager Parameter Store](systems-manager-parameter-store.md)  
型: 構造  
`parameters`構造は次のフィールドと値を受け入れます。  
+ `type`: (必須) その値として `String`、`StringList`、`Integer`、`Boolean`、`MapList`、`StringMap` を使用できます。各タイプの例を表示するには、次のセクションの「[SSM ドキュメントパラメータ `type` の例](#top-level-properties-type)」を参照してください。
**注記**  
コマンドタイプのドキュメントでは、`String` および `StringList` パラメータタイプのみがサポートされます。
+ `description`: (オプション) パラメータグループの説明。
+ `default`: (オプション) Parameter Store でのパラメータのデフォルト値またはパラメータへの参照。
+ `allowedValues`: (オプション) パラメータに使用できる値の配列。パラメータに使用できる値を定義すると、ユーザー入力が検証されます。使用できない値をユーザーが入力すると、実行の開始に失敗します。

------
#### [ YAML ]

  ```
  DirectoryType:
    type: String
    description: "(Required) The directory type to launch."
    default: AwsMad
    allowedValues:
    - AdConnector
    - AwsMad
    - SimpleAd
  ```

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

  ```
  "DirectoryType": {
    "type": "String",
    "description": "(Required) The directory type to launch.",
    "default": "AwsMad",
    "allowedValues": [
      "AdConnector",
      "AwsMad",
      "SimpleAd"
    ]
  }
  ```

------
+ `allowedPattern`: (オプション) ユーザー入力がパラメータに対して定義されたパターンと一致するかどうかを検証する正規表現。ユーザー入力が使用できるパターンと一致しない場合、実行は開始されません。
**注記**  
Systems Manager は、`allowedPattern` について 2 つの検証を実行します。1 つ目の検証は、ドキュメントを使用するときに API レベルで [Java 正規表現ライブラリ](https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html)を使用して実行されます。2 つ目の検証は、ドキュメントを処理する前に [GO regexp ライブラリ](https://pkg.go.dev/regexp)を使用して SSM Agent に対して実行されます。

------
#### [ YAML ]

  ```
  InstanceId:
    type: String
    description: "(Required) The instance ID to target."
    allowedPattern: "^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$"
    default: ''
  ```

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

  ```
  "InstanceId": {
    "type": "String",
    "description": "(Required) The instance ID to target.",
    "allowedPattern": "^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$",
    "default": ""
  }
  ```

------
+ `displayType`: (オプション) `textfield` の `textarea` または AWS マネジメントコンソール のいずれかを表示するために使用されます。`textfield` は、1 行のテキストボックスで、`textarea` は、複数行のテキストエリアです。
+ `minItems`: (オプション) 許可される項目の最小数。
+ `maxItems`: (オプション) 許可される項目の最大数。
+ `minChars`: (オプション) 許可される項目の最小数。
+ `maxChars`: (オプション) を許可されているパラメータ文字の最大数。
+ `interpolationType`: (オプション) コマンドを実行する前にパラメータ値をどのように処理するかを定義します。`ENV_VAR` に設定すると、パラメータ値は `SSM_parameter-name` という名前の環境変数として使用できるようになります。この機能を使うと、パラメータ値をリテラル文字列として処理することによりコマンドインジェクションを防げるようになります。

  型: 文字列

  有効な値: `ENV_VAR`
必須：いいえ

**variables**  
(スキーマバージョン 0.3 のみ) 自動化ランブックのステップ全体で参照または更新できる値。変数はパラメーターと似ていますが、非常に重要な点において異なります。パラメーター値はランブックのコンテキストでは静的ですが、変数の値はランブックのコンテキストでは変更できます。変数の値を更新する場合、データ型は定義されたデータ型と一致する必要があります。オートメーションの変数値の更新に関する詳細は、「[`aws:updateVariable` — ランブック変数の値を更新します。](automation-action-update-variable.md)」を参照してください。  
型: ブール値｜整数｜マップリスト｜文字列｜文字列リスト｜文字列マップ  
必須: いいえ  

```
variables:
    payload:
        type: StringMap
        default: "{}"
```

```
{
    "variables": [
        "payload": {
            "type": "StringMap",
            "default": "{}"
        }
    ]
}
```

**runtimeConfig**  
(スキーマバージョン 1.2 のみ) 1 つ以上の Systems Manager プラグインによって適用されるインスタンスの構成。プラグインは必ずしも順番に実行されるとは限りません。  
型: Dictionary<string,PluginConfiguration>  
必須: いいえ

**mainSteps**  
(スキーマバージョン 0.3、2.0、および 2.2 のみ) 複数のステップ (プラグイン) を含むことができるオブジェクト。プラグインはステップ内で定義されます。ステップは、ドキュメントに記載されている順番に実行されます。  
型: Dictionary<string,PluginConfiguration>  
必須: はい

**出力**  
(スキーマバージョン 0.3 のみ) このドキュメントの実行によって生成され、他のプロセスで使用できるデータ。例えば、ドキュメントで新しい AMI を作成する場合、出力値として「CreateImage.ImageId」を指定すると、この出力を使用して後続のオートメーションの実行から新しいインスタンスを作成できます。出力の詳細については、「[アクション出力の入力としての使用](automation-action-outputs-inputs.md)」を参照してください。  
型: Dictionary<string,OutputConfiguration>  
必須: いいえ

**files**  
(スキーマバージョン 0.3 のみ) ドキュメントに添付され、自動実行時に実行されるスクリプトファイル (およびそのチェックサム)。`aws:executeScript` アクションを含むドキュメントのうち、添付ファイルが 1 つ以上のステップに指定されているもののみに適用されます。  
オートメーションランブックでサポートされているランタイムについては、「[`aws:executeScript` – スクリプトを実行する](automation-action-executeScript.md)」を参照してください。Automation ランブックにスクリプトを含める方法の詳細については、「[ランブックでのスクリプトの使用](automation-document-script-considerations.md)」および「[オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md)」を参照してください。  
アタッチメントの付いたオートメーションランブックを作成するときは、`--attachments` オプション (AWS CLI の場合) または `Attachments` (API および SDK の場合) を使用して添付ファイルを指定する必要があります。SSM ドキュメントと、Amazon Simple Storage Service (Amazon S3) バケット内に保存されているファイルの両方で、ファイルの場所を指定できます。詳細については、「AWS Systems Manager API リファレンス」の「[Attachments](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments)」(アタッチメント) を参照してください。  

```
---
files:
  launch.py:
    checksums:
      sha256: 18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE
```

```
"files": {
    "launch.py": {
        "checksums": {
            "sha256": "18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE"
        }
    }
}
```
型: Dictionary<string,FilesConfiguration>  
必須: いいえ

## SSM ドキュメントパラメータ `type` の例
<a name="top-level-properties-type"></a>

SSM ドキュメント内のパラメータのデータ型は静的です。つまり、パラメータのデータ型は定義後に変更することはできません。SSM ドキュメントプラグインでパラメータを使用する場合、パラメータのデータ型をプラグインの入力内で動的に変更することはできません。例えば、`Integer` プラグインの `runCommand` 入力内の `aws:runShellScript` パラメータを参照することはできません。この入力は文字列または文字列のリストを受け入れるためです。プラグインの入力にパラメータを使用するには、パラメータのデータ型が、入力の受け入れ可能なデータ型と一致している必要があります。例えば、`Boolean` プラグインの `allowDowngrade` 入力には `aws:updateSsmAgent` 型のパラメータを指定する必要があります。パラメータのデータ型がプラグインの入力のデータ型と一致しない場合、SSM ドキュメントの検証は失敗となり、システムによってドキュメントは作成されません。これは、他のプラグイン、もしくは AWS Systems Manager のオートメーションアクション用に、入力内にある下流のパラメータを使用する場合にも当てはまります。例えば、`aws:runDocument` プラグインの `documentParameters` 入力にある `StringList` パラメータを参照することはできません。ダウンストリーム SSM ドキュメントパラメータのタイプが `StringList` パラメータで、かつ参照しようとしているパラメータと一致する場合でも、`documentParameters` 入力は、文字列へのマッピングを受け入れます。

 オートメーションアクションでパラメータを使用するときは、ほとんどの場合、SSM ドキュメントを作成するときにパラメータのデータ型は検証されません。`aws:runCommand` アクションを使用する場合にのみ、SSM ドキュメントを作成するときにパラメータのデータ型が検証されます。それ以外の場合、オートメーションの実行中、アクションが実行される前にその入力が検証されるときに、パラメータが検証されます。例えば、入力パラメータが `String` であり、それを `MaxInstanceCount` アクションの `aws:runInstances` 入力の値として参照する場合は、SSM ドキュメントが作成されます。ただし、ドキュメントを実行すると、`aws:runInstances` アクションの検証中にオートメーションは失敗します。`MaxInstanceCount` 入力に `Integer` が必要なためです。

以下に示しているのは、各パラメータ `type` の例です。

文字列  
引用符で囲んだ 0 個以上の Unicode 文字のシーケンス。例えば、"i-1234567890abcdef0" など。バックスラッシュを使用してエスケープします。  
文字列パラメータには、セキュリティを高めるために環境変数補間を有効にする値 `ENV_VAR` を持つ、オプションの `interpolationType` フィールドを含めることができます。  

```
---
InstanceId:
  type: String
  description: "(Optional) The target EC2 instance ID."
  interpolationType: ENV_VAR
```

```
"InstanceId":{
  "type":"String",
  "description":"(Optional) The target EC2 instance ID.",
  "interpolationType": "ENV_VAR"
}
```

StringList  
カンマ区切りの文字列項目のリスト。例えば、["cd \$1", "pwd"] など。  

```
---
commands:
  type: StringList
  description: "(Required) Specify a shell script or a command to run."
  default: ""
  minItems: 1
  displayType: textarea
```

```
"commands":{
  "type":"StringList",
  "description":"(Required) Specify a shell script or a command to run.",
  "minItems":1,
  "displayType":"textarea"
}
```

Boolean  
`true` または `false` のみを使用できます。"true" または 0 は使用できません。  

```
---
canRun:
  type: Boolean
  description: ''
  default: true
```

```
"canRun": {
  "type": "Boolean",
  "description": "",
  "default": true
}
```

整数  
整数。小数 (3.14159 など) や引用符で囲んだ数字 ("3" など) は使用できません。  

```
---
timeout:
  type: Integer
  description: The type of action to perform.
  default: 100
```

```
"timeout": {
  "type": "Integer",
  "description": "The type of action to perform.",
  "default": 100    
}
```

StringMap  
キーと値のマッピング。キーと値は文字列でなければなりません。例えば、\$1"Env": "Prod"\$1 など。  

```
---
notificationConfig:
  type: StringMap
  description: The configuration for events to be notified about
  default:
    NotificationType: 'Command'
    NotificationEvents:
    - 'Failed'
    NotificationArn: "$dependency.topicArn"
  maxChars: 150
```

```
"notificationConfig" : {
  "type" : "StringMap",
  "description" : "The configuration for events to be notified about",
  "default" : {
    "NotificationType" : "Command",
    "NotificationEvents" : ["Failed"],
    "NotificationArn" : "$dependency.topicArn"
  },
  "maxChars" : 150
}
```

MapList  
StringMap オブジェクトのリスト。  

```
blockDeviceMappings:
  type: MapList
  description: The mappings for the create image inputs
  default:
  - DeviceName: "/dev/sda1"
    Ebs:
      VolumeSize: "50"
  - DeviceName: "/dev/sdm"
    Ebs:
      VolumeSize: "100"
  maxItems: 2
```

```
"blockDeviceMappings":{
  "type":"MapList",
  "description":"The mappings for the create image inputs",
  "default":[
    {
      "DeviceName":"/dev/sda1",
      "Ebs":{
        "VolumeSize":"50"
      }
    },
    {
      "DeviceName":"/dev/sdm",
      "Ebs":{
        "VolumeSize":"100"
      }
    }
  ],
  "maxItems":2
}
```

## SSM コマンドドキュメントの内容の表示
<a name="viewing-ssm-document-content"></a>

AWS Systems Manager (SSM) コマンドドキュメントの必須パラメータとオプションのパラメータ、およびドキュメントが実行するアクションをプレビューするには、Systems Manager コンソールでドキュメントのコンテンツを表示できます。

**SSM コマンドドキュメントの内容を表示するには**

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

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

1. 検索ボックスで、[**ドキュメントのタイプ**] を選択し、[**コマンド**] を選択します。

1. ドキュメントの名前を選択し、[**コンテンツ**] タブをクリックします。

1. [コンテンツ] フィールドで、ドキュメントで使用できるパラメータとアクションステップを確認します。

   例えば、次の図は、(1) `version` と (2) `allowDowngrade` が `AWS-UpdateSSMAgent` ドキュメントのオプションのパラメータで、ドキュメントによって実行される最初のアクションが (3) `aws:updateSsmAgent` であることを示しています。  
![\[Systems Manager コンソールで SSM ドキュメントの内容を表示する\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/view-document-content.png)

# コマンドドキュメントプラグインリファレンス
<a name="documents-command-ssm-plugin-reference"></a>

このリファレンスでは、AWS Systems Manager (SSM) コマンドドキュメントで指定できるプラグインが説明されています。これらのプラグインは、オートメーションアクションを使用する SSM オートメーションランブックでは使用できません。AWS Systems Manager Automation アクションについては、「[Systems Manager Automation アクションのリファレンス](automation-actions.md)」を参照してください。

Systems Manager は、SSM ドキュメントの内容を読み取ることによって、マネージドインスタンスで実行するアクションを判別します。各ドキュメントにはコード実行セクションが含まれています。ドキュメントのスキーマバージョンに応じて、このコード実行セクションには 1 つ以上のプラグインまたはステップが含まれます。このヘルプトピックの目的上、プラグインとステップは*プラグイン*と呼んでいます。このセクションには、各 Systems Manager プラグインに関して説明します。ドキュメントの作成に関する情報やスキーマのバージョンの違いなど、ドキュメントの詳細については、「[AWS Systems Manager ドキュメント](documents.md)」を参照してください。

`aws:runShellScript` や `aws:runPowerShellScript` などの文字列パラメータを受け入れるプラグインの場合、`interpolationType` パラメータを使用して、パラメータ入力を潜在的に実行可能なコマンドではなく文字列リテラルとして処理することにより、セキュリティを高めることができます。例えば、次のようになります。

```
{
    "schemaVersion": "2.2",
    "description": "runShellScript with command strings stored as Parameter Store parameter",
    "parameters": {
      "commands": {
        "type": "StringList",
        "description": "(Required) The commands to run on the instance.",
        "default": ["{{ ssm:myShellCommands }}"],
        "interpolationType" : "ENV_VAR"
      }
    },
    //truncated
 }
```

**注記**  
ここで説明するプラグインの中には、Windows Server インスタンスまたは Linux インスタンスのいずれかでのみ実行されるものがあります。各プラグインにはプラットフォームの依存関係が記載されています。  
macOS 向けの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでは、以下のドキュメントプラグインがサポートされています。  
`aws:refreshAssociation`
`aws:runShellScript`
`aws:runPowerShellScript`
`aws:softwareInventory`
`aws:updateSsmAgent`

**Topics**
+ [共有入力](#shared-inputs)
+ [`aws:applications`](#aws-applications)
+ [`aws:cloudWatch`](#aws-cloudWatch)
+ [`aws:configureDocker`](#aws-configuredocker)
+ [`aws:configurePackage`](#aws-configurepackage)
+ [`aws:domainJoin`](#aws-domainJoin)
+ [`aws:downloadContent`](#aws-downloadContent)
+ [`aws:psModule`](#aws-psModule)
+ [`aws:refreshAssociation`](#aws-refreshassociation)
+ [`aws:runDockerAction`](#aws-rundockeraction)
+ [`aws:runDocument`](#aws-rundocument)
+ [`aws:runPowerShellScript`](#aws-runPowerShellScript)
+ [`aws:runShellScript`](#aws-runShellScript)
+ [`aws:softwareInventory`](#aws-softwareinventory)
+ [`aws:updateAgent`](#aws-updateagent)
+ [`aws:updateSsmAgent`](#aws-updatessmagent)

## 共有入力
<a name="shared-inputs"></a>

あらゆるプラグインが以下の入力を使用できるのは、SSM Agent バージョン 3.0.502 以降のみです。

**finallyStep**  
ドキュメントに実行させる最後のステップです。この入力がステップに定義されている場合、`exit` または `onFailure` 入力で指定されている `onSuccess` 値よりもこれが優先されます。この入力が定義されたステップを期待どおりに実行するには、このステップをドキュメントの `mainSteps` で定義されている最後のステップにする必要があります。  
タイプ: ブール値  
有効な値: `true` \$1 `false`  
必須: いいえ

**onFailure**  
`exit` 値を使用するプラグインにこの入力を指定して、ステップが失敗した場合は、ステップのステータスにこの障害が反映され、`finallyStep` が定義されない限り、ドキュメントは残りのステップを実行しません。`successAndExit` 値を使用するプラグインにこの入力を値で指定して、ステップが失敗した場合は、ステップのステータスが成功になり、`finallyStep` が定義されない限り、ドキュメントは残りのステップを実行しません。  
型: 文字列  
有効な値: `exit` \$1 `successAndExit`  
必須: いいえ

**onSuccess**  
プラグインにこの入力を指定し、ステップが正常に実行した場合、`finallyStep` が定義されている場合を除き、ドキュメントは残りのステップを実行しません。  
型: 文字列  
有効な値: `exit`  
必須: いいえ

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: Shared inputs example
parameters:
  customDocumentParameter:
    type: String
    description: Example parameter for a custom Command-type document.
mainSteps:
- action: aws:runDocument
  name: runCustomConfiguration
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomDocument"
    documentParameters: '"documentParameter":{{customDocumentParameter}}'
    onSuccess: exit
- action: aws:runDocument
  name: ifConfigurationFailure
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomRepairDocument"
    onFailure: exit
- action: aws:runDocument
  name: finalConfiguration
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomFinalDocument"
    finallyStep: true
```

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

```
{
   "schemaVersion": "2.2",
   "description": "Shared inputs example",
   "parameters": {
      "customDocumentParameter": {
         "type": "String",
         "description": "Example parameter for a custom Command-type document."
      }
   },
   "mainSteps":[
      {
         "action": "aws:runDocument",
         "name": "runCustomConfiguration",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomDocument",
            "documentParameters": "\"documentParameter\":{{customDocumentParameter}}",
            "onSuccess": "exit"
         }
      },
      {
         "action": "aws:runDocument",
         "name": "ifConfigurationFailure",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomRepairDocument",
            "onFailure": "exit"
         }
      },
      {
         "action": "aws:runDocument",
         "name":"finalConfiguration",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomFinalDocument",
            "finallyStep": true
         }
      }
   ]
}
```

------

## `aws:applications`
<a name="aws-applications"></a>

EC2 インスタンスでアプリケーションをインストール、修復、またはアンインストールします。このプラグインは、Windows Server オペレーティングシステムでのみ実行されます。

### 構文
<a name="applications-syntax"></a>

#### スキーマ 2.2
<a name="applications-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:applications plugin
parameters:
  source:
    description: "(Required) Source of msi."
    type: String
mainSteps:
- action: aws:applications
  name: example
  inputs:
    action: Install
    source: "{{ source }}"
```

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

```
{
  "schemaVersion":"2.2",
  "description":"aws:applications",
  "parameters":{
    "source":{
    "description":"(Required) Source of msi.",
    "type":"String"
    }
  },
  "mainSteps":[
    {
      "action":"aws:applications",
      "name":"example",
      "inputs":{
        "action":"Install",
        "source":"{{ source }}"
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="applications-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:applications:
    properties:
    - id: 0.aws:applications
      action: "{{ action }}"
      parameters: "{{ parameters }}"
      source: "{{ source }}"
      sourceHash: "{{ sourceHash }}"
```

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

```
{
   "runtimeConfig":{
      "aws:applications":{
         "properties":[
            {
               "id":"0.aws:applications",
               "action":"{{ action }}",
               "parameters":"{{ parameters }}",
               "source":"{{ source }}",
               "sourceHash":"{{ sourceHash }}"
            }
         ]
      }
   }
}
```

------

### プロパティ
<a name="applications-properties"></a>

**action**  
取るべきアクション｡  
タイプ: Enum  
有効な値: `Install` \$1 `Repair` \$1 `Uninstall`  
必須: はい

**パラメータ**  
インストーラのパラメータ。  
型: 文字列  
必須: いいえ

**source**  
アプリケーションの `.msi` ファイルの URL。  
型: 文字列  
必須: はい

**sourceHash**  
`.msi` ファイルの SHA256 ハッシュ。  
型: 文字列  
必須: いいえ

## `aws:cloudWatch`
<a name="aws-cloudWatch"></a>

Windows Server から Amazon CloudWatch または Amazon CloudWatch Logs にデータをエクスポートし、CloudWatch メトリクスを使用してデータをモニタリングします。このプラグインは、Windows Server オペレーティングシステムでのみ実行されます。Amazon Elastic Compute Cloud (Amazon EC2) との CloudWatch 統合の設定の詳細については、「Amazon CloudWatch ユーザーガイド」の「[CloudWatch エージェントを使用したメトリクス、ログ、トレースの収集](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)」を参照してください。

**重要**  
CloudWatch の統合エージェントによって、ログデータを Amazon CloudWatch Logs に送信するためのツールとして SSM Agent が置き換えられました。SSM Agent aws:cloudWatch プラグインはサポートされていません。ログ収集プロセスには、統合された CloudWatch エージェントのみを使用することをお勧めします。詳細については、以下の各トピックを参照してください。  
[統合された CloudWatch Logs へのノードログの送信 (CloudWatch エージェント)](monitoring-cloudwatch-agent.md)
[Windows Server ノードのログ収集を CloudWatch エージェントに移行する](monitoring-cloudwatch-agent.md#monitoring-cloudwatch-agent-migrate)
「Amazon CloudWatch ユーザーガイド」の「[CloudWatch エージェントを使用してメトリクス、ログ、トレースを収集する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)」。

次のデータ型をエクスポートおよび監視できます。

**ApplicationEventLog**  
アプリケーションイベントログデータを CloudWatch Logs に送信します。

**CustomLogs**  
テキストベースのログファイルを Amazon CloudWatch Logs に送信します｡ CloudWatch プラグインは、ログファイルのフィンガープリントを作成します。次に、システムは各フィンガープリントにデータオフセットを関連付けます。プラグインは、変更があったときにファイルをアップロードし、オフセットを記録し、オフセットをフィンガープリントに関連付けます。この方法は、ユーザーがプラグインを有効にし、多数のファイルを含むディレクトリにサービスを関連付け、システムがすべてのファイルをアップロードすることを避けるために使用されます。  
アプリケーションがポーリング中にログをトランケートまたは消去しようとすると、`LogDirectoryPath` で指定されたログではエントリが失われることに注意してください。たとえば、ログファイルのサイズを制限する場合は、その制限に達すると新しいログファイルを作成し、新しいファイルにデータを書き続ける必要があります。

**ETW**  
Windows のイベントトレース (ETW) データを CloudWatch Logs に送信します｡

**IIS**  
IIS ログデータを CloudWatch Logs に送信します。

**PerformanceCounter**  
Windows パフォーマンスカウンターを CloudWatch に送信します｡ メトリクスとして CloudWatch にアップロードするさまざまなカテゴリを選択できます。アップロードするパフォーマンスカウンタごとに、一意の ID (たとえば、「PerformanceCounter2」、「PerformanceCounter3」など) を持つ[**PerformanceCounter**] セクションを作成し、そのプロパティを設定します。  
AWS Systems Manager SSM Agent または CloudWatch プラグインが停止した場合、パフォーマンスカウンターのデータは、CloudWatch にログ記録されません。この動作は、カスタムログまたは Windows イベントログとは異なります。SSM Agent または CloudWatch プラグインを使用できる場合、カスタムログと Windows イベントログはパフォーマンスカウンタデータを保持し、CloudWatch にアップロードします。

**SecurityEventLog**  
セキュリティイベントログデータを CloudWatch Logs に送信します。

**SystemEventLog**  
システムイベントログデータを CloudWatch Logs に送信します。

データの送信先として以下を定義できます。

**CloudWatch**  
パフォーマンスカウンターのメトリクスデータの送信先。同じデータを別の場所に送信するには、一意の ID (例: 「CloudWatch2」、「CloudWatch3」) を使用してセクションを追加し、新しい ID ごとに異なるリージョンを指定します。

**CloudWatchLogs**  
ログデータの送信先。一意の ID (例: 「CloudWatchLogs2」、「CloudWatchLogs3」) を含むセクションを追加し、新しい ID ごとに異なるリージョンを指定して、同じデータを別の場所に送信できます。

### 構文
<a name="cloudWatch-syntax"></a>

```
"runtimeConfig":{
        "aws:cloudWatch":{
            "settings":{
                "startType":"{{ status }}"
            },
            "properties":"{{ properties }}"
        }
    }
```

### 設定とプロパティ
<a name="cloudWatch-properties"></a>

**AccessKey**  
お客様のアクセスキー ID。IAM ロールを使用してインスタンスを起動しない限り、このプロパティは必須です。このプロパティは SSM では使用できません。  
型: 文字列  
必須: いいえ

**CategoryName**  
パフォーマンスモニターのパフォーマンスカウンタカテゴリ。  
型: 文字列  
必須: はい

**CounterName**  
パフォーマンスモニターのパフォーマンスカウンターの名前。  
型: 文字列  
必須: はい

**CultureName**  
タイムスタンプが記録されるロケール。**CultureName** を空白にした場合は、Windows Server インスタンスで使用されているものと同じロケールになります。  
型: 文字列  
有効な値: サポートされている値のリストについては、Microsoft ウェブサイトの「[National Language Support (NLS)](https://msdn.microsoft.com/en-us/library/cc233982.aspx)」を参照してください。**div**、**div-MV**、**hu**、および **hu-HU** の値はサポートされません。  
必須: いいえ

**DimensionName**  
Amazon CloudWatch メトリクスのディメンション。`DimensionName` を指定する場合は、`DimensionValue` を指定する必要があります。これらのパラメータにより、メトリクスが一覧表示される別のビューが表示されます。複数のメトリクスに同じディメンションを使用して、特定のディメンションに属するすべてのメトリクスを表示することができます。  
型: 文字列  
必須: いいえ

**DimensionValue**  
Amazon CloudWatch メトリクスのディメンション値。  
型: 文字列  
必須: いいえ

**エンコード**  
使用するファイルエンコード (たとえば、UTF-8)。表示名ではなく、エンコード名を使用します。  
タイプ: 文字列  
有効な値: サポートされる値の一覧については、Microsoft Learn Library の「[Encoding クラス](https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding?view=net-7.0)」を参照してください。  
必須: はい

**フィルタ**  
ログ名のプレフィックス。すべてのファイルをモニタリングするには、このパラメータを空白のままにします。  
型: 文字列  
有効な値: サポートされる値の一覧については、MSDN ライブラリの「[FileSystemWatcherFilter プロパティ](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx)」を参照してください。  
必須: いいえ

**フロー**  
アップロードする各データタイプ、およびデータの送信先 (CloudWatch または CloudWatch Logs)。例えば、[`"Id": "PerformanceCounter"`] で定義されたパフォーマンスカウンタを CloudWatch に送信するには、`"Id": "CloudWatch"` で定義された送信先、[**"PerformanceCounter,CloudWatch"**] を入力します。同様に、カスタムログ、ETW ログ、システムログを `"Id": "ETW"` で定義された CloudWatch Logs の送信先に送信するには、「**"(ETW),CloudWatchLogs"**」と入力します。加えて、同じパフォーマンスカウンターまたはログファイルを複数の宛先に送信することもできます。たとえば、アプリケーションログを `"Id": "CloudWatchLogs"` と `"Id": "CloudWatchLogs2"` で定義した 2 つの異なる宛先に送信するには、「**"ApplicationEventLog,(CloudWatchLogs, CloudWatchLogs2)"**」と入力します。  
型: 文字列  
有効な値 (ソース): `ApplicationEventLog` \$1 `CustomLogs` \$1 `ETW` \$1 `PerformanceCounter` \$1 `SystemEventLog` \$1 `SecurityEventLog`   
有効な値 (送信先): `CloudWatch` \$1 `CloudWatchLogs` \$1 `CloudWatch`*n* \$1 `CloudWatchLogs`*n*   
必須: はい

**FullName**  
コンポーネントのフルネーム。  
型: 文字列  
必須: はい

**ID**  
データソースまたは送信先を識別します。この識別子は、設定ファイル内で一意である必要があります。  
型: 文字列  
必須: はい

**InstanceName**  
パフォーマンスカウンターインスタンスの名前。各パフォーマンスカウンターコンポーネントではメトリクスが 1 つしかサポートされないため、アスタリスク (\$1) を使用してすべてのインスタンスを指定しないでください。ただし、**\$1Total** は使用できます。  
型: 文字列  
必須: はい

**レベル**  
Amazon CloudWatch に送信するメッセージのタイプ。  
型: 文字列  
有効な値:   
+ **1** - エラーメッセージだけがアップロードされます。
+ **2** - 警告メッセージだけがアップロードされます。
+ **4** - 情報メッセージだけがアップロードされます。
値を加算すると、複数の種類のメッセージを含めることができます。たとえば、**3** はエラーメッセージ (**1**) と警告メッセージ (**2**) が含まれることを意味します。**7** の値は、エラーメッセージ (**1**)、警告メッセージ (**2**)、情報メッセージ (**4**) が含まれることを意味します。  
必須: はい  
Windows セキュリティログではレベルを 7 に設定する必要があります。

**LineCount**  
ログファイルを識別するヘッダーの行数。たとえば、IIS のログファイルのヘッダーはほぼ同じです。「**3**」と入力すると、ログファイルのヘッダーの最初の 3 行が読み取られ、ログファイルを識別できます。IIS のログファイルでは、3 行目は日付と時刻のタイムスタンプで、ログファイル間で異なります。  
タイプ: 整数  
必須: いいえ

**LogDirectoryPath**  
CustomLogs の場合、EC2 インスタンスにログが保存されるパス。IIS ログの場合、IIS ログが個々のサイト (たとえば、**C:\$1\$1inetpub\$1\$1logs\$1\$1LogFiles\$1\$1W3SVC*n***) に保存されるフォルダ。IIS ログの場合、W3C ログ形式のみがサポートされます。IIS、NCSA、カスタム形式はサポートされません。  
型: 文字列  
必須: はい

**LogGroup**  
ロググループの名前です。この名前は、CloudWatch コンソールの [**ロググループ**] 画面に表示されます。  
型: 文字列  
必須: はい

**LogName**  
ログファイルの名前。  

1. ログの名前を検索するには、イベントビューアーのナビゲーションペインで、[**Applications and Services Logs**] を選択します。

1. ログの一覧で、アップロードするログを右クリックし (例えば、[`Microsoft`] > [`Windows`] > [`Backup`] > [`Operational`] など)、**[Create Custom View]** を選択します。

1. [**Create Custom View**] ダイアログボックスの [**XML**] タブを選択します。[**LogName**] は、<Select Path=> タグにあります (たとえば、`Microsoft-Windows-Backup` など)。このテキストを [**LogName**] パラメータにコピーします。
型: 文字列  
有効な値: `Application` \$1 `Security` \$1 `System` \$1 `Microsoft-Windows-WinINet/Analytic`  
必須: はい

**LogStream**  
送信先ログストリーム。[**\$1instance\$1id\$1**] (デフォルト) を使用した場合、このインスタンスのインスタンス ID がログストリーム名として使用されます。  
型: 文字列  
有効な値: `{instance_id}` \$1 `{hostname}` \$1 `{ip_address}` *<log\$1stream\$1name>*  
存在しないログストリーム名を入力すると、CloudWatch Logs によってログストリームが自動的に作成されます。リテラル文字列、定義済み変数（**\$1instance\$1id\$1**、**\$1hostname\$1**、**\$1ip\$1address\$1**）、またはこれらの組み合わせを使用して、ログストリーム名を定義できます。  
このパラメータで指定されたログのストリーム名は、CloudWatch コンソールの [**Log Groups > Streams for *<YourLogStream>***] 画面に表示されます。  
必須: はい

**MetricName**  
パフォーマンスデータが含まれる CloudWatch メトリクス。  
名前に特殊文字を使用しないでください。使用した場合、メトリクスおよびその関連付けられたアラームが機能しないことがあります。
型: 文字列  
必須: はい

**NameSpace**  
パフォーマンスカウンターデータを書き込むメトリック名前空間。  
型: 文字列  
必須: はい

**PollInterval**  
新しいパフォーマンスカウンタとログデータがアップロードされるまでに必要な経過秒数｡  
タイプ: 整数  
有効な値: これを 5 秒以上に設定します。15 秒 (00:00: 15) をお勧めします。  
必須: はい

**リージョン**  
ログデータを送信する AWS リージョン。パフォーマンスカウンターは、ログデータの送信元とは異なるリージョンに送信できますが、インスタンスが実行されているのと同じリージョンにこのパラメータを設定することをお勧めします。  
型: 文字列  
有効な値: Systems Manager と CloudWatch Logs の両方でサポートされる AWS リージョン のリージョン ID (`us-east-2`、`eu-west-1`、`ap-southeast-1` など)。各サービスでサポートされる AWS リージョン のリストについては、「Amazon Web Services 全般のリファレンス」の「[Amazon CloudWatch Logs サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html#cwl_region)」と「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」を参照してください。  
必須: はい

**SecretKey**  
お客様のシークレットアクセスキー。IAM ロールを使用してインスタンスを起動しない限り、このプロパティは必須です。  
型: 文字列  
必須: いいえ

**startType**  
インスタンスで CloudWatch をオンまたはオフにします。  
型: 文字列  
有効な値: `Enabled` \$1 `Disabled`  
必須: はい

**TimestampFormat**  
使用するタイムスタンプ形式。サポートされる値の一覧については、MSDN ライブラリの「[カスタムの日付と時刻の書式指定文字列](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)」を参照してください。  
型: 文字列  
必須: はい

**TimeZoneKind**  
ログのタイムスタンプにタイムゾーン情報が含まれていない場合にタイムゾーン情報を提供できます。このパラメータが空になっていて、タイムスタンプにタイムゾーン情報が含まれていない場合、CloudWatch Logs ではデフォルトでローカルタイムゾーンが使用されます。タイムスタンプに既にタイムゾーン情報が含まれている場合、このパラメータは無視されます。  
型: 文字列  
有効な値: `Local` \$1 `UTC`  
必須: いいえ

**単位**  
メトリクスの適切な測定単位。  
型: 文字列  
有効な値: Seconds \$1 Microseconds \$1 Milliseconds \$1 Bytes \$1 Kilobytes \$1 Megabytes \$1 Gigabytes \$1 Terabytes \$1 Bits \$1 Kilobits \$1 Megabits \$1 Gigabits \$1 Terabits \$1 Percent \$1 Count \$1 Bytes/Second \$1 Kilobytes/Second \$1 Megabytes/Second \$1 Gigabytes/Second \$1 Terabytes/Second \$1 Bits/Second \$1 Kilobits/Second \$1 Megabits/Second \$1 Gigabits/Second \$1 Terabits/Second \$1 Count/Second \$1 None  
必須: はい

## `aws:configureDocker`
<a name="aws-configuredocker"></a>

(スキーマバージョン 2.0 以降) コンテナと Docker と連携するインスタンスを設定します。このプラグインは、Linux のほとんどのバージョンと Windows Server オペレーティングシステムでのみサポートされています｡

### 構文
<a name="configuredocker-syntax"></a>

#### スキーマ 2.2
<a name="configuredocker-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:configureDocker
parameters:
  action:
    description: "(Required) The type of action to perform."
    type: String
    default: Install
    allowedValues:
    - Install
    - Uninstall
mainSteps:
- action: aws:configureDocker
  name: configureDocker
  inputs:
    action: "{{ action }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:configureDocker plugin",
  "parameters": {
    "action": {
      "description": "(Required) The type of action to perform.",
      "type": "String",
      "default": "Install",
      "allowedValues": [
        "Install",
        "Uninstall"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:configureDocker",
      "name": "configureDocker",
      "inputs": {
        "action": "{{ action }}"
      }
    }
  ]
}
```

------

### 入力
<a name="configuredocker-properties"></a>

**action**  
実行するアクションのタイプ。  
タイプ: Enum  
有効な値: `Install` \$1 `Uninstall`  
必須: はい

## `aws:configurePackage`
<a name="aws-configurepackage"></a>

(スキーマバージョン 2.0 以降) AWS Systems Manager Distributor パッケージをインストールまたはアンインストールします。最新バージョン、デフォルトバージョン、または指定したパッケージのバージョンをインストールできます。AWS が提供するパッケージもサポートされています。このプラグインは、Windows Server および Linux オペレーティングシステムで実行されます。ただし、Linux オペレーティングシステムでは、すべての利用可能なパッケージがサポートされているわけではありません。

Windows Server 用の利用できる AWS パッケージには、`AWSPVDriver`、`AWSNVMe`、`AwsEnaNetworkDriver`、`AwsVssComponents`、`AmazonCloudWatchAgent`、`CodeDeployAgent`、`AWSSupport-EC2Rescue.` などがあります。

Linux オペレーティングシステムで使用できる AWSパッケージには、`AmazonCloudWatchAgent`、`CodeDeployAgent`、`AWSSupport-EC2Rescue` などがあります。

### 構文
<a name="configurepackage-syntax"></a>

#### スキーマ 2.2
<a name="configurepackage-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:configurePackage
parameters:
  name:
    description: "(Required) The name of the AWS package to install or uninstall."
    type: String
  action:
    description: "(Required) The type of action to perform."
    type: String
    default: Install
    allowedValues:
    - Install
    - Uninstall
  ssmParameter:
    description: "(Required) Argument stored in Parameter Store."
    type: String
    default: "{{ ssm:parameter_store_arg }}"
mainSteps:
- action: aws:configurePackage
  name: configurePackage
  inputs:
    name: "{{ name }}"
    action: "{{ action }}"
    additionalArguments: 
      "{\"SSM_parameter_store_arg\": \"{{ ssmParameter }}\", \"SSM_custom_arg\": \"myValue\"}"
```

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

```
{
   "schemaVersion": "2.2",
   "description": "aws:configurePackage",
   "parameters": {
      "name": {
         "description": "(Required) The name of the AWS package to install or uninstall.",
         "type": "String"
      },
      "action": {
         "description": "(Required) The type of action to perform.",
         "type": "String",
         "default": "Install",
         "allowedValues": [
            "Install",
            "Uninstall"
         ]
      },
      "ssmParameter": {
         "description": "(Required) Argument stored in Parameter Store.",
         "type": "String",
         "default": "{{ ssm:parameter_store_arg }}"
      }
   },
   "mainSteps": [
      {
         "action": "aws:configurePackage",
         "name": "configurePackage",
         "inputs": {
            "name": "{{ name }}",
            "action": "{{ action }}",
            "additionalArguments": "{\"SSM_parameter_store_arg\": \"{{ ssmParameter }}\", \"SSM_custom_arg\": \"myValue\"}"
         }
      }
   ]
}
```

------

### 入力
<a name="configurepackage-properties"></a>

**名前**  
インストールまたはアンインストールする AWS パッケージの名前。使用可能なパッケージには `AWSPVDriver`、`AwsEnaNetworkDriver`、`AwsVssComponents`、`AmazonCloudWatchAgent` などがあります。  
型: 文字列  
必須: はい

**action**  
パッケージをインストールまたはアンインストールします｡  
タイプ: Enum  
有効な値: `Install` \$1 `Uninstall`  
必須: はい

**installationType**  
実行するインストールのタイプ。`Uninstall and reinstall` を指定した場合、パッケージは完全にアンインストールされてから再インストールされます。再インストールが完了するまで、アプリケーションは利用できません。`In-place update` を指定した場合、更新スクリプトに指定した手順に従って、新しいファイルまたは変更されたファイルのみが既存のインストールに追加されます。アプリケーションは、更新プロセス中も引き続き使用できます。`In-place update` オプションは、AWS 公開パッケージではサポートされていません。`Uninstall and reinstall` がデフォルト値です。  
タイプ: Enum  
有効な値: `Uninstall and reinstall` \$1 `In-place update`  
必須: いいえ

**additionalArguments**  
インストール、アンインストール、または更新スクリプトに指定する追加パラメータの JSON 文字列。各パラメータには、接頭辞 `SSM_` を付ける必要があります。規則 `{{ssm:parameter-name}}` を使用して、追加の引数で Parameter Store パラメータを参照できます。インストール、アンインストール、または更新スクリプトで追加のパラメータを使用するには、オペレーティングシステムに適した構文を使用して、パラメータを環境変数として参照する必要があります。たとえば、PowerShell では、`SSM_arg` 引数を `$Env:SSM_arg` として参照します。定義する引数の数に制限はありませんが、追加の引数の入力には 4,096 文字の制限があります。この制限には、定義するすべてのキーと値が含まれます。  
型: StringMap  
必須: いいえ

**バージョン**  
インストールまたはアンインストールするパッケージの特定のバージョン。インストールする場合、デフォルトで最新の公開バージョンがインストールされます。アンインストールすると、デフォルトで現在インストールされているバージョンがアンインストールされます。インストールされているバージョンが見つからない場合は、最新の公開バージョンがダウンロードされ、アンインストール処理が実行されます。  
型: 文字列  
必須: いいえ

## `aws:domainJoin`
<a name="aws-domainJoin"></a>

ドメインに EC2 インスタンスを結合します｡ このプラグインは、Linux および Windows Server オペレーティングシステムでのみ実行されます。このプラグインは、Linux インスタンスのホスト名を EC2AMAZ-*XXXXXXX* の形式に変更します。EC2 インスタンスの結合の詳細については、*AWS Directory Service 管理ガイド*の [EC2 インスタンスの AWS Managed Microsoft AD ディレクトリへの結合](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_join_instance.html)を参照してください。

### 構文
<a name="domainJoin-syntax"></a>

#### スキーマ 2.2
<a name="domainJoin-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:domainJoin
parameters:
  directoryId:
    description: "(Required) The ID of the directory."
    type: String
  directoryName:
    description: "(Required) The name of the domain."
    type: String
  directoryOU:
    description: "(Optional) The organizational unit to assign the computer object to."
    type: String
  dnsIpAddresses:
    description: "(Required) The IP addresses of the DNS servers for your directory."
    type: StringList
  hostname:
    description: "(Optional) The hostname you want to assign to the node."
    type: String
mainSteps:
- action: aws:domainJoin
  name: domainJoin
  inputs:
    directoryId: "{{ directoryId }}"
    directoryName: "{{ directoryName }}"
    directoryOU: "{{ directoryOU }}"
    dnsIpAddresses: "{{ dnsIpAddresses }}"
    hostname: "{{ hostname }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:domainJoin",
  "parameters": {
    "directoryId": {
      "description": "(Required) The ID of the directory.",
      "type": "String"
    },
    "directoryName": {
      "description": "(Required) The name of the domain.",
      "type": "String"
    },
    "directoryOU": {
        "description": "(Optional) The organizational unit to assign the computer object to.",
        "type": "String"
      },
    "dnsIpAddresses": {
      "description": "(Required) The IP addresses of the DNS servers for your directory.",
      "type": "StringList"
    },
    "hostname": {
        "description": "(Optional) The hostname you want to assign to the node.",
        "type": "String"
      }
  },
  "mainSteps": [
    {
      "action": "aws:domainJoin",
      "name": "domainJoin",
      "inputs": {
        "directoryId": "{{ directoryId }}",
        "directoryName": "{{ directoryName }}",
        "directoryOU":"{{ directoryOU }}",
        "dnsIpAddresses":"{{ dnsIpAddresses }}",
        "hostname":"{{ hostname }}"
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="domainJoin-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:domainJoin:
    properties:
      directoryId: "{{ directoryId }}"
      directoryName: "{{ directoryName }}"
      directoryOU: "{{ directoryOU }}"
      dnsIpAddresses: "{{ dnsIpAddresses }}"
```

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

```
{
   "runtimeConfig":{
      "aws:domainJoin":{
         "properties":{
            "directoryId":"{{ directoryId }}",
            "directoryName":"{{ directoryName }}",
            "directoryOU":"{{ directoryOU }}",
            "dnsIpAddresses":"{{ dnsIpAddresses }}"
         }
      }
   }
}
```

------

### プロパティ
<a name="domainJoin-properties"></a>

**directoryId**  
ディレクトリの ID。  
型: 文字列  
必須: はい  
例: "directoryId": "d-1234567890"

**directoryName**  
ドメインの名前。  
型: 文字列  
必須: はい  
例: "directoryName": "example.com"

**directoryOU**  
部門単位 (OU)｡  
型: 文字列  
必須: いいえ  
例: "directoryOU": "OU=test,DC=example,DC=com"

**dnsIpAddresses**  
DNS サーバーの IP アドレス。  
タイプ: StringList  
必須: はい  
例: "dnsIpAddresses": ["198.51.100.1","198.51.100.2"]

**hostname**  
ノードに割り当てるホスト名。指定しない場合、Windows Server インスタンスの名前は変更されませんが、Linux インスタンスはデフォルトの命名パターンを使用します。指定した場合、Windows Server インスタンスは正確に指定された値を使用しますが、Linux インスタンスの場合はプレフィックスとして機能します (`keepHostName` が「true」に設定されている場合を除く)。  
タイプ: 文字列  
必須: いいえ

**keepHostName**  
ドメインに参加したときに Linux インスタンスのホスト名を変更するかどうかを決定します。これは Linux のみのパラメータです。デフォルトでは (`hostname`、`hostnameNumAppendDigits` への入力なしで、`keepHostName` が「false」の場合)、Linux ホストの名前はパターン EC2AMAZ-XXXXXX に変更されます。「true」に設定すると、元のホスト名が保持され、`hostname` と `hostnameNumAppendDigits` への入力は無視されます。  
タイプ: ブール値  
必須: いいえ

**hostnameNumAppendDigits**  
ホスト名値の後に追加するランダムな数値の数を定義します。これは Linux 専用パラメータであり、`hostname` パラメータと一緒に使用されます。これは、`hostname` が指定されなかった場合に無視されます。  
タイプ: 文字列  
許可される値: 1～5  
必須: いいえ

### 例
<a name="domainJoin-examples"></a>

例については、AWS Directory Service 管理ガイドの「[Amazon EC2 インスタンスを AWS Managed Microsoft AD に結合する](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ec2-join-aws-domain.html)」を参照してください。

## `aws:downloadContent`
<a name="aws-downloadContent"></a>

(スキーマバージョン 2.0 以降) リモートの場所から SSM ドキュメントとスクリプトをダウンロードします。GitHub Enterprise リポジトリはサポートされていません。このプラグインは、Linux および Windows Server オペレーティングシステムでのみサポートされています｡

### 構文
<a name="downloadContent-syntax"></a>

#### スキーマ 2.2
<a name="downloadContent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:downloadContent
parameters:
  sourceType:
    description: "(Required) The download source."
    type: String
  sourceInfo:
    description: "(Required) The information required to retrieve the content from
      the required source."
    type: StringMap
mainSteps:
- action: aws:downloadContent
  name: downloadContent
  inputs:
    sourceType: "{{ sourceType }}"
    sourceInfo: "{{ sourceInfo }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:downloadContent",
  "parameters": {
    "sourceType": {
    "description": "(Required) The download source.",
    "type": "String"
  },
  "sourceInfo": {
    "description": "(Required) The information required to retrieve the content from the required source.",
    "type": "StringMap"
    }
  },
  "mainSteps": [
    {
      "action": "aws:downloadContent",
      "name": "downloadContent",
      "inputs": {
        "sourceType":"{{ sourceType }}",
        "sourceInfo":"{{ sourceInfo }}"
      }
    }
  ]
}
```

------

### 入力
<a name="downloadContent-inputs"></a>

**sourceType**  
ソースをダウンロードします。Systems Manager は、スクリプトおよび SSM ドキュメントのダウンロード用に `GitHub`、`Git`、`HTTP`、`S3`、および `SSMDocument` のソースタイプをサポートしています。  
型: 文字列  
必須: はい

**sourceInfo**  
必須ソースからコンテンツを取得するために必要な情報。  
型: StringMap  
必須: はい  
 **sourceType が `GitHub,` の場合は以下を指定します。**  
+ 所有者: リポジトリ所有者。
+ リポジトリ: リポジトリの名前。
+ パス: ダウンロードするファイルまたはディレクトリのパス。
+ getOptions: マスター以外のブランチまたはリポジトリ内の特定のコミットからコンテンツを取得するための追加オプション。マスターブランチで最新のコミットを使用している場合は、getOptions を省略できます。2020 年 10 月 1 日以降にリポジトリが作成された場合、デフォルトのブランチの名前は master ではなく main になる場合があります。この場合、getOptions パラメータの値を指定する必要があります。

  このパラメータは次の形式を使用します｡
  + ブランチ: refs/heads/*branch\$1name*

    デフォルトは `master` です。

    デフォルト以外のブランチを指定するには、次の形式を使用します。

    ブランチ: refs/heads/*branch\$1name*
  + commitID:*commitID*

    デフォルト: `head`。

    最新ではないコミットにあるバージョンの SSM ドキュメントを使用するには、完全なコミット ID を指定します。例えば、次のようになります。

    ```
    "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
    ```
+ tokenInfo: GitHub アクセストークン情報を `{{ssm-secure:secure-string-token-name}}` 形式で保存する先の Systems Manager パラメータ (SecureString パラメータ)。
**注記**  
この `tokenInfo` フィールドは、SecureString パラメータをサポートする唯一の SSM ドキュメントプラグインフィールドです。SecureString パラメータは、他のフィールドや他の SSM ドキュメントプラグインではサポートされません。

```
{
    "owner":"TestUser",
    "repository":"GitHubTest",
    "path":"scripts/python/test-script",
    "getOptions":"branch:master",
    "tokenInfo":"{{ssm-secure:secure-string-token}}"
}
```
 **sourceType `Git` には、以下を指定する必要があります。**  
+ repository

  ダウンロードするファイルまたはディレクトリへの Git リポジトリの URL です。

  型: 文字列
さらに、以下のオプションのパラメータを指定できます。  
+ getOptions

  マスター以外のブランチ、またはリポジトリ内の特定のコミットからコンテンツを取得するための追加オプションです。マスターブランチで最新のコミットを使用している場合は、getOptions を省略できます。

  型: 文字列

  このパラメータは次の形式を使用します｡
  + ブランチ: refs/heads/*branch\$1name*

    デフォルト: `master`。

    `"branch"` は、SSM ドキュメントが 以外のブランチに保存されている場合にのみ必要です。`master`例:

    ```
    "getOptions": "branch:refs/heads/main"
    ```
  + commitID:*commitID*

    デフォルト: `head`。

    最新ではないコミットにあるバージョンの SSM ドキュメントを使用するには、完全なコミット ID を指定します。以下に例を示します。

    ```
    "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
    ```
+ privateSSHKey

  指定した `repository` への接続時に使用する SSH キーです。SSH キーの値に対する `SecureString` パラメータを参照するには、`{{ssm-secure:your-secure-string-parameter}}` の形式を使用できます。

  型: 文字列
+ skipHostKeyChecking

  指定した `repository` に接続するときの stricthOstKeyChecking オプションの値を決定します。デフォルト値は `false` です。

  タイプ: ブール値
+ username

  HTTP を使用して指定した `repository` への接続時に使用するユーザー名です。ユーザー名の値に対する `SecureString`パラメータを参照するには、`{{ssm-secure:your-secure-string-parameter}}` の形式を使用できます。

  型: 文字列
+ password

  HTTP を使用して指定した `repository` への接続時に使用するパスワードです。パスワードの値に対する `SecureString`パラメータを参照するには、`{{ssm-secure:your-secure-string-parameter}}` の形式を使用できます。

  型: 文字列
 **sourceType `HTTP` には、以下を指定する必要があります。**  
+ url

  ダウンロードするファイルまたはディレクトリの URL です。

  型: 文字列
さらに、以下のオプションのパラメータを指定できます。  
+ allowInsecureDownload

  Secure Socket Layer (SSL) または Transport Layer Security (TLS) で暗号化されていない接続経由でダウンロードを実行できるかどうかを決定します。デフォルト値は `false` です。暗号化を使用せずにダウンロードを実行することは推奨されません。このようなダウンロードの実行を選択する場合は、ユーザーが関連するすべてのリスクに対する責任を負います。セキュリティは、AWS とお客様の間の共有責任です。これは、責任共有モデルと説明されます。詳細については、[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)を参照してください。

  タイプ: ブール値
+ authMethod

  指定した `url` への接続時の認証にユーザー名とパスワードを使用するかどうかを決定します。`Basic` または `Digest` を指定する場合は、`username` および `password` パラメータの値を入力する必要があります。`Digest` メソッドを使用するには、SSM Agent バージョン 3.0.1181.0 以降がインスタンスにインストールされている必要があります。`Digest` メソッドは、MD5 および SHA256 暗号化をサポートします。

  型: 文字列

  有効な値: `None` \$1 `Basic` \$1 `Digest`
+ username

  指定した `url` に `Basic` 認証を使用して接続するときに使用するユーザー名です。ユーザー名の値に対する `SecureString`パラメータを参照するには、`{{ssm-secure:your-secure-string-parameter}}` の形式を使用できます。

  型: 文字列
+ password

  指定した `url` に `Basic` 認証を使用して接続するときに使用するパスワードです。パスワードの値に対する `SecureString`パラメータを参照するには、`{{ssm-secure:your-secure-string-parameter}}` の形式を使用できます。

  型: 文字列
 **sourceType `S3` では以下を指定します。**  
+ パス: Amazon S3 からダウンロードするファイルまたはディレクトリの URL。
S3 バケットからファイルをダウンロードすると、ダウンロードディレクトリに .etag ファイルが生成されます。

```
{
    "path": "https://s3.amazonaws.com/amzn-s3-demo-bucket/powershell/helloPowershell.ps1" 
}
```
 **sourceType `SSMDocument` では、以下の*いずれか*を指定します。**  
+ 名前: `name:version` の形式のドキュメントの名前とバージョン。バージョンは省略できます。

  ```
  {
      "name": "Example-RunPowerShellScript:3" 
  }
  ```
+ name: `arn:aws:ssm:region:account_id:document/document_name` の形式のドキュメントの ARN。

  ```
  {
     "name":"arn:aws:ssm:us-east-2:3344556677:document/MySharedDoc"
  }
  ```

**destinationPath**  
ファイルのダウンロード先としてオプションで指定する、インスタンス上のローカルパス。パスを指定しない場合、コンテンツは、コマンド ID に相対的なパスにダウンロードされます。  
型: 文字列  
必須: いいえ

## `aws:psModule`
<a name="aws-psModule"></a>

Amazon EC2 インスタンスに PowerShell モジュールをインストールします。このプラグインは、Windows Server オペレーティングシステムでのみ実行されます。

### 構文
<a name="psModule-syntax"></a>

#### スキーマ 2.2
<a name="psModule-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:psModule
parameters:
  source:
    description: "(Required) The URL or local path on the instance to the application
      .zip file."
    type: String
mainSteps:
- action: aws:psModule
  name: psModule
  inputs:
    source: "{{ source }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:psModule",
  "parameters": {
    "source": {
      "description": "(Required) The URL or local path on the instance to the application .zip file.",
      "type": "String"
    }
  },
  "mainSteps": [
    {
      "action": "aws:psModule",
      "name": "psModule",
      "inputs": {
        "source": "{{ source }}"
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="domainJoin-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:psModule:
    properties:
    - runCommand: "{{ commands }}"
      source: "{{ source }}"
      sourceHash: "{{ sourceHash }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

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

```
{
   "runtimeConfig":{
      "aws:psModule":{
         "properties":[
            {
               "runCommand":"{{ commands }}",
               "source":"{{ source }}",
               "sourceHash":"{{ sourceHash }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### プロパティ
<a name="psModule-properties"></a>

**runCommand**  
モジュールのインストール後に実行する PowerShell コマンド。  
タイプ: StringList  
必須: いいえ

**source**  
アプリケーション`.zip` ファイルへのインスタンスの URL またはローカルパス。  
型: 文字列  
必須: はい

**sourceHash**  
`.zip` ファイルの SHA256 ハッシュ。  
型: 文字列  
必須: いいえ

**timeoutSeconds**  
コマンドが失敗したとみなされるまでの経過時間 (秒)。  
型: 文字列  
必須: いいえ

**workingDirectory**  
インスタンスの作業ディレクトリへのパス。  
型: 文字列  
必須: いいえ

## `aws:refreshAssociation`
<a name="aws-refreshassociation"></a>

(スキーマ バージョン 2.0 以降) 必要に応じて関連付けを更新 (強制適用) します。このアクションは、選択された関連付けで定義されている内容またはターゲットにバインドされているすべての関連付けに基づいてシステム状態を変更します。このプラグインは、Linux および Microsoft Windows Server オペレーティングシステムでのみ実行されます。

### 構文
<a name="refreshassociation-syntax"></a>

#### スキーマ 2.2
<a name="refreshassociation-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:refreshAssociation
parameters:
  associationIds:
    description: "(Optional) List of association IDs. If empty, all associations bound
      to the specified target are applied."
    type: StringList
mainSteps:
- action: aws:refreshAssociation
  name: refreshAssociation
  inputs:
    associationIds:
    - "{{ associationIds }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:refreshAssociation",
  "parameters": {
    "associationIds": {
      "description": "(Optional) List of association IDs. If empty, all associations bound to the specified target are applied.",
      "type": "StringList"
    }
  },
  "mainSteps": [
    {
      "action": "aws:refreshAssociation",
      "name": "refreshAssociation",
      "inputs": {
        "associationIds": [
          "{{ associationIds }}"
        ]
      }
    }
  ]
}
```

------

### 入力
<a name="refreshassociation-properties"></a>

**associationIds**  
関連付け ID の一覧。空の場合、指定されたターゲットにバインドされたすべての関連付けが適用されます。  
タイプ: StringList  
必須: いいえ

## `aws:runDockerAction`
<a name="aws-rundockeraction"></a>

(スキーマバージョン 2.0 以降) コンテナで Docker アクションを実行します。このプラグインは、Linux および Microsoft Windows Server オペレーティングシステムでのみ実行されます。

### 構文
<a name="rundockeraction-syntax"></a>

#### スキーマ 2.2
<a name="rundockeraction-syntax-2.2"></a>

------
#### [ YAML ]

```
---
mainSteps:
- action: aws:runDockerAction
  name: RunDockerAction
  inputs:
    action: "{{ action }}"
    container: "{{ container }}"
    image: "{{ image }}"
    memory: "{{ memory }}"
    cpuShares: "{{ cpuShares }}"
    volume: "{{ volume }}"
    cmd: "{{ cmd }}"
    env: "{{ env }}"
    user: "{{ user }}"
    publish: "{{ publish }}"
    workingDirectory: "{{ workingDirectory }}"
    timeoutSeconds: "{{ timeoutSeconds }}"
```

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

```
{
   "mainSteps":[
      {
         "action":"aws:runDockerAction",
         "name":"RunDockerAction",
         "inputs":{
            "action":"{{ action }}",
            "container":"{{ container }}",
            "image":"{{ image }}",
            "memory":"{{ memory }}",
            "cpuShares":"{{ cpuShares }}",
            "volume":"{{ volume }}",
            "cmd":"{{ cmd }}",
            "env":"{{ env }}",
            "user":"{{ user }}",
            "publish":"{{ publish }}",
            "workingDirectory": "{{ workingDirectory }}",
            "timeoutSeconds": "{{ timeoutSeconds }}"
         }
      }
   ]
}
```

------

### 入力
<a name="rundockeraction-properties"></a>

**action**  
実行するアクションのタイプ。  
型: 文字列  
必須: はい

**コンテナ**  
Docker コンテナ ID｡  
型: 文字列  
必須: いいえ

**イメージ**  
Docker イメージ名。  
型: 文字列  
必須: いいえ

**cmd**  
コンテナコマンド｡  
型: 文字列  
必須: いいえ

**メモリ**  
コンテナメモリの制限｡  
型: 文字列  
必須: いいえ

**cpuShares**  
コンテナの CPU シェア (相対重み)。  
型: 文字列  
必須: いいえ

**ボリューム**  
コンテナボリュームのマウント。  
タイプ: StringList  
必須: いいえ

**env**  
コンテナ環境変数。  
型: 文字列  
必須: いいえ

**ユーザー**  
コンテナユーザー名｡  
型: 文字列  
必須: いいえ

**publish**  
コンテナ公開されたポート。  
型: 文字列  
必須: いいえ

**workingDirectory**  
マネージドノードの作業ディレクトリへのパス。  
タイプ: 文字列  
必須: いいえ

**timeoutSeconds**  
コマンドが失敗したとみなされるまでの経過時間 (秒)。  
型: 文字列  
必須: いいえ

## `aws:runDocument`
<a name="aws-rundocument"></a>

(スキーマバージョン 2.0 以降) Systems Manager またはローカル共有に格納された SSM ドキュメントを実行します。このプラグインと [`aws:downloadContent`](#aws-downloadContent) プラグインを使用して、リモートの場所から SSM ドキュメントをローカル共有にダウンロードして実行できます。このプラグインは、Linux および Windows Server オペレーティングシステムでのみサポートされています｡ このプラグインは、`AWS-UpdateSSMAgent` ドキュメントの実行または `aws:updateSsmAgent` を使用するドキュメントをサポートしていません。

### 構文
<a name="rundocument-syntax"></a>

#### スキーマ 2.2
<a name="aws-rundocument-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runDocument
parameters:
  documentType:
    description: "(Required) The document type to run."
    type: String
    allowedValues:
    - LocalPath
    - SSMDocument
mainSteps:
- action: aws:runDocument
  name: runDocument
  inputs:
    documentType: "{{ documentType }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:runDocument",
  "parameters": {
    "documentType": {
      "description": "(Required) The document type to run.",
      "type": "String",
      "allowedValues": [
        "LocalPath",
        "SSMDocument"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:runDocument",
      "name": "runDocument",
      "inputs": {
        "documentType": "{{ documentType }}"
      }
    }
  ]
}
```

------

### 入力
<a name="rundocument-properties"></a>

**documentType**  
実行するドキュメントタイプ。ローカルドキュメント (`LocalPath`) または Systems Manager (`SSMDocument`) に保存されているドキュメントを実行できます。  
型: 文字列  
必須: はい

**documentPath**  
ドキュメントへのパス。`documentType` が `LocalPath` の場合は、ローカル共有上のドキュメントへのパスを指定します。`documentType` が `SSMDocument` の場合は、ドキュメントの名前を指定します。  
型: 文字列  
必須: いいえ

**documentParameters**  
ドキュメントのパラメータ。  
型: StringMap  
必須: いいえ

## `aws:runPowerShellScript`
<a name="aws-runPowerShellScript"></a>

PowerShell スクリプトを実行するか、またはスクリプトを実行するパスを指定します。このプラグインは、Microsoft Windows Server および Linux オペレーティングシステムでのみ実行されます。

### 構文
<a name="runPowerShellScript-syntax"></a>

#### スキーマ 2.2
<a name="runPowerShellScript-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runPowerShellScript
parameters:
  commands:
    type: String
    description: "(Required) The commands to run or the path to an existing script
      on the instance."
    default: Write-Host "Hello World"
mainSteps:
- action: aws:runPowerShellScript
  name: runPowerShellScript
  inputs:
    timeoutSeconds: '60'
    runCommand:
    - "{{ commands }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:runPowerShellScript",
  "parameters": {
    "commands": {
      "type": "String",
      "description": "(Required) The commands to run or the path to an existing script on the instance.",
      "default": "Write-Host \"Hello World\""
    }
  },
  "mainSteps": [
    {
      "action": "aws:runPowerShellScript",
      "name": "runPowerShellScript",
      "inputs": {
        "timeoutSeconds": "60",
        "runCommand": [
          "{{ commands }}"
        ]
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="runPowerShellScript-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:runPowerShellScript:
    properties:
    - id: 0.aws:runPowerShellScript
      runCommand: "{{ commands }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

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

```
{
   "runtimeConfig":{
      "aws:runPowerShellScript":{
         "properties":[
            {
               "id":"0.aws:runPowerShellScript",
               "runCommand":"{{ commands }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### プロパティ
<a name="runPowerShellScript-properties"></a>

**runCommand**  
実行するコマンド、またはインスタンス上の既存のスクリプトへのパスを指定します。  
タイプ: StringList  
必須: はい

**timeoutSeconds**  
コマンドが失敗したとみなされるまでの経過時間 (秒)。タイムアウトに達すると、Systems Manager はコマンドの実行を停止します。  
型: 文字列  
必須: いいえ

**workingDirectory**  
インスタンスの作業ディレクトリへのパス。  
型: 文字列  
必須: いいえ

## `aws:runShellScript`
<a name="aws-runShellScript"></a>

Linux シェルスクリプトを実行するか、またはスクリプトを実行するパスを指定します。このプラグインは、Linux オペレーティングシステム上のみで実行されます。

### 構文
<a name="runShellScript-syntax"></a>

#### スキーマ 2.2
<a name="runShellScript-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runShellScript
parameters:
  commands:
    type: String
    description: "(Required) The commands to run or the path to an existing script
      on the instance."
    default: echo Hello World
mainSteps:
- action: aws:runShellScript
  name: runShellScript
  inputs:
    timeoutSeconds: '60'
    runCommand:
    - "{{ commands }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:runShellScript",
  "parameters": {
    "commands": {
      "type": "String",
      "description": "(Required) The commands to run or the path to an existing script on the instance.",
      "default": "echo Hello World"
    }
  },
  "mainSteps": [
    {
      "action": "aws:runShellScript",
      "name": "runShellScript",
      "inputs": {
        "timeoutSeconds": "60",
        "runCommand": [
          "{{ commands }}"
        ]
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="runShellScript-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:runShellScript:
    properties:
    - runCommand: "{{ commands }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

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

```
{
   "runtimeConfig":{
      "aws:runShellScript":{
         "properties":[
            {
               "runCommand":"{{ commands }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### プロパティ
<a name="runShellScript-properties"></a>

**runCommand**  
実行するコマンド、またはインスタンス上の既存のスクリプトへのパスを指定します。  
タイプ: StringList  
必須: はい

**timeoutSeconds**  
コマンドが失敗したとみなされるまでの経過時間 (秒)。タイムアウトに達すると、Systems Manager はコマンドの実行を停止します。  
型: 文字列  
必須: いいえ

**workingDirectory**  
インスタンスの作業ディレクトリへのパス。  
型: 文字列  
必須: いいえ

## `aws:softwareInventory`
<a name="aws-softwareinventory"></a>

(スキーマバージョン 2.0 以降) マネージドインスタンスのアプリケーション、ファイル、および設定に関するメタデータを収集します。このプラグインは、Linux および Microsoft Windows Server オペレーティングシステムでのみ実行されます。インベントリ収集を設定する際は、まず AWS Systems Manager State Manager の関連付けを作成します。関連付けが実行されると、Systems Manager はインベントリデータを収集します。最初に関連付けを作成せずに、`aws:softwareInventory` プラグインを呼び出そうとすると、システムは次のエラーを返します。

```
The aws:softwareInventory plugin can only be invoked via ssm-associate.
```

インスタンスには、一度に 1 つのインベントリのみ関連付けることができます。インスタンスに 2 つ以上関連付けを設定した場合、そのインベントリの関連付けは実行されず、インベントリデータは収集されません。インベントリの収集の詳細については、「[AWS Systems Manager インベントリ](systems-manager-inventory.md)」を参照してください。

### 構文
<a name="softwareinventory-syntax"></a>

#### スキーマ 2.2
<a name="softwareinventory-syntax-2.2"></a>

------
#### [ YAML ]

```
---
mainSteps:
- action: aws:softwareInventory
  name: collectSoftwareInventoryItems
  inputs:
    applications: "{{ applications }}"
    awsComponents: "{{ awsComponents }}"
    networkConfig: "{{ networkConfig }}"
    files: "{{ files }}"
    services: "{{ services }}"
    windowsRoles: "{{ windowsRoles }}"
    windowsRegistry: "{{ windowsRegistry}}"
    windowsUpdates: "{{ windowsUpdates }}"
    instanceDetailedInformation: "{{ instanceDetailedInformation }}"
    customInventory: "{{ customInventory }}"
```

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

```
{
   "mainSteps":[
      {
         "action":"aws:softwareInventory",
         "name":"collectSoftwareInventoryItems",
         "inputs":{
            "applications":"{{ applications }}",
            "awsComponents":"{{ awsComponents }}",
            "networkConfig":"{{ networkConfig }}",
            "files":"{{ files }}",
            "services":"{{ services }}",
            "windowsRoles":"{{ windowsRoles }}",
            "windowsRegistry":"{{ windowsRegistry}}",
            "windowsUpdates":"{{ windowsUpdates }}",
            "instanceDetailedInformation":"{{ instanceDetailedInformation }}",
            "customInventory":"{{ customInventory }}"
         }
      }
   ]
}
```

------

### 入力
<a name="softwareinventory-properties"></a>

**applications**  
(オプション) インストールされているアプリケーションのメタデータを収集します。  
型: 文字列  
必須: いいえ

**awsComponents**  
(オプション) amazon-ssm-agent などの AWS コンポーネントのメタデータを収集します。  
型: 文字列  
必須: いいえ

**ファイル**  
(オプション: SSM Agent バージョン 2.2.64.0 以降が必要) ファイル名、ファイル作成時間、ファイルの最終変更時間および最新アクセス時間、およびファイルサイズを含むファイルのメタデータを収集します (これらはほんの数例です)。ファイルインベントリの収集の詳細については、「[ファイルと Windows レジストリインベントリで作業する](inventory-file-and-registry.md)」を参照してください。  
型: 文字列  
必須: いいえ

**networkConfig**  
(オプション) ネットワーク設定のメタデータを収集します。  
型: 文字列  
必須: いいえ

**billingInfo**  
(オプション) AMI の請求コードに関連付けられたプラットフォーム情報のメタデータを収集します。  
タイプ: 文字列  
必須: いいえ

**windowsUpdates**  
(オプション) すべての Windows アップデートのメタデータを収集します。  
型: 文字列  
必須: いいえ

**InstanceDetailedInformation**  
(オプション) CPU モデル、速度、コア数を含む、デフォルトのインベントリプラグイン (`aws:instanceInformation`) によって提供されるよりも多くのインスタンス情報を収集します (これらはほんの数例です)。  
型: 文字列  
必須: いいえ

**サービス**  
(オプション: Windows OS のみ、SSM Agent バージョン 2.2.64.0 以降が必要) サービス設定のメタデータを収集します。  
タイプ: 文字列  
必須: いいえ

**windowsRegistry**  
(オプション: Windows OS のみ、SSM Agent バージョン 2.2.64.0 以降が必要) Windows レジストリキーと値を収集します。キーパスを選択して、すべてのキーと値を再帰的に収集できます。指定するパスで指定するレジストリキーおよびその値を収集することもできます。インベントリは、キーパス、名前、タイプ、値を収集します。Windows レジストリインベントリの収集についての詳細は、「[ファイルと Windows レジストリインベントリで作業する](inventory-file-and-registry.md)」を参照してください。  
型: 文字列  
必須: いいえ

**windowsRoles**  
(オプション: Windows OS のみ、SSM Agent バージョン 2.2.64.0 以降が必要) Microsoft Windows ロール設定のメタデータを収集します。  
タイプ: 文字列  
必須: いいえ

**customInventory**  
(オプション) カスタムインベントリのデータを収集します。カスタムインベントリの詳細については、「[カスタムインベントリの操作](inventory-custom.md)」を参照してください。  
型: 文字列  
必須: いいえ

**customInventoryDirectory**  
(オプション) 指定したディレクトリからカスタムインベントリデータを収集します。カスタムインベントリの詳細については、「[カスタムインベントリの操作](inventory-custom.md)」を参照してください。  
型: 文字列  
必須: いいえ

## `aws:updateAgent`
<a name="aws-updateagent"></a>

EC2Config サービスを最新バージョンに更新するか、または古いバージョンを指定します｡ このプラグインは、Microsoft Windows Server オペレーティングシステムでのみ実行されます。EC2Config サービスの詳細については、「Amazon EC2 ユーザーガイド」の「[EC2Config サービスを使用した Windows インスタンスの設定 (レガシー)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2config-service.html)」を参照してください。

### 構文
<a name="updateagent-syntax"></a>

#### スキーマ 2.2
<a name="updateagent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:updateAgent
mainSteps:
- action: aws:updateAgent
  name: updateAgent
  inputs:
    agentName: Ec2Config
    source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:updateAgent",
  "mainSteps": [
    {
      "action": "aws:updateAgent",
      "name": "updateAgent",
      "inputs": {
        "agentName": "Ec2Config",
        "source": "https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json"
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="updateagent-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:updateAgent:
    properties:
      agentName: Ec2Config
      source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
      allowDowngrade: "{{ allowDowngrade }}"
      targetVersion: "{{ version }}"
```

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

```
{
   "runtimeConfig":{
      "aws:updateAgent":{
         "properties":{
            "agentName":"Ec2Config",
            "source":"https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json",
            "allowDowngrade":"{{ allowDowngrade }}",
            "targetVersion":"{{ version }}"
         }
      }
   }
}
```

------

### プロパティ
<a name="updateagent-properties"></a>

**agentName**  
EC2Config。これは、EC2Config サービスを実行するエージェントの名前です。  
型: 文字列  
必須: はい

**allowDowngrade**  
EC2Config サービスを以前のバージョンにダウングレードできるようにします。false に設定すると、サービスは新しいバージョンにのみアップグレードできます (デフォルト)。true に設定すると、以前のバージョンを指定します。  
タイプ: ブール値  
必須: いいえ

**source**  
Systems Manager がインストールする EC2Config のバージョンをコピーする場所。この場所は変更できません。  
型: 文字列  
必須: はい

**targetVersion**  
インストールする EC2Config サービスの特定のバージョン。指定しない場合、サービスは最新バージョンに更新されます。  
型: 文字列  
必須: いいえ

## `aws:updateSsmAgent`
<a name="aws-updatessmagent"></a>

SSM Agent を最新バージョンに更新するか、古いバージョンを指定します｡ このプラグインは、Linux および Windows Server オペレーティングシステムでのみ実行されます。詳細については、「[「SSM Agent」 の使用](ssm-agent.md)」を参照してください。

### 構文
<a name="updateSSMagent-syntax"></a>

#### スキーマ 2.2
<a name="updateaSSMgent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:updateSsmAgent
parameters:
  allowDowngrade:
    default: 'false'
    description: "(Optional) Allow the Amazon SSM Agent service to be downgraded to
      an earlier version. If set to false, the service can be upgraded to newer versions
      only (default). If set to true, specify the earlier version."
    type: String
    allowedValues:
    - 'true'
    - 'false'
mainSteps:
- action: aws:updateSsmAgent
  name: updateSSMAgent
  inputs:
    agentName: amazon-ssm-agent
    source: https://s3.{Region}.amazonaws.com/amazon-ssm-{Region}/ssm-agent-manifest.json
    allowDowngrade: "{{ allowDowngrade }}"
```

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

```
{
  "schemaVersion": "2.2",
  "description": "aws:updateSsmAgent",
  "parameters": {
    "allowDowngrade": {
      "default": "false",
      "description": "(Required) Allow the Amazon SSM Agent service to be downgraded to an earlier version. If set to false, the service can be upgraded to newer versions only (default). If set to true, specify the earlier version.",
      "type": "String",
      "allowedValues": [
        "true",
        "false"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:updateSsmAgent",
      "name": "awsupdateSsmAgent",
      "inputs": {
        "agentName": "amazon-ssm-agent",
        "source": "https://s3.{Region}.amazonaws.com/amazon-ssm-{Region}/ssm-agent-manifest.json",
        "allowDowngrade": "{{ allowDowngrade }}"
      }
    }
  ]
}
```

------

#### スキーマ 1.2
<a name="updateaSSMgent-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:updateSsmAgent:
    properties:
    - agentName: amazon-ssm-agent
      source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
      allowDowngrade: "{{ allowDowngrade }}"
```

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

```
{
   "runtimeConfig":{
      "aws:updateSsmAgent":{
         "properties":[
            {
               "agentName":"amazon-ssm-agent",
               "source":"https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json",
               "allowDowngrade":"{{ allowDowngrade }}"
            }
         ]
      }
   }
}
```

------

### プロパティ
<a name="updateSSMagent-properties"></a>

**agentName**  
amazon-ssm-agent｡ これは、リクエストを処理してインスタンス上でコマンドを実行する Systems Manager Agent の名前です。  
型: 文字列  
必須: はい

**allowDowngrade**  
SSM Agent を以前のバージョンにダウングレードできるようにします。false に設定すると、エージェントは新しいバージョンにのみアップグレードできます (デフォルト)。true に設定すると、以前のバージョンを指定します。  
タイプ: ブール値  
必須: はい

**ソース**  
Systems Manager がインストールする SSM Agent のバージョンをコピーする場所。この場所は変更できません。  
型: 文字列  
必須: はい

**targetVersion**  
インストールする SSM Agent の特定のバージョン。指定しない場合、エージェントは最新バージョンに更新されます。  
型: 文字列  
必須: いいえ

# SSM ドキュメントコンテンツを作成する
<a name="documents-creating-content"></a>

AWS Systems Manager のパブリックドキュメントが AWS リソースで実行したいすべてのアクションを実行しない場合は、独自の SSM ドキュメントを作成できます。コンソールを使用して SSM ドキュメントのクローンを作成することもできます。ドキュメントのクローンにより、既存のドキュメントから変更可能な新しいドキュメントにコンテンツをコピーします。作成またはクローンするドキュメントは、その内容が 64KB を超えることはできません。このクォータには、ランタイム時に入力パラメータで指定される内容も含みます。新しい `Command` または `Policy` ドキュメントを作成する場合は、ドキュメントの編集、バージョンの自動管理、順序付けなどの最新の機能を利用できるように、スキーマバージョン 2.2 以降を使用することをお勧めします。

## SSM ドキュメントコンテンツを書き込む
<a name="writing-ssm-doc-content"></a>

独自の SSM ドキュメントコンテンツを作成するには、SSM ドキュメントで使用できるさまざまなスキーマ、機能、プラグイン、および構文を理解することが重要です。次のリソースに精通することをお勧めします。
+  [独自の AWS Systems Manager ドキュメントを作成する](https://aws.amazon.com/blogs//mt/writing-your-own-aws-systems-manager-documents/) 
+  [データ要素とパラメータ](documents-syntax-data-elements-parameters.md) 
+  [スキーマ、機能、および例](documents-schemas-features.md) 
+  [コマンドドキュメントプラグインリファレンス](documents-command-ssm-plugin-reference.md) 
+  [Systems Manager Automation アクションのリファレンス](automation-actions.md) 
+  [オートメーションシステム変数](automation-variables.md) 
+  [その他のランブックの例](automation-document-examples.md) 
+  AWS Toolkit for Visual Studio Code を使用して、[Systems Manager オートメーションランブックを操作する](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html) 
+  [オートメーションランブックのビジュアルデザインエクスペリエンス](automation-visual-designer.md) 
+  [ランブックでのスクリプトの使用](automation-document-script-considerations.md) 

AWS の事前に定義された SSM ドキュメントでは、必要なアクションの一部を実行することがあります。これらのドキュメントは、ドキュメントタイプに応じて、カスタム SSM ドキュメント内で、`aws:runDocument`、`aws:runCommand`、または `aws:executeAutomation` プラグインを使用して呼び出すことができます。また、これらのドキュメントの一部をカスタム SSM ドキュメントにコピーし、要件に合わせてコンテンツを編集することもできます。

**ヒント**  
SSM ドキュメントコンテンツを作成する場合、テスト中にコンテンツを変更し、SSM ドキュメントを数回更新することがあります。次のコマンドでは、最新のコンテンツで SSM ドキュメントを更新し、ドキュメントのデフォルトバージョンをドキュメントの最新バージョンに更新します。  
Linux および Windows のコマンドでは、`jq` コマンドラインツールを使用して JSON レスポンスデータをフィルタリングします。

```
latestDocVersion=$(aws ssm update-document \
    --content file://path/to/file/documentContent.json \
    --name "ExampleDocument" \
    --document-format JSON \
    --document-version '$LATEST' \
    | jq -r '.DocumentDescription.LatestVersion')

aws ssm update-document-default-version \
    --name "ExampleDocument" \
    --document-version $latestDocVersion
```

```
latestDocVersion=$(aws ssm update-document ^
    --content file://C:\path\to\file\documentContent.json ^
    --name "ExampleDocument" ^
    --document-format JSON ^
    --document-version "$LATEST" ^
    | jq -r '.DocumentDescription.LatestVersion')

aws ssm update-document-default-version ^
    --name "ExampleDocument" ^
    --document-version $latestDocVersion
```

```
$content = Get-Content -Path "C:\path\to\file\documentContent.json" | Out-String
$latestDocVersion = Update-SSMDocument `
    -Content $content `
    -Name "ExampleDocument" `
    -DocumentFormat "JSON" `
    -DocumentVersion '$LATEST' `
    | Select-Object -ExpandProperty LatestVersion

Update-SSMDocumentDefaultVersion `
    -Name "ExampleDocument" `
    -DocumentVersion $latestDocVersion
```

### SSM ドキュメントのセキュリティベストプラクティス
<a name="ssm-document-security-practices"></a>

SSM ドキュメントを作成するときは、以下のセキュリティベストプラクティスに従うことで、コマンドインジェクションを防ぎ、安全なパラメータ処理を確保できます。
+ コマンドまたはスクリプトに使用する文字列パラメータには、環境変数補間を使用します。文字列パラメータに、値が `ENV_VAR` である `interpolationType` プロパティを追加します。

  ```
  {
      "command": {
          "type": "String",
          "description": "Command to execute",
          "interpolationType": "ENV_VAR"
      }
  }
  ```

  補間により配信される値で二重引用符を受け入れないように指定することで、SSM ドキュメントのセキュリティをさらに高めることができます。

  ```
  {
      "command": {
          "type": "String",
          "description": "Command to execute",
          "interpolationType": "ENV_VAR",
              "allowedPattern": "^[^"]*$"
      }
  }
  ```
+ インタプリタ型言語 (Python、Ruby、Node.js など) を使用するときは、適切な環境変数構文を使用してパラメータを参照します。

  ```
  # Python example
  import os
  command = os.environ['SSM_Message']
  ```
+ 古い SSM Agent バージョン (バージョン 3.3.2746.0 以前) との下位互換性を保つため、環境変数のフォールバックロジックを含めます。

  ```
  if [ -z "${SSM_command+x}" ]; then
      export SSM_command="{{command}}"
  fi
  ```
+ 環境変数補間を `allowedPattern` と組み合わせて追加の入力検証を行います。次の例では、`allowedPattern` 値の `^[^"]*$` が、文字列値で二重引用符が使用されることを特に防いでいます。

  ```
  {
      "command": {
          "type": "String",
          "interpolationType": "ENV_VAR",
          "allowedPattern": "^[a-zA-Z0-9_-]+$"
      }
  }
  ```
+ SSM ドキュメントを実装するときは、事前に次のセキュリティ上の考慮事項を確認します。
  + ユーザー入力を受け入れるすべての文字列パラメータは、環境変数補間を必要に応じて使用する。
  + 入力検証は、可能な限り `allowedPattern` を使用して実装する。
  + ドキュメントに、パラメータを処理するための適切なエラー処理が含まれている。
  + SSM Agent の古いバージョンを使用する環境向けに下位互換性が保たれている。

Systems Manager がアクセスする AWS サービス所有リソースについて、およびデータ境界ポリシーの設定方法については、「[AWS Systems Manager におけるデータ境界](data-perimeters.md)」を参照してください。

## SSM ドキュメントの複製
<a name="cloning-ssm-document"></a>

Systems Manager のドキュメントコンソールを使用して、AWS Systems Manager のドキュメントのクロ―ンを作成し、SSM ドキュメントを作成できます。SSM ドキュメントの複製により、既存のドキュメントから変更可能な新しいドキュメントにコンテンツをコピーします。64KB を超えるドキュメントをクローンすることはできません。

**SSM ドキュメントを複製するには**

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

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

1. 検索ボックスに、複製するドキュメントの名前を入力します。

1. 複製するドキュメントの名前を選択し、「**アクション**」ドロップダウンで「**ドキュメントの複製**」を選択します。

1. 必要に応じてドキュメントを変更し、[**ドキュメントの作成**] を選択してドキュメントを保存します。

SSM ドキュメントコンテンツを作成したら、次のいずれかの方法を使用して、コンテンツを使って SSM ドキュメントを作成できます。

**Topics**
+ [SSM ドキュメントコンテンツを書き込む](#writing-ssm-doc-content)
+ [SSM ドキュメントの複製](#cloning-ssm-document)
+ [複合ドキュメントの作成](#documents-creating-composite)

## 複合ドキュメントの作成
<a name="documents-creating-composite"></a>

*複合* AWS Systems Manager (SSM) ドキュメントは、1 つまたは複数のセカンダリ SSM ドキュメントを実行して一連のアクションを実行するカスタムドキュメントです。複合ドキュメントは、ブートストラップソフトウェアやドメイン結合インスタンスなどの一般的なタスク用の標準 SSM ドキュメントセットを作成できるようにすることで、*Infrastructure as Code (コードとしてのインフラストラクチャ)*を推進します。これらのドキュメントを同じ AWS リージョン の AWS アカウント 間で共有して、SSM ドキュメントのメンテナンスを減らし、整合性を確保することができます。

たとえば、次のアクションを実行する複合ドキュメントを作成できます｡

1. 許可リストのすべてのパッチをインストールする。

1. ウイルス対策ソフトウェアをインストールする｡

1. GitHub からスクリプトをダウンロードして実行する。

この例では、カスタム SSM ドキュメントに以下のアクションを実行するためのプラグインが含まれています。

1. `AWS-RunPatchBaseline` ドキュメントを実行する `aws:runDocument` プラグインは、すべての許可されたリストのパッチをインストールします。

1. `aws:runDocument` ドキュメントを実行する `AWS-InstallApplication` プラグインは、ウイルス対策ソフトウェアをインストールします。

1. `aws:downloadContent` プラグインは、GitHub からスクリプトをダウンロードして実行します。

複合ドキュメントとセカンダリドキュメントは、Systems Manager、GitHub (パブリックおよびプライベートリポジトリ)、または Amazon S3 に保存できます。複合ドキュメントおよびセカンダリドキュメントは JSON あるいは YAML で作成できます。

**注記**  
複合ドキュメントは最大 3 階層のドキュメントまでしか実行できません。つまり、複合ドキュメントは子ドキュメントを呼び出すことができます。その子ドキュメントは最後の 1 つのドキュメントを呼び出すことができます。

複合ドキュメントを作成するには、カスタム SSM ドキュメントで [`aws:runDocument`](documents-command-ssm-plugin-reference.md#aws-rundocument) プラグインを開き、必要な入力を指定します。以下に、次のアクションを実行する複合ドキュメントの例を示します｡

1. [`aws:downloadContent`](documents-command-ssm-plugin-reference.md#aws-downloadContent) プラグインを実行して、GitHub パブリックリポジトリからブートストラップというローカルディレクトリに SSM ドキュメントをダウンロードします。SSM ドキュメントは StateManagerBootstrap.yml (YAML ドキュメント) と呼ばれます。

1. `aws:runDocument` プラグインを実行して StateManagerBootstrap.yml ドキュメントを実行します。パラメータは指定されません。

1. `aws:runDocument` プラグインを実行して `AWS-ConfigureDocker pre-defined` SSM ドキュメントを実行します。指定されたパラメータが、インスタンスに Docker をインストールします。

```
{
  "schemaVersion": "2.2",
  "description": "My composite document for bootstrapping software and installing Docker.",
  "parameters": {
  },
  "mainSteps": [
    {
      "action": "aws:downloadContent",
      "name": "downloadContent",
      "inputs": {
        "sourceType": "GitHub",
        "sourceInfo": "{\"owner\":\"TestUser1\",\"repository\":\"TestPublic\", \"path\":\"documents/bootstrap/StateManagerBootstrap.yml\"}",
        "destinationPath": "bootstrap"
      }
    },
    {
      "action": "aws:runDocument",
      "name": "runDocument",
      "inputs": {
        "documentType": "LocalPath",
        "documentPath": "bootstrap",
        "documentParameters": "{}"
      }
    },
    {
      "action": "aws:runDocument",
      "name": "configureDocker",
      "inputs": {
        "documentType": "SSMDocument",
        "documentPath": "AWS-ConfigureDocker",
        "documentParameters": "{\"action\":\"Install\"}"
      }
    }
  ]
}
```

**詳細情報**  
+ Run Command を使用してスクリプトを呼び出すときに使用するサーバーとインスタンスの再起動については、「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。
+ カスタム SSM ドキュメントに追加できるプラグインの詳細については、「[コマンドドキュメントプラグインリファレンス](documents-command-ssm-plugin-reference.md)」を参照してください。
+ 複合ドキュメントを作成せずにリモートロケーションからドキュメントを実行するだけの場合は、「[遠隔で ドキュメントを実行する](documents-running-remote-github-s3.md)」を参照してください。

# ドキュメントでの作業
<a name="documents-using"></a>

このセクションには、SSM ドキュメントの使用方法と操作方法に関する情報が含まれています。

**Topics**
+ [SSM ドキュメントのバージョンを比較する](comparing-versions.md)
+ [SSM ドキュメントを作成する](create-ssm-console.md)
+ [カスタム SSM ドキュメントの削除](deleting-documents.md)
+ [遠隔で ドキュメントを実行する](documents-running-remote-github-s3.md)
+ [SSM ドキュメントの共有](documents-ssm-sharing.md)
+ [SSM ドキュメントを検索する](ssm-documents-searching.md)

# SSM ドキュメントのバージョンを比較する
<a name="comparing-versions"></a>

Systems Manager ドキュメントコンソールで、AWS Systems Manager (SSM) ドキュメントのバージョン間のコンテンツの違いを比較できます。SSM ドキュメントのバージョンを比較するときは、バージョンのコンテンツの違いが強調表示されます。

**SSM ドキュメントのコンテンツを比較する (コンソール)**

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

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

1. ドキュメントのリストから、コンテンツを比較するドキュメントを選択します。

1. [**Content**] (コンテンツ) タブで [**Compare versions**] (バージョンを比較) をクリックして、コンテンツを比較するドキュメントのバージョンを選択します。

# SSM ドキュメントを作成する
<a name="create-ssm-console"></a>

カスタム SSM ドキュメントのコンテンツを作成した後、[SSM ドキュメントコンテンツを書き込む](documents-creating-content.md#writing-ssm-doc-content) の説明に従って Systems Manager コンソールを使用し、コンテンツを使って SSM ドキュメントを作成できます。

**SSM ドキュメントを作成するには**

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

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

1. [**Create command or session (コマンドまたはセッションの作成)**] を選択します。

1. ドキュメントの説明的な名前を入力します。

1. (オプション) [**Target type (ターゲットタイプ)**] で、ドキュメントを実行できるリソースの種類を指定します。

1. [**ドキュメントタイプ**] リストで、作成するドキュメントのタイプを選択します。

1. [**Content (コンテンツ)**] フィールドの括弧を削除した後に、先に作成したドキュメントコンテンツを貼り付けます。

1. (オプション) [**Document tags (ドキュメントタグ)**] セクションで、1 つ以上のタグキーの名前と値のペアをドキュメントに適用します。

   タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。たとえば、ドキュメントにタグを付けて、ドキュメントが実行するタスクの種類、ターゲットとするオペレーティングシステムの種類、およびドキュメントが動作する環境を指定できます。この場合、以下のキーの名前と値のペアを指定します。
   + `Key=TaskType,Value=MyConfigurationUpdate`
   + `Key=OS,Value=AMAZON_LINUX_2`
   + `Key=Environment,Value=Production`

1. [**ドキュメントの作成**] を選択してドキュメントを保存します。

# カスタム SSM ドキュメントの削除
<a name="deleting-documents"></a>

カスタム SSM ドキュメントを使用する必要がなくなった場合は、AWS Systems Manager コンソールを使用して削除できます。

**SSM ドキュメントを削除するには**

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

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

1. 削除したいドキュメントを選択します。

1. [**削除**] を選択します。ドキュメントを削除するように求められたら、[**削除**] を選択します。

コマンドラインツールまたは SDK を使用して SSM ドキュメントを削除する例については、「[AWS SDK または CLI で `DeleteDocument` を使用する](example_ssm_DeleteDocument_section.md)」を参照してください。

# 遠隔で ドキュメントを実行する
<a name="documents-running-remote-github-s3"></a>

`AWS-RunDocument` 事前定義 SSM ドキュメントを使用すると、リモートの場所から AWS Systems Manager (SSM) ドキュメントを実行できます。このドキュメントでは、次の場所に保存されている SSM ドキュメントの実行がサポートされています。
+ パブリックおよびプライベート GitHub リポジトリ (GitHub Enterprise はサポートされていません)
+ Amazon S3 バケット
+ Systems Manager

AWS Systems Manager のツールである State Manager または Automation を使用してリモートドキュメントを実行することもできますが、次の手順では、Systems Manager コンソールで AWS Systems Manager Run Command を使用してリモート SSM ドキュメントを実行する方法のみを説明します。

**注記**  
`AWS-RunDocument` は、コマンドタイプの SSM ドキュメントのみを実行するために使用でき、Automation ランブックなど他のタイプは実行できません。`AWS-RunDocument` は、`aws:downloadContent` プラグインを使用します。`aws:downloadContent` の詳細については、「[`aws:downloadContent`](documents-command-ssm-plugin-reference.md#aws-downloadContent)」を参照してください。

**警告**  
`AWS-RunDocument` は、さまざまなソース (SSM ドキュメント、GitHub、S3、URL) からドキュメントコンテンツを実行できます。リモートドキュメントを実行する場合、評価される IAM アクセス許可は、リモートドキュメント `ssm:GetDocument` と `AWS-RunDocument` の `ssm:SendCommand` です。特定の SSM ドキュメントへのアクセスを拒否する IAM ポリシーがある場合、`AWS-RunDocument` アクセス許可を持つユーザーは、ドキュメントコンテンツをパラメータとして渡すことで、これらの拒否されたドキュメントを引き続き実行できます。これは、同じドキュメント固有の IAM 制限の対象にならない場合があります。  
ドキュメント実行を適切に制限するには、次のいずれかの方法を使用します。  
**許可リストで承認されたソース**: ネストされたドキュメント実行を使用する必要がある場合、SSM ドキュメントソースの `ssm:GetDocument` を制御する IAM ポリシー、Amazon S3 ソースの IAM と Amazon S3 バケットポリシー、パブリックインターネットソースのネットワーク設定 (VPC エンドポイントやセキュリティグループなど) のソースタイプごとに適切なコントロールを使用して承認されたソースのみにアクセスを制限します。
**AWS-RunDocument へのアクセスを制限する**: ネストされたドキュメント実行を防ぐために、`AWS-RunDocument` の `ssm:SendCommand`、および IAM ポリシーで `aws:runDocument`プラグインを使用するその他のすべてのドキュメントを拒否します。
**アクセス許可の境界を使用する**: IAM アクセス許可の境界を実装してユーザーの最大アクセス許可を設定し、実行方法に関係なく、ユーザーが承認されていないドキュメントを実行できないようにします。
IAM のベストプラクティスとアクセス許可の境界の詳細については、AWS Identity and Access Management ユーザーガイドの「[Permissions boundaries for IAM entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。

**[開始する前に]**  
リモートドキュメントを実行する前に、次のタスクを完了する必要があります。
+ SSM コマンドドキュメントを作成し、リモートの場所に保存します。詳細については、[SSM ドキュメントコンテンツを作成する](documents-creating-content.md)を参照してください。
+ プライベート GitHub リポジトリに保存されているリモートドキュメントを実行する場合は、GitHub セキュリティアクセストークンの Systems Manager `SecureString` パラメータを作成する必要があります。SSH 経由でトークンを手動で渡すことで、プライベート GitHub リポジトリのリモートドキュメントにアクセスすることはできません。アクセストークンは、Systems Manager `SecureString` パラメータとして渡す必要があります。`SecureString` パラメータの作成の詳細については、「[Systems Manager での Parameter Store パラメータの作成](sysman-paramstore-su-create.md)」を参照してください。

## リモートドキュメントを実行する (コンソール)
<a name="documents-running-remote-github-s3-console"></a>

**リモートドキュメントを実行するには**

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

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

1. [**Run command (コマンドの実行)**] を選択します。

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

1. [**Command parameters (コマンドパラメータ)**] で、[**Source Type (ソースタイプ)**] としてオプションを選択します。
   + **[GitHub]** を選択した場合は、**[ソース情報]** の情報を次の形式で指定します。

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "path": "path_to_document",
         "getOptions":"branch:branch_name",
         "tokenInfo": "{{ssm-secure:secure-string-token}}"
     }
     ```

     例えば、次のようになります。

     ```
     {
         "owner":"TestUser",
         "repository":"GitHubTestExamples",
         "path":"scripts/python/test-script",
         "getOptions":"branch:exampleBranch",
         "tokenInfo":"{{ssm-secure:my-secure-string-token}}"
     }
     ```
**注記**  
`getOptions` は、マスター以外のブランチまたはリポジトリ内の特定のコミットからコンテンツを取得するための追加オプションです。マスターブランチで最新のコミットを使用している場合は、`getOptions` を省略できます。`branch` は、SSM ドキュメントが `master` 以外のブランチに保存されている場合にのみ必要です。  
リポジトリ内の特定の*コミット*にあるバージョンの SSM ドキュメントを使用するには、`commitID` ではなく、`getOptions` を指定して `branch` を使用します。以下に例を示します。  

     ```
     "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
     ```
   + [**S3**] を選択した場合は、[**Source Info**] 情報を次の形式で指定します。

     ```
     {"path":"URL_to_document_in_S3"}
     ```

     以下に例を示します。

     ```
     {"path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/scripts/ruby/mySSMdoc.json"}
     ```
   + [**SSMDocument**] を選択した場合は、[**Source Info**] 情報を次の形式で指定します。

     ```
     {"name": "document_name"}
     ```

     以下に例を示します。

     ```
     {"name": "mySSMdoc"}
     ```

1. [**Document Parameters**] フィールドに、リモート SSM ドキュメントのパラメータを入力します。例えば、`AWS-RunPowerShell` ドキュメントを実行する場合、以下を指定できます。

   ```
   {"commands": ["date", "echo \"Hello World\""]}
   ```

   `AWS-ConfigureAWSPack` ドキュメントを実行する場合は、以下を指定できます。

   ```
   {
      "action":"Install",
      "name":"AWSPVDriver"
   }
   ```

1. **[Targets]** (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

1. **[その他のパラメータ]** で、以下の操作を行います。
   + **[コメント]** に、このコマンドに関する情報を入力します。
   + **[タイムアウト (秒)]** に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

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

**注記**  
Run Command を使用してスクリプトを呼び出すときに使用するサーバーとインスタンスの再起動については、「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。

# SSM ドキュメントの共有
<a name="documents-ssm-sharing"></a>

AWS Systems Manager (SSM) ドキュメントは、同じ AWS リージョン のアカウントとプライベートに共有することも、パブリックに共有することもできます。ドキュメントをプライベートに共有するには、ドキュメントのアクセス許可を変更して、特定の人物が AWS アカウント ID に基づいてドキュメントにアクセスできるようにします。SSM ドキュメントをパブリックに共有するには、ドキュメントのアクセス許可を変更し、[`All`] を指定します。ドキュメントをパブリックとプライベートで同時に共有することはできません。

**警告**  
信頼できるソースの共有 SSM ドキュメントのみ使用してください。共有ドキュメントを使用するときは、使用する前にドキュメントのコンテンツを慎重に確認し、インデックスの設定がどのように変わるかを理解してください。共有ドキュメントのベストプラクティスの詳細については、「[共有 SSM ドキュメントのベストプラクティス](#best-practices-shared)」を参照してください。

**制限事項**  
SSM ドキュメントの作業を始めるときは、次の制限事項に注意してください。
+ 所有者のみがドキュメントを共有できます。
+ ドキュメントを削除するには、その前にドキュメントの共有を停止する必要があります。詳細については、「[共有 SSM ドキュメントのアクセス許可を変更する](#modify-permissions-shared)」を参照してください。
+ 最大 1000 個の でドキュメントを共有できますAWS アカウント この制限の引き上げをリクエストするには、[サポート センター](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)までお問い合わせください。[**制限のタイプ**] で、[*EC2 Systems Manager*] を選択し、リクエストの理由を入力します。
+ パブリックに最大 5 件の SSM ドキュメントを共有できます。この制限の引き上げをリクエストするには、[サポート センター](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)までお問い合わせください。[**制限のタイプ**] で、[*EC2 Systems Manager*] を選択し、リクエストの理由を入力します。
+ ドキュメントは、同じ AWS リージョン の他のアカウントとのみ共有できます。クロスリージョン共有はサポートされていません。

**重要**  
Systems Manager において、*Amazon 所有*の SSM ドキュメントとは、Amazon Web Services 自体によって作成および管理されているドキュメントです。*Amazon 所有*のドキュメントでは、ドキュメント名に `AWS-*` のようなプレフィックスが含まれます。ドキュメントの所有者は、AWS 内の特定のユーザーアカウントではなく Amazon と見なされます。これらのドキュメントは公開されており、誰でも使用できます。

Systems Manager のService Quotas の詳細については、「[AWS Systems Manager の Service Quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。

**Topics**
+ [共有 SSM ドキュメントのベストプラクティス](#best-practices-shared)
+ [SSM ドキュメントのパブリック共有をブロックする](#block-public-access)
+ [SSM ドキュメントを共有する](#ssm-how-to-share)
+ [共有 SSM ドキュメントのアクセス許可を変更する](#modify-permissions-shared)
+ [共有 SSM ドキュメントを使用する](#using-shared-documents)

## 共有 SSM ドキュメントのベストプラクティス
<a name="best-practices-shared"></a>

共有ドキュメントを共有したり使用したりする前に、次のガイドラインを確認してください。

**機密情報を削除する**  
AWS Systems Manager (SSM) ドキュメントを慎重に確認して、機密情報があればそれを削除します。例えば、ドキュメントに AWS 認証情報が含まれていないことを確認します。特定のユーザーとドキュメントを共有する場合、そのユーザーはドキュメント内の情報を表示することができます。パブリックにドキュメントを共有する場合、誰でもドキュメント内の情報を表示することができます。

**ドキュメントのパブリック共有をブロックする**  
アカウント内のすべてのパブリック共有されている SSM ドキュメントを確認し、共有を継続するかどうかを確認します。特定のドキュメントのパブリック共有を停止するには、このトピックの [共有 SSM ドキュメントのアクセス許可を変更する](#modify-permissions-shared) セクションで説明しているように、そのドキュメントのアクセス許可設定を変更する必要があります。パブリック共有ブロック設定を有効にしても、現在パブリック共有しているドキュメントには影響しません。ユースケースでパブリック共有を有効にする必要がある場合を除き、Systems Manager ドキュメントコンソールの **[詳細設定]** セクションで、SSM ドキュメントのパブリック共有ブロック設定をオンにすることをお勧めします。この設定をオンにすると、SSM ドキュメントへの不要なアクセスを防止できます。パブリック共有のブロック設定は、アカウントレベルの設定で、各 AWS リージョン で異なる可能性があります。

**IAM 信頼ポリシーを使用して Run Command アクションを制限する**  
ドキュメントにアクセスできるユーザーに対する制限付き AWS Identity and Access Management (IAM) ポリシーを作成します。IAM ポリシーにより、ユーザーが Amazon Elastic Compute Cloud (Amazon EC2) コンソールで表示できるか、AWS Command Line Interface (AWS CLI) または AWS Tools for Windows PowerShell で `ListDocuments` を呼び出して表示できる SSM ドキュメントが決まります。このポリシーでは、SSM ドキュメントに対してユーザーが実行できるアクションも制限されます。制限付きポリシーを作成し、ユーザーが特定のドキュメントのみを表示するようにできます。詳細については、「[カスタマーマネージドポリシーの例](security_iam_id-based-policy-examples.md#customer-managed-policies)」を参照してください。

**共有 SSM ドキュメントを使用する際の注意事項**  
インスタンスで実行されるコマンドを理解するために、共有されている各ドキュメント (特にパブリックドキュメント) のコンテンツを確認します。ドキュメントは、実行後に意図的または非意図的に悪影響を及ぼすことがあります。ドキュメントが外部ネットワークを参照している場合、ドキュメントを使用する前に外部ソースを確認してください。

**ドキュメントハッシュを使用してコマンドを送信する**  
ドキュメントを共有する場合、システムは Sha-256 ハッシュを作成し、それをドキュメントに割り当てます。また、システムはドキュメントコンテンツのスナップショットを保存します。共有ドキュメントを使用してコマンドを送信するときは、コマンドでハッシュを指定して、次の条件が確実に該当するようにできます。  
+ 正しい Systems Manager ドキュメントからコマンドを実行している
+ ドキュメントが自分と共有されてからコンテンツが変更されていない
ハッシュが、指定されたドキュメントと一致しない場合、または共有ドキュメントのコンテンツが変更されている場合、コマンドは `InvalidDocument` 例外を返します。ハッシュは、外部の場所からドキュメントのコンテンツを確認することはできません。

**補間パラメータを使用してセキュリティを高める**  
SSM ドキュメントの `String` タイプのパラメータでは、パラメータと値 `interpolationType": "ENV_VAR` を使用して、パラメータ入力を潜在的に実行可能なコマンドではなく文字列リテラルとして処理することにより、コマンドインジェクション攻撃に対するセキュリティを高めます。この場合、エージェントは、パラメータの値を含む `SSM_parameter-name` という名前の環境変数を作成します。`String` タイプのパラメータを含む既存の SSM ドキュメントをすべて更新して `"interpolationType": "ENV_VAR"` を含めておくことが推奨されます。詳細については、「[SSM ドキュメントコンテンツを書き込む](documents-creating-content.md#writing-ssm-doc-content)」を参照してください。

## SSM ドキュメントのパブリック共有をブロックする
<a name="block-public-access"></a>

開始する前に、AWS アカウント でパブリック共有されている SSM ドキュメントをすべて確認し、共有を継続するかどうかを確認します。特定の SSM ドキュメントのパブリック共有を停止するには、このトピックの [共有 SSM ドキュメントのアクセス許可を変更する](#modify-permissions-shared) セクションで説明しているように、そのドキュメントのアクセス許可設定を変更する必要があります。パブリック共有ブロック設定を有効にしても、現在パブリック共有している SSM ドキュメントには影響しません。パブリック共有ブロック設定を有効にすると、追加の SSM ドキュメントをパブリック共有できなくなります。

ユースケースでパブリック共有を有効にする必要がある場合を除き、SSM ドキュメントのパブリック共有ブロック設定をオンにすることをお勧めします。この設定をオンにすると、SSM ドキュメントへの不要なアクセスを防止できます。パブリック共有のブロック設定は、アカウントレベルの設定で、各 AWS リージョン で異なる可能性があります。現在共有していない SSM ドキュメントについてパブリック共有をブロックするには、次のタスクを完了します。

### パブリック共有のブロック (コンソール)
<a name="block-public-access-console"></a>

**SSM ドキュメントのパブリック共有をブロックするには**

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

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

1. [**Preferences (設定)**] を選択してから、**パブリック共有のブロック**セクションにある [**編集**] を選択します。

1. [**パブリック共有のブロック**] のチェックボックスを選択してから、[**保存**]を選択します。

### パブリック共有のブロック (コマンドライン)
<a name="block-public-access-cli"></a>

AWS Command Line Interface(AWS CLI) を開く、またはローカルコンピュータの AWS Tools for Windows PowerShellを開き、以下のコマンドを実行してSSM ドキュメントのパブリック共有をブロックします。

------
#### [ Linux & macOS ]

```
aws ssm update-service-setting  \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --setting-value Disable \
    --region 'The AWS リージョン you want to block public sharing in'
```

------
#### [ Windows ]

```
aws ssm update-service-setting ^
    --setting-id /ssm/documents/console/public-sharing-permission ^
    --setting-value Disable ^
    --region "The AWS リージョン you want to block public sharing in"
```

------
#### [ PowerShell ]

```
Update-SSMServiceSetting `
    -SettingId /ssm/documents/console/public-sharing-permission `
    -SettingValue Disable `
    –Region The AWS リージョン you want to block public sharing in
```

------

以下のコマンドで、設定値が更新されたことを確認します。

------
#### [ Linux & macOS ]

```
aws ssm get-service-setting   \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --region The AWS リージョン you blocked public sharing in
```

------
#### [ Windows ]

```
aws ssm get-service-setting  ^
    --setting-id /ssm/documents/console/public-sharing-permission ^
    --region "The AWS リージョン you blocked public sharing in"
```

------
#### [ PowerShell ]

```
Get-SSMServiceSetting `
    -SettingId /ssm/documents/console/public-sharing-permission `
    -Region The AWS リージョン you blocked public sharing in
```

------

### IAM によるパブリック共有をブロックするためのアクセスの制限
<a name="block-public-access-changes-iam"></a>

AWS Identity and Access Management (IAM) ポリシーを作成して、ユーザーによるパブリック共有のブロック設定の変更を制限します。これにより、SSM ドキュメントへの不要なアクセスをユーザーが許可できなくなります。

以下は、ユーザーがパブリック共有をブロックする設定を更新できないようにする IAM ポリシーの例です。この例を使用するには、Amazon Web Services のアカウント ID の例を自分のアカウント ID に置き換える必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "ssm:UpdateServiceSetting",
            "Resource": "arn:aws:ssm:*:444455556666:servicesetting/ssm/documents/console/public-sharing-permission"
        }
    ]
}
```

------

## SSM ドキュメントを共有する
<a name="ssm-how-to-share"></a>

Systems Manager コンソールを使用して AWS Systems Manager (SSM) ドキュメントを共有できます。コンソールからドキュメントを共有する場合、共有できるのはドキュメントのデフォルトバージョンのみです。また、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、または AWS SDK を使用して、`ModifyDocumentPermission` API オペレーションを呼び出すことで、プログラムで SSM ドキュメントを共有することもできます。ドキュメントを共有する前に、共有するユーザーの AWS アカウント ID を取得します。ドキュメントを共有する場合に、これらのアカウント ID を指定します。

### ドキュメントを共有する (コンソール)
<a name="share-using-console"></a>

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

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

1. ドキュメントリストで共有するドキュメントを選択し、[**詳細を表示**] を選択します。[**Permissions**] タブで自分がドキュメントの所有者であることを確認します。ドキュメントの所有者のみがドキュメントを共有できます。

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

1. コマンドをパブリックに共有するには、[**Public**] を選択し、[**Save**] を選択します。コマンドをプライベートに共有するには、[**Private (プライベート)**] を選択し、AWS アカウント ID を入力します。次に、[**Add permission (アクセス権限の追加)**] を選択し、[**Save (保存)**] を選択します。

### ドキュメントの共有 (コマンドライン)
<a name="share-using-cli"></a>

次の手順では、コマンドラインセッションの AWS リージョン を指定する必要があります。

1. ローカルコンピュータで AWS CLI または AWS Tools for Windows PowerShell を開き、以下のコマンドを実行して認証情報を指定します。

   次のコマンドで、*[Region]* (リージョン) をユーザー自身の情報に置き換えます。サポートされている *region* 値の一覧については、「Amazon Web Services 全般のリファレンス」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」にある **Region** 列を参照してください。

------
#### [ Linux & macOS ]

   ```
   aws config
   
   AWS Access Key ID: [your key]
   AWS Secret Access Key: [your key]
   Default region name: region
   Default output format [None]:
   ```

------
#### [ Windows ]

   ```
   aws config
   
   AWS Access Key ID: [your key]
   AWS Secret Access Key: [your key]
   Default region name: region
   Default output format [None]:
   ```

------
#### [ PowerShell ]

   ```
   Set-AWSCredentials –AccessKey your key –SecretKey your key
   Set-DefaultAWSRegion -Region region
   ```

------

1. 次のコマンドを使用して、使用可能なすべての SSM ドキュメントの一覧を表示します。一覧には、作成したドキュメント、および自分と共有されたドキュメントが含まれます。

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

1. 特定のドキュメントを取得するには、次のコマンドを使用します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-document \
       --name document name
   ```

------
#### [ Windows ]

   ```
   aws ssm get-document ^
       --name document name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocument `
       –Name document name
   ```

------

1. ドキュメントの説明を表示するには、次のコマンドを使用します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
       --name document name
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
       --name document name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
       –Name document name
   ```

------

1. ドキュメントのアクセス権限を表示するには、次のコマンドを使用します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document-permission \
       --name document name \
       --permission-type Share
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document-permission ^
       --name document name ^
       --permission-type Share
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentPermission `
       –Name document name `
       -PermissionType Share
   ```

------

1. ドキュメントのアクセス権限を変更して共有するには、次のコマンドを使用します。アクセス権限を編集するには、ドキュメントの所有者である必要があります。オプションで、特定の AWS アカウント ID と共有するドキュメントの場合は、`--shared-document-version` パラメータを使用して共有するドキュメントのバージョンを指定できます。バージョンを指定しない場合、ドキュメント の `Default` バージョンが共有されます。ドキュメントをパブリックに (`all` と) 共有する場合は、指定したドキュメントのすべてのバージョンがデフォルトで共有されます。次のコマンド例は、特定の個人の AWS アカウント ID に基づいて、その個人とドキュメントをプライベートに共有します。

------
#### [ Linux & macOS ]

   ```
   aws ssm modify-document-permission \
       --name document name \
       --permission-type Share \
       --account-ids-to-add AWS アカウント ID
   ```

------
#### [ Windows ]

   ```
   aws ssm modify-document-permission ^
       --name document name ^
       --permission-type Share ^
       --account-ids-to-add AWS アカウント ID
   ```

------
#### [ PowerShell ]

   ```
   Edit-SSMDocumentPermission `
       –Name document name `
       -PermissionType Share `
       -AccountIdsToAdd AWS アカウント ID
   ```

------

1. 次のコマンドを使用してドキュメントをパブリックに共有します。
**注記**  
ドキュメントをパブリックに (`all` と) 共有する場合は、指定したドキュメントのすべてのバージョンがデフォルトで共有されます。

------
#### [ Linux & macOS ]

   ```
   aws ssm modify-document-permission \
       --name document name \
       --permission-type Share \
       --account-ids-to-add 'all'
   ```

------
#### [ Windows ]

   ```
   aws ssm modify-document-permission ^
       --name document name ^
       --permission-type Share ^
       --account-ids-to-add "all"
   ```

------
#### [ PowerShell ]

   ```
   Edit-SSMDocumentPermission `
       -Name document name `
       -PermissionType Share `
       -AccountIdsToAdd ('all')
   ```

------

## 共有 SSM ドキュメントのアクセス許可を変更する
<a name="modify-permissions-shared"></a>

コマンドを共有する場合、AWS Systems Manager (SSM) ドキュメントへのアクセス権を削除するか、SSM ドキュメントを削除するまで、そのコマンドを表示および使用できます。ただし、共有されている限り、ドキュメントを削除することはできません。ドキュメントを削除する前に、共有を停止する必要があります。

### ドキュメント共有の停止 (コンソール)
<a name="unshare-using-console"></a>

**ドキュメント共有の停止**

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

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

1. ドキュメントリストで共有を停止するドキュメントを選択し、**[詳細]** を選択します。**[アクセス許可]** セクションで自分がドキュメントの所有者であることを確認します。ドキュメントの所有者のみが、ドキュメントの共有を停止できます。

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

1. [**X**] を選択してコマンドへのアクセス権を取り消す AWS アカウント ID を削除し、[**Save**] を選択します。

### ドキュメントの共有の停止 (コマンドライン)
<a name="unshare-using-cli"></a>

ローカルコンピュータで AWS CLI または AWS Tools for Windows PowerShell を開き、次のコマンドを実行してコマンドの共有を停止します。

------
#### [ Linux & macOS ]

```
aws ssm modify-document-permission \
    --name document name \
    --permission-type Share \
    --account-ids-to-remove 'AWS アカウント ID'
```

------
#### [ Windows ]

```
aws ssm modify-document-permission ^
    --name document name ^
    --permission-type Share ^
    --account-ids-to-remove "AWS アカウント ID"
```

------
#### [ PowerShell ]

```
Edit-SSMDocumentPermission `
    -Name document name `
    -PermissionType Share `
    –AccountIdsToRemove AWS アカウント ID
```

------

## 共有 SSM ドキュメントを使用する
<a name="using-shared-documents"></a>

AWS Systems Manager (SSM) ドキュメントを共有すると、システムは Amazon リソースネーム (ARN) を生成して、コマンドに割り当てます。Systems Manager コンソールから共有ドキュメントを選択して実行する場合、ARN は表示されません。ただし、Systems Manager コンソール以外の方法を使用して共有 SSM ドキュメントを実行する場合は、`DocumentName` リクエストパラメータにドキュメントの完全な ARN を指定する必要があります。コマンドを実行してドキュメントをリストすると、SSM ドキュメントの完全な ARN が表示されます。

**注記**  
AWS のパブリックドキュメント (先頭に `AWS-*` が付くドキュメント)、または自己所有のドキュメントに ARN を指定する必要はありません。

### 共有 SSM ドキュメントを使用する (コマンドライン)
<a name="using-shared-documents-cli"></a>

 **すべてのパブリック SSM ドキュメントをリスト表示するには** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents \
    --filters Key=Owner,Values=Public
```

------
#### [ Windows ]

```
aws ssm list-documents ^
    --filters Key=Owner,Values=Public
```

------
#### [ PowerShell ]

```
$filter = New-Object Amazon.SimpleSystemsManagement.Model.DocumentKeyValuesFilter
$filter.Key = "Owner"
$filter.Values = "Public"

Get-SSMDocumentList `
    -Filters @($filter)
```

------

 **自分と共有されているプライベート SSM ドキュメントをリスト表示するには** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents \
    --filters Key=Owner,Values=Private
```

------
#### [ Windows ]

```
aws ssm list-documents ^
    --filters Key=Owner,Values=Private
```

------
#### [ PowerShell ]

```
$filter = New-Object Amazon.SimpleSystemsManagement.Model.DocumentKeyValuesFilter
$filter.Key = "Owner"
$filter.Values = "Private"

Get-SSMDocumentList `
    -Filters @($filter)
```

------

 **使用できるすべての SSM ドキュメントをリスト表示するには** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents
```

------
#### [ Windows ]

```
aws ssm list-documents
```

------
#### [ PowerShell ]

```
Get-SSMDocumentList
```

------

 **自分と共有されている SSM ドキュメントについての情報を入手するには** 

------
#### [ Linux & macOS ]

```
aws ssm describe-document \
    --name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------
#### [ Windows ]

```
aws ssm describe-document ^
    --name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------
#### [ PowerShell ]

```
Get-SSMDocumentDescription `
    –Name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------

 **共有 SSM ドキュメントを実行するには** 

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name arn:aws:ssm:us-east-2:12345678912:document/documentName \
    --instance-ids ID
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name arn:aws:ssm:us-east-2:12345678912:document/documentName ^
    --instance-ids ID
```

------
#### [ PowerShell ]

```
Send-SSMCommand `
    –DocumentName arn:aws:ssm:us-east-2:12345678912:document/documentName `
    –InstanceIds ID
```

------

# SSM ドキュメントを検索する
<a name="ssm-documents-searching"></a>

AWS Systems Manager (SSM) ドキュメントストアでは、フリーテキスト検索やフィルターによる検索を使用して、SSM ドキュメントを検索することができます。また、頻繁に使用する SSM ドキュメントを見つけるのに役立つように、ドキュメントをお気に入りに追加することもできます。ここでは、これらを使用する方法について説明します。

## フリーテキスト検索の使用
<a name="ssm-documents-searching-free-text"></a>

Systems Manager の [**ドキュメント**] ページの検索ボックスでは、フリーテキスト検索がサポートされています。フリーテキスト検索では、入力した検索語を各 SSM ドキュメントのドキュメント名と比較します。例えば、「**ansible**」という 1 つの検索語を入力すると、Systems Manager はこの語を含むすべての SSM ドキュメントを返します。複数の検索語を入力すると、Systems Manager は `OR` ステートメントを使用して検索します。例えば、**ansible** と **linux** を指定すると、名前に*どちらか*の検索語を含むすべてのドキュメントが返されます。

フリーテキスト検索用語を入力して [**Platform type**] (プラットフォームタイプ) などの検索オプションを選択する場合は、検索が `AND` 文を使用して、名前に指定したキーワードが含まれ、かつ指定したプラットフォームタイプのすべてのドキュメントを返します。

**注記**  
フリーテキスト検索では、次の点に注意してください。  
フリーテキスト検索では、大文字と小文字は区別*されません*。
検索語は 3～20 文字にする必要があります。
フリーテキスト検索では、検索語を 5 つまで使用できます。
検索語の間にスペースを入れると、検索時にスペースが含まれます。
フリーテキスト検索は、[**Document type (ドキュメントタイプ)**] や [**Platform type (プラットフォームタイプ)**] などの他の検索オプションと組み合わせることができます。
[**Document name prefix (ドキュメント名のプレフィックス)**] フィルターとフリーテキスト検索は一緒に使用できません。

**SSM ドキュメントを検索するには**

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

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

1. 検索ボックスに検索語を入力し、Enter キーを押します。

### AWS CLI を使用したドキュメントのフリーテキスト検索の実行
<a name="ssm-documents-searching-free-text-cli"></a>

**CLI を使用してドキュメントのフリーテキスト検索を実行するには**

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

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

1. 1 つの検索語でドキュメントのフリーテキスト検索を実行するには、次のコマンドを実行します。このコマンドの *search\$1term* を使用する検索語に置き換えてください。

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="search_term"
   ```

   以下に例を示します。

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="aws-asg" --region us-east-2
   ```

   複数の検索語を使用して `AND` 演算で検索するには、次のコマンドを実行します。このコマンドの *search\$1term\$11* と *search\$1term\$12* を使用する検索語に置き換えてください。

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="search_term_1","search_term_2","search_term_3" --region us-east-2
   ```

   以下に例を示します。

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="aws-asg","aws-ec2","restart" --region us-east-2
   ```

## フィルターの使用
<a name="ssm-documents-searching-filters"></a>

Systems Manager の [**Documents (ドキュメント)**] ページの検索ボックスを選択すると、以下のフィルターが自動的に表示されます。
+ [Document name prefix (ドキュメント名のプレフィックス)]
+ [Platform types (プラットフォームタイプ)]
+ [Document type (ドキュメントタイプ)]
+ タグキー

![\[SSM ドキュメントページのフィルターオプション\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/ssm-documents-filters-1.png)


1 つのフィルターを使用して、SSM ドキュメントを検索できます。より具体的な SSM ドキュメントのセットを返す場合は、複数のフィルターを適用できます。次の図は、[**Platform types (プラットフォームタイプ)**] フィルターと [**Document name prefix (ドキュメント名のプレフィックス)**] フィルターを使用した検索の例を示しています。

![\[SSM ドキュメントページで複数のフィルターオプションを適用します。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/ssm-documents-filters-2.png)


複数のフィルターを適用すると、Systems Manager は選択したフィルターに基づいて異なる検索ステートメントで検索します。
+ *同じ*フィルター ([**Document name prefix (ドキュメント名のプレフィックス)**] など) を複数回適用すると、Systems Manager は `OR` ステートメントを使用して検索します。例えば、1 つ目の [**Document name prefix (ドキュメント名のプレフィックス)**] フィルターに「**AWS**」を指定し、2 つ目の [**Document name prefix (ドキュメント名のプレフィックス)**] フィルターに「**Lambda**」を指定した場合、検索ではプレフィックスが「`AWS`」のすべてのドキュメントとプレフィックスが「`Lambda`」のすべてのドキュメントが返されます。
+ *異なる*フィルターを適用する場合 ([**Document name prefix**] (ドキュメント名プレフィックス) と [**Platform types**] (プラットフォームタイプ) など)、Systems Manager は検索に `AND` ステートメントを使用します。例えば、[**Document name prefix**] (ドキュメント名プレフィックス) のフィルターに **AWS** を使用し、[**Platform types**] (プラットフォームタイプ) のフィルターに **Linux** を指定した場合、検索結果は「`AWS`」のプレフィックスが付いたドキュメントのうち、Linux プラットフォーム固有のものをすべて表示します。

**注記**  
フィルターを使用する検索では、大文字と小文字は区別されます。

## ドキュメントのお気に入りへの追加
<a name="favorite-documents"></a>

頻繁に使用する SSM ドキュメントを見つけやすいように、ドキュメントをお気に入りに追加してください。1 つのドキュメントタイプ、AWS アカウント および AWS リージョン 1 つにつき、最大 20 のドキュメントをお気に入りに追加できます。ドキュメント AWS マネジメントコンソール からお気に入りを選択、変更、表示できます。次の手順は、お気に入りを選択、変更、表示する方法について説明します。

**SSM ドキュメントをお気に入りにするには**

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

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

1. お気に入りにしたいドキュメント名の横にある星のアイコンを選択します。

**SSM ドキュメントをお気に入りから削除するには**

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

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

1. お気に入りから削除するドキュメント名の横にある星アイコンを選択解除します。

**ドキュメント AWS マネジメントコンソール からお気に入りを表示するには**

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

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

1. **[お気に入り]** タブを選択します。

# パラメータ処理の問題のトラブルシューティング
<a name="parameter-troubleshooting"></a>

## パラメータ処理のよくある問題
<a name="common-parameter-issues"></a>

**実行中に環境変数を使用できない**  
**問題:** 環境変数 (`SSM_parameter-name`) が見つからないことによりコマンドが失敗する。  
**考えられる原因:**  
+ SSM Agent バージョンが環境変数補間をサポートしていない
+ `interpolationType` が `ENV_VAR` に設定されていない
+ パラメータ名が予想される環境変数名と一致しない
**解決策**:  
+ SSM Agent バージョンが 3.3.2746.0 以降であることを確認する
+ 古いエージェントバージョンのフォールバックロジックを追加する

  ```
  if [ -z "${SSM_parameterName+x}" ]; then
      export SSM_parameterName="{{parameterName}}"
  fi
  ```

**特殊文字を含むパラメータ値**  
**問題:** パラメータ値にスペース、引用符、その他特殊文字が含まれているときにコマンドが失敗する。  
**解決策**:  
+ 環境変数を参照するときは適切な引用符を使用する

  ```
  # Correct
  echo "$SSM_parameter-name"
  
  # Incorrect
  echo $SSM_parameter-name
  ```
+ `allowedPattern` を使用して入力検証を追加し、特殊文字を制限する

**プラットフォーム間で動作に一貫性がない**  
**問題:** Linux と Windows Server のシステムとでパラメータ処理の動作が異なる。  
**解決策**:  
+ 各プラットフォームに固有の環境変数構文を使用する

  ```
  # PowerShell
  $env:SSM_parameter-name
  
  # Bash
  $SSM_parameter-name
  ```
+ ドキュメントに、プラットフォームに固有の前提条件チェックを実行する

**パラメータ値が適切にエスケープされない**  
**問題:** 環境変数補間を使用しているにもかかわらずコマンドインジェクションに対して脆弱である。  
**解決策**:  
+ コマンドにパラメータ値を含めるときに、常に適切なエスケープを使用する

  ```
  # Correct
  mysql_command="mysql -u \"$SSM_username\" -p\"$SSM_password\""
  
  # Incorrect
  mysql_command="mysql -u $SSM_username -p$SSM_password"
  ```

## パラメータ検証のヒント
<a name="parameter-validation"></a>

次の方法を使ってパラメータ処理を検証します。

1. テスト環境変数の可用性:

   ```
   #!/bin/bash
   # Print all SSM_ environment variables
   env | grep ^SSM_
   
   # Test specific parameter
   if [ -n "$SSM_parameter" ]; then
       echo "Parameter is available"
   else
       echo "Parameter is not available"
   fi
   ```

1. パラメータのパターンを確認します。

   ```
   parameters:
     myParameter:
       type: String
       allowedPattern: "^[a-zA-Z0-9_-]+$"
       description: "Test this pattern with sample inputs"
   ```

1. エラー処理を含めます。

   ```
   if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then
       echo "Parameter validation failed"
       exit 1
   fi
   ```

# AWS Systems Manager Maintenance Windows
<a name="maintenance-windows"></a>

AWS Systems Manager のツールである Maintenance Windows では、オペレーティングシステムのパッチ適用、ドライバーの更新、ソフトウェアやパッチのインストールなど、ノードに対して破壊的になり得るアクションを実行するスケジュールを定義できます。

**注記**  
State Manager および Maintenance Windows は、マネージドノードで同様の種類の更新を実行できます。どちらを選択するかは、システムコンプライアンスを自動化する必要があるか、指定した期間中に優先度の高い、時間的制約のあるタスクを実行するかによって異なります。  
詳細については、「[State Manager または Maintenance Windows の選択](state-manager-vs-maintenance-windows.md)」を参照してください。

Maintenance Windows により、Amazon Simple Storage Service (Amazon S3) バケット、Amazon Simple Queue Service (Amazon SQS) キュー、AWS Key Management Service (AWS KMS) キーなど、他の AWS リソースタイプでアクションをスケジュールできます。

メンテナンスウィンドウのターゲットに含めることができるサポートされているリソースタイプの詳細なリストについては、「*AWS Resource Groups ユーザーガイド*」の「[AWS Resource Groups およびタグエディタで使用できるリソース](https://docs.aws.amazon.com/ARG/latest/userguide/supported-resources.html#supported-resources-console)」を参照してください。Maintenance Windows の使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com//systems-manager/maintenance-windows)を開きます。ナビゲーションペインで、**[Maintenance Windows]** を選択します。

各メンテナンスウィンドウには、スケジュール、最長期間、登録されたターゲットのセット (実行されるマネージドノード、または他の AWS リソース)、登録されたタスクのセットがあります。タグを作成または更新するときに、タグをメンテナンスウィンドウに追加できます。(タグは、企業内のリソースを識別およびソートするのに役立ちます)。また、メンテナンスウィンドウを前後に実行しない日付を指定することもでき、さらにメンテナンスウィンドウのスケジュールの基準となる国際タイムゾーンを指定することもできます。

メンテナンスウィンドウのスケジュールに関するオプションの相互関係については、「[メンテナンスウィンドウのスケジューリングおよび有効期間のオプション](maintenance-windows-schedule-options.md)」を参照してください。

`--schedule` オプションの使用方法の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

**サポートされているタスクタイプ**  
メンテナンスウィンドウでは、次の 4 種類のタスクを実行できます:
+ Systems Manager のツール Run Command のコマンド

  Run Command の詳細については、「[AWS Systems Manager Run Command](run-command.md)」を参照してください。
+ Systems Manager のツールである Automation のワークフロー

  オートメーションワークフローの詳細については、「[AWS Systems Manager Automation](systems-manager-automation.md)」を参照してください。
+  の関数AWS Lambda

  Lambda 関数の詳細については、*AWS Lambda デベロッパーガイド*の「[Lambda の開始方法](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)」を参照してください。
+  のタスクAWS Step Functions
**注記**  
メンテナンスウィンドウタスクは、Step Functions 標準ステートマシンワークフローのみをサポートします。Express ステートマシンワークフローはサポートされていません。ステートマシンワークフロータイプの詳細については、「AWS Step Functions デベロッパーガイド」の「[標準ワークフローと Express ワークフロー](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html)」を参照してください。

  Step Functions の詳細については、*[AWS Step Functions デベロッパーガイド](https://docs.aws.amazon.com/step-functions/latest/dg/)*を参照してください。

これにより、メンテナンスウィンドウを使用して、選択されたターゲットで以下のようなタスクを実行できます。
+ アプリケーションをインストールまたは更新します。
+ パッチを適用します。
+ SSM Agent をインストールまたは更新します。
+ Systems Manager Run Command タスクを使用して PowerShell コマンドと Linux シェルスクリプトを実行します。
+ Amazon Machine Images (AMIs) の構築、ソフトウェアのブートストラップ、Systems Manager Automation タスクを使用したノードの設定を行います。
+ ノードをスキャンしてパッチ更新を探すなどの追加アクションを起動する AWS Lambda 関数を実行します。
+ AWS Step Functions ステートマシンを実行して、ノードを Elastic Load Balancing 環境から削除し、ノードにパッチを適用してから Elastic Load Balancing 環境に戻すなどのタスクを行います。
+ オフラインのノードをターゲットにするには、AWS リソースグループをターゲットとして指定します。

**注記**  
メンテナンスウィンドウ Run Command タイプのタスクには、1 つ以上のターゲットを指定する必要があります。タスクに応じて、他のメンテナンスウィンドウタスクタイプ (Automation、AWS Lambda、AWS Step Functions) に対するターゲットはオプションです。ターゲットを指定しないタスクの実行の詳細については、「[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md)」を参照してください。

**EventBridge のサポート**  
この Systems Manager ツールは、Amazon EventBridge ルールの*イベント*タイプとしてサポートされています。詳細については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」および「[リファレンス: Systems Manager 用の Amazon EventBridge イベントパターンとタイプ](reference-eventbridge-events.md)」を参照してください。

**Topics**
+ [Maintenance Windows を設定する](setting-up-maintenance-windows.md)
+ [コンソールを使用してメンテナンスウィンドウを作成および管理する](sysman-maintenance-working.md)
+ [チュートリアル](maintenance-windows-tutorials.md)
+ [メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)
+ [メンテナンスウィンドウのスケジューリングおよび有効期間のオプション](maintenance-windows-schedule-options.md)
+ [ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md)
+ [メンテナンスウィンドウのトラブルシューティング](troubleshooting-maintenance-windows.md)

# Maintenance Windows を設定する
<a name="setting-up-maintenance-windows"></a>

AWS アカウント内のユーザーが AWS Systems Manager のツールである Maintenance Windows を使用してメンテナンスウィンドウタスクを作成およびスケジュールできるようにするには、必要なアクセス許可を付与する必要があります。さらに、メンテナンスウィンドウ用の IAM サービスロールと、それにアタッチする IAM ポリシーを作成する必要があります。

**[開始する前に]**  
このセクションで設定するアクセス許可に加えて、メンテナンスウィンドウを操作する IAM エンティティ (ユーザー、ロール、またはグループ) が既に一般的なメンテナンスウィンドウのアクセス許可をもっている必要があります。そのようなアクセス許可は、対象エンティティに IAM ポリシーの `AmazonSSMFullAccess` を割り当てるか、またはメンテナンスウィンドウのタスクを対象とするより小規模な Systems Manager アクセス許可セットを提供するカスタム IAM ポリシーを割り当てることによって付与できます。

**Topics**
+ [コンソールを使用したメンテナンスウィンドウへのアクセスの制御](configuring-maintenance-window-permissions-console.md)
+ [AWS CLI を使用したメンテナンスウィンドウへのアクセスの制御](configuring-maintenance-window-permissions-cli.md)

# コンソールを使用したメンテナンスウィンドウへのアクセスの制御
<a name="configuring-maintenance-window-permissions-console"></a>

以下の手順では、AWS Systems Manager コンソールを使用して、メンテナンスウィンドウに必要なロールとアクセス許可を作成する方法を説明します。

**Topics**
+ [タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console)
+ [タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console)
+ [タスク 3: コンソールを使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する](#allow-maintenance-window-access-console)
+ [タスク 4: 指定されたユーザーがコンソールを使用してメンテナンスウィンドウタスクを登録できないようにする](#deny-maintenance-window-access-console)

## タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する
<a name="create-custom-policy-console"></a>

メンテナンスウィンドウのタスクには、ターゲットリソースで実行するために必要なアクセス許可を提供するための IAM ロールが必要です。アクセス許可は、ロールにアタッチされた IAM ポリシーを通じて提供されます。実行するタスクのタイプおよびその他の運用要件によって、このポリシーの内容が決定されます。ユーザーのニーズに対応する基本ポリシーを提供しています。メンテナンスウィンドウで実行するタスクおよびタスクのタイプによっては、このポリシーのすべてのアクセス許可が必要ではなく、追加のアクセス許可を含める必要がある場合があります。後ほど [タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console) に作成するロールに、このポリシーをアタッチします。

**コンソールを使用してカスタムポリシーを作成するには**

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

1. ナビゲーションペインで **ポリシー**を選択してから **ポリシーの作成**を選択します。

1. **[ポリシーエディタ]** 欄で、**[JSON]** を選択します。

1. デフォルトのコンテンツを以下と置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 必要に応じて、アカウントで実行するメンテナンスタスクの JSON コンテンツを変更します。変更した内容は、ユーザーが計画したオペレーションに固有のものです。

   例:
   + ワイルドカード (\$1) 修飾子を使用する代わりに、特定の関数およびステートマシンに Amazon リソースネーム (ARN) を指定できます。
   + AWS Step Functions タスクを実行する予定がない場合は、`states` のアクセス許可と (ARN) を削除できます。
   + AWS Lambda タスクを実行する予定がない場合は、`lambda` のアクセス許可と ARN を削除できます。
   + オートメーションタスクを実行する予定がない場合は、`ssm:GetAutomationExecution` および `ssm:StartAutomationExecution` のアクセス許可を削除できます。
   + タスクの実行に必要な追加のアクセス許可を追加します。たとえば、一部のオートメーションアクションは AWS CloudFormation スタックと連携します。そのため、`cloudformation:CreateStack`、`cloudformation:DescribeStacks`、および `cloudformation:DeleteStack` のアクセス許可が必要です。

     別の例: オートメーションランブックの `AWS-CopySnapshot` では、Amazon Elastic Block Store (Amazon EBS) スナップショットを作成するためのアクセス許可が必要です。このため、サービスロールに許可 `ec2:CreateSnapshot` が必要です。

     自動化ランブックで必要なロールの許可については、「[AWS Systems Manager Automation Runbook Reference](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)」にあるランブックの説明を参照してください。

1. ポリシーのリビジョンを完了したら、**[次へ]** をクリックします。

1. **[ポリシー名]** に、作成したサービスロールにアタッチするポリシーを識別するためのポリシー名を入力します。例: **my-maintenance-window-role-policy**。

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

1. [**Create policy**] (ポリシーの作成) を選択します。

   ポリシーに指定した名前をメモしておきます。次の手順、「[タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console)」で参照します。

## タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する
<a name="create-custom-role-console"></a>

前のタスクで作成したポリシーを、このタスクで作成するメンテナンスウィンドウサービスロールにアタッチします。ユーザーがメンテナンスウィンドウタスクを登録すると、タスク設定の一部としてこの IAM ロールが指定されます。このロールでアクセス許可が付与され、Systems Manager がユーザーに代わって、メンテナンスウィンドウでタスクを実行できます。

**重要**  
以前は、Systems Manager コンソールが、AWS マネージド IAM サービスリンクロール `AWSServiceRoleForAmazonSSM` を選択して、タスクのメンテナンスロールとして使用する機能を提供していました。メンテナンスウィンドウのタスクにおける、このロールとそれに関連するポリシーである `AmazonSSMServiceRolePolicy` の使用は推奨されなくなりました。このロールをメンテナンスウィンドウのタスクに使用している場合は、使用を中止することをお勧めします。代わりに、メンテナンスウィンドウのタスクが実行されたときに、Systems Manager と他の AWS のサービス間の通信を可能にする独自の IAM ロールを作成します。

以下の手順を使用して、Systems Manager がユーザーに代わって Maintenance Windows タスクを実行するための Maintenance Windows のカスタムサービスロールを作成します。前のタスクで作成したポリシーを、新しく作成したカスタムサービスロールにアタッチします。

**コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する**

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

1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

1. **[Select trusted entity]** (信頼できるエンティティを選択) で、次のように選択します。

   1. **[信頼できるエンティティタイプ]** で、**[AWS サービス]** を選択してください。

   1. **[ユースケース]** で、**[Systems Manager]** を選択します

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

      次の画像は、Systems Manager オプションの場所を示しています。  
![\[Systems Manager は、ユースケースのオプションの 1 つです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/iam_use_cases_for_MWs.png)

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

1. **[アクセス許可ポリシー]** 欄で、[タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console) で作成したポリシー名を検索ボックスに入力します。名前の横にあるチェックボックスをオンにして、**[次へ]** を選択します。

1. **[Role name]** (ロール名) に、このロールが Maintenance Windows ロールであることを識別できる名前を入力します。例: **my-maintenance-window-role**。

1. (オプション) デフォルトのロールの説明を変更して、このロールの目的を反映させます。例: **Performs maintenance window tasks on your behalf**。

1. **[ステップ 1: 信頼できるエンティティを選択する]** で、**[信頼ポリシー]** に次のポリシーが表示されていることを確認します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. **[ステップ 2: アクセス許可を追加する]** で、[タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console) で作成したポリシーが存在するのを確認します。

1. (オプション) **[ステップ3: タグを追加する]** で、タグとキーの値のペアを 1 つまたは複数追加して、このロールのアクセスを整理、追跡、または制御できます。

1. **[Create role]** (ロールの作成) を選択します。**ロール**ページが再度表示されます。

1. さきほど作成した IAM ロールの名前を選択します。

1. **[Summary]** (概要) エリアのロール名と **[ARN]** をコピーするか、書き留めます。アカウントのユーザーは、メンテナンスウィンドウを作成するときにこの情報を指定します。

## タスク 3: コンソールを使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する
<a name="allow-maintenance-window-access-console"></a>

メンテナンスウィンドウのカスタムサービスロールにアクセスする許可をユーザーに付与すると、ユーサーはそのロールを自分のメンテナンスウィンドウタスクで使用できます。これは、Maintenance Windows ツール用に Systems Manager API コマンドを操作するために既に付与されているアクセス許可に追加されます。この IAM ロールは、メンテナンスウィンドウタスクを実行するために必要なアクセス許可を伝えます。このため、これらの IAM アクセス許可を渡す権限がないと、ユーザーは、カスタムサービスロールを使用してメンテナンスウィンドウにタスクを登録することができません。

メンテナンスウィンドウにタスクを登録する場合、実際のタスクオペレーションを実行するためのサービスロールを指定します。これは、サービスがユーザーに代わってタスクを実行するときに引き受けるロールです。その前に、タスク自体を登録するには、IAM `PassRole` ポリシーを IAM エンティティ (ユーザーまたはグループ) に割り当てます。これにより、これらのタスクをメンテナンスウィンドウに登録する一環として、タスク実行時に使用するロールを指定することを IAM エンティティに許可します。詳細については、「*IAM ユーザーガイド*」の「[AWS のサービスにロールを渡すアクセス許可をユーザーに付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

**メンテナンスウィンドウタスクの登録を許可するアクセス許可をユーザーに設定するには**

IAM エンティティ (ユーザー、ロール、またはグループ) に管理者権限が設定されている場合、その IAM ユーザーまたはロールはメンテナンスウィンドウにアクセスできます。管理者権限のない IAM エンティティの場合、管理者は IAM エンティティに次の権限を付与する必要があります。タスクをメンテナンスウィンドウに登録するために必要な最低限の権限です。
+ `AmazonSSMFullAccess` マネージドポリシー、または同等のアクセス許可を付与するポリシー。
+ 次の `iam:PassRole` および `iam:ListRoles` のアクセス許可。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
          }
      ]
  }
  ```

------

  *my-maintenance-window-role* は、前に作成したカスタムメンテナンスウィンドウ向けサービスロールの名前を表します。

  *account-id* は、AWS アカウント の ID を表します。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

  アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
  + AWS IAM アイデンティティセンター のユーザーとグループ:

    アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
  + IAM 内で、ID プロバイダーによって管理されているユーザー:

    ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
  + IAM ユーザー:
    + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
    + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

**コンソールを使用して、メンテナンスウィンドウタスクの登録を許可するグループのアクセス許可を設定するには**

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

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

1. グループリストで `iam:PassRole` のアクセス許可を割り当てるグループの名前を選択するか、必要に応じて新しいグループを作成します。

1. **[Permissions]** (アクセス許可) タブで、**[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) をクリックします。

1. **[ポリシーエディタ]** 欄で **[JSON]** を選択し、ボックスのデフォルトの内容を以下に置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   *my-maintenance-window-role* は、前に作成したカスタムメンテナンスウィンドウロールの名前を表します。

   *account-id* は、AWS アカウント の ID を表します。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

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

1. **[レビューと確認]** ページで、この `PassRole` ポリシーを識別するための名前を **[ポリシー名]** ボックスに入力し (**my-group-iam-passrole-policy** など)、**[ポリシーの作成]** を選択します。

## タスク 4: 指定されたユーザーがコンソールを使用してメンテナンスウィンドウタスクを登録できないようにする
<a name="deny-maintenance-window-access-console"></a>

メンテナンスウィンドウでタスクを登録したくない AWS アカウント 内のユーザーに対する `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否できます。これにより、メンテナンスウィンドウのタスクを登録してはいけないユーザーに対して、追加の予防レイヤーが提供されます。

**コンソールを使用して、メンテナンスウィンドウタスクの登録を許可しないグループ向けのアクセス許可を設定するには**

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

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

1. グループのリストで、`ssm:RegisterTaskWithMaintenanceWindow` のアクセス許可を拒否するグループの名前を選択するか、もしくは必要に応じて新しいグループを作成します。

1. **[Permissions]** (アクセス許可) タブで、**[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) をクリックします。

1. **[ポリシーエディタ]** 欄で **[JSON]** を選択し、ボックスのデフォルトの内容を以下に置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

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

1. **[レビューと確認]** ページで、このポリシーを識別するための名前 (**my-groups-deny-mw-tasks-policy** など) を **[ポリシー名]** ボックスに入力し、**[ポリシーの作成]** を選択します。

# AWS CLI を使用したメンテナンスウィンドウへのアクセスの制御
<a name="configuring-maintenance-window-permissions-cli"></a>

以下の手順では、AWS Command Line Interface (AWS CLI) を使用して、AWS Systems Manager のツールである Maintenance Windows に必要なロールとアクセス許可を作成する方法について説明します。

**Topics**
+ [タスク 1: 信頼ポリシーとカスタマー管理ポリシーファイルを JSON 形式で作成する](#create-custom-policy-json-files-cli)
+ [タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する](#create-custom-role-cli)
+ [タスク 3: AWS CLI を使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する](#allow-maintenance-window-access-cli)
+ [タスク 4: 指定したユーザーが AWS CLI を使用してメンテナンスウィンドウタスクを登録できないようにする](#deny-maintenance-window-access-cli)

## タスク 1: 信頼ポリシーとカスタマー管理ポリシーファイルを JSON 形式で作成する
<a name="create-custom-policy-json-files-cli"></a>

メンテナンスウィンドウのタスクには、ターゲットリソースで実行するために必要なアクセス許可を提供するための IAM ロールが必要です。アクセス許可は、ロールにアタッチされた IAM ポリシーを通じて提供されます。実行するタスクのタイプおよびその他の運用要件によって、このポリシーの内容が決定されます。ユーザーのニーズに対応する基本ポリシーを提供しています。メンテナンスウィンドウで実行するタスクおよびタスクのタイプによっては、このポリシーのすべてのアクセス許可が必要ではなく、追加のアクセス許可を含める必要がある場合があります。

このタスクでは、カスタムメンテナンスウィンドウロールに必要なアクセス許可を JSON ファイルのペアで指定します。後ほど [タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する](#create-custom-role-cli) に作成するロールに、このポリシーをアタッチします。

**信頼ポリシーとカスタマー管理ポリシーファイルを作成するには**

1. 次のトラストポリシーをテキストファイルに貼り付けます。次の名前と拡張子でファイルを保存します: **mw-role-trust-policy.json**。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 次の JSON ポリシーを別のテキストファイルに貼り付けます。最初のファイルを作成したのと同じディレクトリに、このファイルを次の名前と拡張子で保存します: **mw-role-custom-policy.json**。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 必要に応じて、アカウントで実行するメンテナンスタスク用に `mw-role-custom-policy.json` のコンテンツを変更します。変更した内容は、ユーザーが計画したオペレーションに固有のものです。

   例:
   + ワイルドカード (\$1) 修飾子を使用する代わりに、特定の関数およびステートマシンに Amazon リソースネーム (ARN) を指定できます。
   + AWS Step Functions タスクを実行する予定がない場合は、`states` のアクセス許可と (ARN) を削除できます。
   + AWS Lambda タスクを実行する予定がない場合は、`lambda` のアクセス許可と ARN を削除できます。
   + オートメーションタスクを実行する予定がない場合は、`ssm:GetAutomationExecution` および `ssm:StartAutomationExecution` のアクセス許可を削除できます。
   + タスクの実行に必要な追加のアクセス許可を追加します。たとえば、一部のオートメーションアクションは AWS CloudFormation スタックと連携します。そのため、`cloudformation:CreateStack`、`cloudformation:DescribeStacks`、および `cloudformation:DeleteStack` のアクセス許可が必要です。

     別の例: オートメーションランブックの `AWS-CopySnapshot` では、Amazon Elastic Block Store (Amazon EBS) スナップショットを作成するためのアクセス許可が必要です。このため、サービスロールに許可 `ec2:CreateSnapshot` が必要です。

     自動化ランブックで必要なロールの許可については、「[AWS Systems Manager Automation Runbook Reference](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)」にあるランブックの説明を参照してください。

   必要な変更を行った後、ファイルを再保存します。

## タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する
<a name="create-custom-role-cli"></a>

前のタスクで作成したポリシーを、このタスクで作成するメンテナンスウィンドウサービスロールにアタッチします。ユーザーがメンテナンスウィンドウタスクを登録すると、タスク設定の一部としてこの IAM ロールが指定されます。このロールでアクセス許可が付与され、Systems Manager がユーザーに代わって、メンテナンスウィンドウでタスクを実行できます。

**重要**  
以前は、Systems Manager コンソールが、AWS マネージド IAM サービスリンクロール `AWSServiceRoleForAmazonSSM` を選択して、タスクのメンテナンスロールとして使用する機能を提供していました。メンテナンスウィンドウのタスクにおける、このロールとそれに関連するポリシーである `AmazonSSMServiceRolePolicy` の使用は推奨されなくなりました。このロールをメンテナンスウィンドウのタスクに使用している場合は、使用を中止することをお勧めします。代わりに、メンテナンスウィンドウのタスクが実行されたときに、Systems Manager と他の AWS のサービス間の通信を可能にする独自の IAM ロールを作成します。

このタスクでは、CLI コマンドを実行してメンテナンスウィンドウサービスロールを作成し、作成した JSON ファイルからポリシーコンテンツを追加します。

**AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成する**

1. `mw-role-custom-policy.json` と `mw-role-trust-policy.json` を保存したディレクトリで、AWS CLI を開いて次のコマンドを実行します。このコマンドにより、`my-maintenance-window-role` というメンテナンスウィンドウサービスロールが作成され、信頼ポリシーがアタッチされます。

------
#### [ Linux & macOS ]

   ```
   aws iam create-role \
       --role-name "my-maintenance-window-role" \
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------
#### [ Windows ]

   ```
   aws iam create-role ^
       --role-name "my-maintenance-window-role" ^
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Action": "sts:AssumeRole",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       }
                   }
               ]
           },
           "RoleId": "AROAIIZKPBKS2LEXAMPLE",
           "CreateDate": "2024-08-19T03:40:17.373Z",
           "RoleName": "my-maintenance-window-role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role"
       }
   }
   ```
**注記**  
`RoleName` と `Arn` を書き留めておきます。それらを次のコマンドに含めます。

1. 次のコマンドを実行して、カスタマー管理ポリシーをロールにアタッチします。*account-id* のプレースホルダーをお使いのアカウント AWS アカウント ID に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws iam attach-role-policy \
       --role-name "my-maintenance-window-role" \
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------
#### [ Windows ]

   ```
   aws iam attach-role-policy ^
       --role-name "my-maintenance-window-role" ^
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------

1. 次のコマンドを実行して、ロールが作成され、信頼ポリシーがアタッチされていることを確認します。

   ```
   aws iam get-role --role-name my-maintenance-window-role
   ```

   コマンドは以下のような情報を返します。

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "my-maintenance-window-role",
           "RoleId": "AROA123456789EXAMPLE",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role",
           "CreateDate": "2024-08-19T14:13:32+00:00",
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           },
           "MaxSessionDuration": 3600,
           "RoleLastUsed": {
               "LastUsedDate": "2024-08-19T14:30:44+00:00",
               "Region": "us-east-2"
           }
       }
   }
   ```

1. 次のコマンドを実行して、カスタマー管理ポリシーがロールにアタッチされていることを確認します。

   ```
   aws iam list-attached-role-policies --role-name my-maintenance-window-role
   ```

   コマンドは以下のような情報を返します。

   ```
   {
       "AttachedPolicies": [
           {
               "PolicyName": "mw-role-custom-policy",
               "PolicyArn": "arn:aws:iam::123456789012:policy/mw-role-custom-policy"
           }
       ]
   }
   ```

## タスク 3: AWS CLI を使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する
<a name="allow-maintenance-window-access-cli"></a>

メンテナンスウィンドウのカスタムサービスロールにアクセスする許可をユーザーに付与すると、ユーサーはそのロールを自分のメンテナンスウィンドウタスクで使用できます。これは、Maintenance Windows ツール用に Systems Manager API コマンドを操作するために既に付与されているアクセス許可に追加されます。この IAM ロールは、メンテナンスウィンドウタスクを実行するために必要なアクセス許可を伝えます。このため、これらの IAM アクセス許可を渡す権限がないと、ユーザーは、カスタムサービスロールを使用してメンテナンスウィンドウにタスクを登録することができません。

メンテナンスウィンドウにタスクを登録する場合、実際のタスクオペレーションを実行するためのサービスロールを指定します。これは、サービスがユーザーに代わってタスクを実行するときに引き受けるロールです。その前に、タスク自体を登録するには、IAM `PassRole` ポリシーを IAM エンティティ (ユーザーまたはグループ) に割り当てます。これにより、これらのタスクをメンテナンスウィンドウに登録する一環として、タスク実行時に使用するロールを指定することを IAM エンティティに許可します。詳細については、「IAM ユーザーガイド」の「[AWS のサービスにロールを渡すアクセス権限をユーザーに付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

**AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されているユーザー向けにアクセス許可を設定するには**

1. 次の AWS Identity and Access Management (IAM) ポリシーをコピーしてテキストエディタに貼り付け、`mw-passrole-policy.json` というファイル名および拡張子で保存します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   *my-maintenance-window-role* を、前に作成したカスタムメンテナンスウィンドウロールの名前に置き換えます。

   *accountId* を AWS アカウント の ID に置き換えます。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

1. AWS CLI を開きます。

1. IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
   + **IAM エンティティの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *user-name* では、メンテナンスウィンドウにタスクを割り当てるユーザーを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-iam-passrole-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\mw-passrole-policy.json`
**注記**  
Systems Manager コンソールを使用してメンテナンスウィンドウにタスクを登録するためのアクセス許可をユーザーに付与するには、`AmazonSSMFullAccess` ポリシー (または、メンテナンスウィンドウのタスクを対象として限られた範囲のアクセス許可を Systems Manager に提供する IAM ポリシー) もユーザーに割り当てる必要があります。`AmazonSSMFullAccess` ポリシーをユーザーに割り当てるには、次のコマンドを実行します。  

     ```
     aws iam attach-user-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --user-name "user-name"
     ```

     ```
     aws iam attach-user-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --user-name "user-name"
     ```
   + **IAM グループの場合**:

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *group-name* では、メンテナンスウィンドウにタスクを割り当てるメンバーが属するグループを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-iam-passrole-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\mw-passrole-policy.json`
**注記**  
Systems Manager コンソールを使用してメンテナンスウィンドウのタスクを登録するためのアクセス許可をグループのメンバーに付与するには、`AmazonSSMFullAccess` ポリシーもグループに割り当てる必要があります。このポリシーをグループに割り当てるには、次のコマンドを実行します。  

     ```
     aws iam attach-group-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --group-name "group-name"
     ```

     ```
     aws iam attach-group-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --group-name "group-name"
     ```

1. ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------

## タスク 4: 指定したユーザーが AWS CLI を使用してメンテナンスウィンドウタスクを登録できないようにする
<a name="deny-maintenance-window-access-cli"></a>

メンテナンスウィンドウでタスクを登録したくない AWS アカウント 内のユーザーに対する `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否できます。これにより、メンテナンスウィンドウのタスクを登録してはいけないユーザーに対して、追加の予防レイヤーが提供されます。

個別のユーザーまたはグループに `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否するかどうかに応じ、以下の手順のいずれかを使用して、ユーザーがメンテナンスウィンドウにタスクを登録できないようにします。

**AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されていないユーザー向けのアクセス許可を設定するには**

1. 次の IAM ポリシーをコピーしてテキストエディタに貼り付け、**deny-mw-tasks-policy.json** というファイル名および拡張子で保存します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. AWS CLI を開きます。

1. IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
   + **ユーザーの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *user-name* では、メンテナンスウィンドウにタスクを割り当てられないようにするユーザーを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-deny-mw-tasks-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\deny-mw-tasks-policy.json`
   + **グループの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *group-name* では、メンテナンスウィンドウにタスクを割り当てられないようにするグループを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-deny-mw-tasks-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\deny-mw-tasks-policy.json`

1. ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------

# コンソールを使用してメンテナンスウィンドウを作成および管理する
<a name="sysman-maintenance-working"></a>

このセクションでは、AWS Systems Manager コンソールを使用してメンテナンスウィンドウを作成、設定、更新、削除する方法について説明します。このセクションでは、メンテナンスウィンドウのターゲットとタスクの管理についても説明しています。

**重要**  
最初はメンテナンスウィンドウをテスト環境に作成して設定することをお勧めします。

**[開始する前に]**  
メンテナンスウィンドウを作成する前に、AWS Systems Manager のツールである Maintenance Windows へのアクセスを設定する必要があります。詳細については、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

**Topics**
+ [コンソールを使用してメンテナンスウィンドウを作成する](sysman-maintenance-create-mw.md)
+ [コンソールを使用してメンテナンスウィンドウにターゲットを割り当てる](sysman-maintenance-assign-targets.md)
+ [コンソールを使用してメンテナンスウィンドウにタスクを割り当てる](sysman-maintenance-assign-tasks.md)
+ [コンソールを使用してメンテナンスウィンドウを有効、または無効にする](sysman-maintenance-disable.md)
+ [コンソールを使用してメンテナンスウィンドウリソースを更新または削除する](sysman-maintenance-update.md)

# コンソールを使用してメンテナンスウィンドウを作成する
<a name="sysman-maintenance-create-mw"></a>

この手順では、AWS Systems Manager のツールである Maintenance Windows でメンテナンスウィンドウを作成します。名前、スケジュール、期間などの基本オプションを指定できます。後続のステップでは、それによって更新されるターゲット、またはリソース、およびメンテナンスウィンドウの実行中に実行されるタスクを選択します。

**注記**  
メンテナンスウィンドウのスケジュールに関するオプションの相互関係については、「[メンテナンスウィンドウのスケジューリングおよび有効期間のオプション](maintenance-windows-schedule-options.md)」を参照してください。  
`--schedule` オプションの使用方法の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

**コンソールを使用してメンテナンスウィンドウを作成するには**

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

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

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

1. [**名前**] に、このメンテナンスウィンドウを識別するためのわかりやすい名前を入力します。

1. (オプション) **[Description]** (説明) に、このメンテナンスウィンドウの使用に関する説明を入力します。

1. (オプション) ターゲットとして登録されていないマネージドノードに対しても、メンテナンスウィンドウタスクの実行を許可する場合は、**[Allow unregistered targets]** (未登録ターゲットを許可する) を選択します。

   このオプションを選択すると、タスクをメンテナンスウィンドウに登録する際に、未登録ノードを (ノード ID で) 選択できます。

   このオプションを選択しない場合、タスクをメンテナンスウィンドウに登録する際、以前に登録していたターゲットを選択する必要があります。

1. 次の 3 つのうちいずれかのスケジュールオプションを使用して、メンテナンスウィンドウのスケジュールを指定します。

   cron/rate 式の作成の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

1. [**期間**] に、メンテナンスウィンドウを実行する時間数を入力します。指定する値は、開始時刻に基づいてメンテナンスウィンドウの具体的な終了時刻を決定します。メンテナンスウィンドウタスクは、決定された終了時刻から、次のステップで [**タスクの開始を停止**] に指定する時間数を引いて求められる時刻の後に開始することは許可されません。

   たとえば、メンテナンスウィンドウが午後 3 時に開始され、期間が 3 時間で、[**タスクの開始を停止**] の値が 1 時間の場合、午後 5 時以降はメンテナンスウィンドウのタスクを開始できません。

1. [**Stop initiating tasks**] に、メンテナンスウィンドウが終了してから新しいタスクの実行のスケジュールが停止されるまでの時間数を入力します。

1. (オプション) **[Window start date]** (ウィンドウ開始日) で、メンテナンスウィンドウをアクティブにする日時を ISO-8601 拡張形式で指定します。これにより、指定した将来の日付までメンテナンスウィンドウのアクティベーションを遅らせることができます。
**注記**  
過去の開始日時を指定することはできません。

1. (オプション) **[Window end date]** (ウィンドウ終了日) で、メンテナンスウィンドウを非アクティブにする日時を ISO-8601 拡張形式で指定します。これにより、メンテナンスウィンドウの実行を停止する将来の日時を設定できるようになります。

1. (オプション) **[Schedule time zone]** (タイムゾーンのスケジュール) で、スケジュールされたメンテナンスウィンドウの実行の基準とするタイムゾーンを、IANA (Internet Assigned Numbers Authority) 形式で指定します。例: 「America/Los\$1Angeles」、「etc/UTC」、または「Asia/Seoul」。

   有効な形式の詳細については、IANA ウェブサイトの「[Time Zone Database](https://www.iana.org/time-zones)」を参照してください。

1. (オプション) **[Schedule offset]** (スケジュールオフセット) に、cron もしくは rate 式で指定された日時から、メンテナンスウィンドウを実行するまでに待機する日数を入力します。1～6 日の間で指定できます。
**注記**  
このオプションは、cron または rate 式を手動で入力してスケジュールを指定した場合にのみ有効です。

1. (オプション) [**タグの管理**] 領域で、1 つ以上のタグキーの名前と値のペアをメンテナンスウィンドウに適用します。

   タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。たとえば、メンテナンスウィンドウにタグを付けて、実行するタスクの種類、ターゲットの種類、実行される環境を指定できます。この場合、以下のキーの名前と値のペアを指定します。
   + `Key=TaskType,Value=AgentUpdate`
   + `Key=OS,Value=Windows`
   + `Key=Environment,Value=Production`

1. [**Create maintenance window**] を選択します。メンテナンスウィンドウのページに戻ります。先ほど作成したメンテナンスウィンドウの状態が [**Enabled**] になっています。

# コンソールを使用してメンテナンスウィンドウにターゲットを割り当てる
<a name="sysman-maintenance-assign-targets"></a>

この手順では、ターゲットをメンテナンスウィンドウに登録します。つまり、メンテナンスウィンドウがアクションを実行するリソースを指定します。

**注記**  
1 つのメンテナンスウィンドウタスクが複数のターゲットに登録されている場合、そのタスクの呼び出しは並列ではなく、順番に実行されます。複数のターゲットで同時にタスクを実行する必要がある場合は、各ターゲットでタスクを個別に登録し、各タスクに同じ優先度レベルを割り当てます。

**コンソールを使用してメンテナンスウィンドウにターゲットを割り当てるには**

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

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

1. メンテナンスウィンドウのリストで、ターゲットを追加するメンテナンスウィンドウを選択します。

1. [**Actions**]、[**Register targets**] の順に選択します。

1. (オプション) [**ターゲット名**] にターゲットの名前を入力します。

1. (オプション) [**説明**] に説明を入力します。

1. (オプション) [**所有者情報**] で、このメンテナンスウィンドウでこれらのターゲットのタスクを実行中に発生した Amazon EventBridge イベントに含める情報を指定します。

   EventBridge を使用して Systems Manager イベントをモニタリングする方法については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」を参照してください。

1. [**Targets**] エリアで、次の表で説明されているオプションのいずれかを選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-maintenance-assign-targets.html)

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

このメンテナンスウィンドウにさらにターゲットを割り当てるには、[**ターゲット**] タブを選択し、次に [**ターゲットの登録**] を選択します。このオプションを使用すると、ターゲットにするためのさまざまな方法を選択できます。たとえば、以前にノード ID でノードをターゲットにした場合は、マネージドノードに適用されるタグを指定するか、リソースグループからリソースタイプを選択することで、新しいターゲットとターゲットノードを登録できます。

# コンソールを使用してメンテナンスウィンドウにタスクを割り当てる
<a name="sysman-maintenance-assign-tasks"></a>

この手順では、タスクをメンテナンスウィンドウに追加します。タスクは、メンテナンスウィンドウ実行時に実行されるアクションです。

以下の 4 種類のタスクをメンテナンスウィンドウに追加することができます。
+ AWS Systems Manager Run Command コマンド
+ Systems Manager Automation ワークフロー
+ AWS Step Functions タスク
+ AWS Lambda 関数
**重要**  
Maintenance Windows の IAM ポリシーでは、Lambda 関数名 (またはエイリアス) の前にプレフィックス `SSM` を付ける必要があります。このタイプのタスクを登録する前に、AWS Lambda で `SSM` を含めるようにその名前を更新します。例えば、Lambda 関数名が `MyLambdaFunction` の場合は、`SSMMyLambdaFunction` に変更します。

**メンテナンスウィンドウにタスクを割り当てるには**

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

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

1. メンテナンスウィンドウのリストで、メンテナンスウィンドウを選択します。

1. **[アクション]** を選択してから、メンテナンスウィンドウに登録するタスクの種類に応じたオプションを選択します。
   + **Run コマンドタスクの登録**
   + **オートメーションタスクの登録**
   + **Lambda タスクの登録**
   + **Step Functions タスクの登録**
**注記**  
メンテナンスウィンドウタスクは、Step Functions 標準ステートマシンワークフローのみをサポートします。Express ステートマシンワークフローはサポートされていません。ステートマシンワークフロータイプの詳細については、「AWS Step Functions デベロッパーガイド」の「[標準ワークフローと Express ワークフロー](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html)」を参照してください。

1. (オプション) [**名前**] にタスクの名前を入力します。

1. (オプション) **[説明]** に説明を入力します。

1. **新しいタスク呼び出しのカットオフ**で、メンテナンスウィンドウのカットオフ時間に達した後に新しいタスク呼び出しを開始したくない場合は、[**有効**] を選択します。

   このオプションが有効で*ない*場合、カットオフ時間に達してもタスクの実行が継続され、完了するまで新しいタスク呼び出しが開始されます。
**注記**  
このオプションを有効にすると、完了しないタスクのステータスは `TIMED_OUT` です。

1. このステップでは、選択したタスクタイプのタブを選択します。

------
#### [ Run Command ]

   1. **[コマンドドキュメント]** リストで、実行するタスクを定義する Systems Manager コマンドドキュメント (SSM ドキュメント) を選択します。

   1. [**Document version (ドキュメントのバージョン)**] で、使用するドキュメントのバージョンを選択します。

   1. [**タスクの優先順位**] で、このタスクの優先度を指定します。ゼロ (`0`) が最高の優先度になります。メンテナンスウィンドウのタスクは、優先度順にスケジュールされ、優先度が同じタスクは並行してスケジュールされます。

------
#### [ Automation ]

   1.  **[オートメーションドキュメント]** リストで、実行するタスクを定義するオートメーションランブックを選択します。

   1. [**Document version (ドキュメントのバージョン)**] で、使用するランブックのバージョンを選択します。

   1. [**タスクの優先順位**] で、このタスクの優先度を指定します。ゼロ (`0`) が最高の優先度になります。メンテナンスウィンドウのタスクは、優先度順にスケジュールされ、優先度が同じタスクは並行してスケジュールされます。

------
#### [ Lambda ]

   1. **[Lambda パラメータ]** エリアにあるリストから、Lambda 関数を選択します。

   1. (オプション) **[Payload]** (ペイロード)、**[Client Context]** (クライアントコンテキスト)、または **[Qualifier]** (修飾子) で、指定したい任意の内容を入力します。
**注記**  
場合によっては、疑似パラメータを `Payload` 値の一部として使用できます。その後、メンテナンスウィンドウタスクが実行されると、擬似パラメータプレースホルダーの代わりに正しい値を渡します。詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

   1. [**タスクの優先順位**] で、このタスクの優先度を指定します。ゼロ (`0`) が最高の優先度になります。メンテナンスウィンドウのタスクは、優先度順にスケジュールされ、優先度が同じタスクは並行してスケジュールされます。

------
#### [ Step Functions ]

   1. **[Step Functions パラメータ]** のエリアにあるリストから、ステートマシンを選択します。

   1. (オプション) ステートマシンの実行の名前と、その他の指定したい情報を、**[Input]** (入力) に入力します。
**注記**  
場合によっては、疑似パラメータを `Input` 値の一部として使用できます。その後、メンテナンスウィンドウタスクが実行されると、擬似パラメータプレースホルダーの代わりに正しい値を渡します。詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

   1. [**タスクの優先順位**] で、このタスクの優先度を指定します。ゼロ (`0`) が最高の優先度になります。メンテナンスウィンドウのタスクは、優先度順にスケジュールされ、優先度が同じタスクは並行してスケジュールされます。

------

1. [**ターゲット**] 領域で、次のいずれかを選択します。
   + **登録済みターゲットグループの選択**: 現在のメンテナンスウィンドウに登録したメンテナンスウィンドウターゲットを 1 つ以上選択します。
   + **未登録のターゲットの選択**: タスクのターゲットとして、使用可能なリソースを 1 つずつ選択します。

     表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。
   + **タスクターゲットは不要**: タスクのターゲットは、Run Command タイプのタスク以外のすべての機能で既に指定されている可能性があります。

     メンテナンスウィンドウの Run Command タイプのタスクには、1 つ以上のターゲットを指定します。タスクに応じて、他のメンテナンスウィンドウタスクタイプ (Automation、AWS Lambda、AWS Step Functions) に対するターゲットはオプションです。ターゲットを指定しないタスクの実行の詳細については、「[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md)」を参照してください。
**注記**  
多くの場合、オートメーションタスクのターゲットを明示的に指定する必要はありません。例えば、`AWS-UpdateLinuxAmi` ランブックを使用して Linux 用の Amazon Machine Image (AMI) を更新するためのオートメーションタイプのタスクを作成するとします。このタスクが実行されると、AMI は最新の利用可能な Linux ディストリビューションパッケージと Amazon ソフトウェアを反映して更新されます。AMI から作成した新しいインスタンスには、これらの更新がインストール済みです。更新する AMI の ID はランブックの入力パラメータで指定されるため、メンテナンスウィンドウタスクでターゲットを再度指定する必要はありません。

1. オートメーションタスクのみ:

   **[Input parameters]** (入力パラメータ) のエリアで、タスクの実行に必須のパラメータ値、またはオプションのパラメータ値を指定します。
**注記**  
場合によっては、特定の入力パラメータ値に疑似パラメータを使用できます。その後、メンテナンスウィンドウタスクが実行されると、擬似パラメータプレースホルダーの代わりに正しい値を渡します。詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) **[IAM サービスロール]** で、Systems Manager がメンテナンスウィンドウタスクの実行時期を推測するための許可を付与するロールを選択します。

   サービスロール ARN を指定しない場合、Systems Manager はアカウントのサービスにリンクされたロールを使用します。このロールはドロップダウンメニューに表示されません。アカウントに Systems Manager 用の適切なサービスにリンクされたロールが存在しない場合は、タスクが正常に登録されるとロールが作成されます。
**注記**  
セキュリティ体制を強化するために、メンテナンスウィンドウタスクを実行するためのカスタムポリシーとカスタムサービスロールを作成することを強くお勧めします。ポリシーは、特定のメンテナンスウィンドウタスクに必要なアクセス許可のみを提供するように作成できます。詳細については、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

1. Run Command タスクのみ:

   (オプション) **[Output options]** (出力オプション) で以下のいずれかを行います。
   + [**S3 への書き込みを有効にする**] チェックボックスをオンにして、コマンド出力をファイルに保存します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力してください。
   + [**CloudWatch 出力**] チェックボックスを選択して、Amazon CloudWatch Logs に詳細な出力を書き込みます。CloudWatch Logs のロググループ名を入力します。
**注記**  
S3 バケットまたは CloudWatch Logs にデータを書き込む機能を許可するアクセス許可は、このタスクを実行する IAM ユーザーのものではなく、ノードに割り当てられたインスタンスプロファイルのものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」を参照してください。さらに、指定した S3 バケットまたはロググループが別の AWS アカウント にある場合は、ノードに関連付けられたインスタンスプロファイルに、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. Run Command タスクのみ:

   [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

1. Run Command タスクのみ:

   [**パラメータ**] 領域で、ドキュメントのパラメータを指定します。
**注記**  
場合によっては、特定の入力パラメータ値に疑似パラメータを使用できます。その後、メンテナンスウィンドウタスクが実行されると、擬似パラメータプレースホルダーの代わりに正しい値を渡します。詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

1. Run Command とオートメーションタスクのみ:

   (オプション) **[CloudWatch アラーム]** エリアの **[アラーム名]** で、モニタリング用のタスクに適用する既存の CloudWatch アラームを選択します。

   アラームが作動すると、タスクは停止されます。
**注記**  
CloudWatch アラームをタスクにアタッチするには、タスクを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。

1. タスプタイプに応じて、次のいずれかを選択します。
   + **Run コマンドタスクの登録**
   + **オートメーションタスクの登録**
   + **Lambda タスクの登録**
   + **Step Functions タスクの登録**

# コンソールを使用してメンテナンスウィンドウを有効、または無効にする
<a name="sysman-maintenance-disable"></a>

メンテナンスウィンドウは、AWS Systems Manager のツールである Maintenance Windows で無効化または有効化できます。メンテナンスウィンドウを一度に 1 つ選択して、メンテナンスウィンドウの実行を無効または有効にすることができます。また、複数またはすべてのメンテナンスウィンドウを選択して有効または無効にすることもできます。

このセクションでは、Systems Manager コンソールを使用してメンテナンスウィンドウを無効または有効にする方法を説明します。AWS Command Line Interface (AWS CLI) を使用してこれを行う方法の例については、「[チュートリアル : AWS CLI を使用してメンテナンスウィンドウを更新する](maintenance-windows-cli-tutorials-update.md)」を参照してください。

**Topics**
+ [コンソールを使用してメンテナンスウィンドウを無効にする](#sysman-maintenance-disable-mw)
+ [コンソールを使用してメンテナンスウィンドウを有効にする](#sysman-maintenance-enable-mw)

## コンソールを使用してメンテナンスウィンドウを無効にする
<a name="sysman-maintenance-disable-mw"></a>

メンテナンスウィンドウを無効にして、指定した期間タスクを一時停止でき、後で再び有効にできます。

**メンテナンスウィンドウを無効にするには**

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

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

1. 無効にするメンテナンスウィンドウの隣にあるチェックボックスを使用して、1 つ以上のメンテナンスウィンドウを選択します。

1. **[アクション]** メニューで、**[メンテナンスウィンドウの無効化]** を選択します。システムからアクションを確認するよう求められます。

## コンソールを使用してメンテナンスウィンドウを有効にする
<a name="sysman-maintenance-enable-mw"></a>

メンテナンスウィンドウを有効にしてタスクを再開できます。

**注記**  
メンテナンスウィンドウが rate スケジュールを使用し、現時点で開始日が過去の日付と時刻に設定されている場合、現在の日付と時刻がメンテナンスウィンドウの開始日として使用されます。メンテナンスウィンドウの開始日は、有効化の前後の日付に変更できます。詳細については、「[コンソールを使用してメンテナンスウィンドウリソースを更新または削除する](sysman-maintenance-update.md)」を参照してください。

**メンテナンスウィンドウを有効にするには**

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

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

1. 有効にするメンテナンスウィンドウの横にあるチェックボックスをオンにします。

1. **[アクション] で、[メンテナンスウィンドウの有効化]** を選択します。システムからアクションを確認するよう求められます。

# コンソールを使用してメンテナンスウィンドウリソースを更新または削除する
<a name="sysman-maintenance-update"></a>

メンテナンスウィンドウは、AWS Systems Manager のツールである Maintenance Windows で更新または削除できます。また、メンテナンスウィンドウのターゲットやタスクも更新または削除できます。メンテナンスウィンドウの詳細を編集する場合は、スケジュール、ターゲット、タスクを変更できます。また、ウィンドウ、ターゲット、タスクの名前や説明を指定して、それらの目的を明確にし、ウィンドウのキューを管理しやすくすることもできます。

このセクションでは、Systems Manager コンソールを使用してメンテナンスウィンドウ、ターゲット、タスクを更新または削除する方法を説明します。AWS Command Line Interface (AWS CLI) を使用してこれを行う方法の例については、「[チュートリアル : AWS CLI を使用してメンテナンスウィンドウを更新する](maintenance-windows-cli-tutorials-update.md)」を参照してください。

**Topics**
+ [コンソールを使用してメンテナンスウィンドウを更新または削除する](#sysman-maintenance-update-mw)
+ [コンソールを使用してメンテナンスウィンドウターゲットを更新または登録解除する](#sysman-maintenance-update-target)
+ [コンソールを使用してメンテナンスウィンドウタスクを更新または登録解除する](#sysman-maintenance-update-tasks)

## コンソールを使用してメンテナンスウィンドウを更新または削除する
<a name="sysman-maintenance-update-mw"></a>

名前、説明、スケジュールのほか、メンテナンスウィンドウで未登録ターゲットを許可するかどうかを変更するにはメンテナンスウィンドウを更新します。

**メンテナンスウィンドウを更新または削除するには**

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

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

1. 更新または削除するメンテナンスウィンドウの隣にあるボタンを選択してから、次のいずれかを実行します。
   + [**削除**] を選択します。システムからアクションを確認するよう求められます。
   + [**Edit**] を選択します。**[Edit maintenance window]** (メンテナンス時間の編集) ページで値とオプションを変更した後、**[Save changes]** (変更を保存) をクリックします。

     設定の選択肢については、「[コンソールを使用してメンテナンスウィンドウを作成する](sysman-maintenance-create-mw.md)」を参照してください。

## コンソールを使用してメンテナンスウィンドウターゲットを更新または登録解除する
<a name="sysman-maintenance-update-target"></a>

メンテナンスウィンドウのターゲットは、更新または登録解除することができます。メンテナンスウィンドウのターゲットを更新する場合、新しいターゲット名、説明、所有者を指定できます。また、別のターゲットを選択することもできます。

**メンテナンスウィンドウのターゲットを更新または削除するには**

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

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

1. 更新するメンテナンスウィンドウの名前を選択してから、**[Targets]** (ターゲット) タブを選択した上で、以下のいずれかを行います。
   + ターゲットを更新するには、対象のターゲットの横にあるボタンをクリックした後に、**[Edit]** (編集) をクリックします。
   + ターゲットの登録解除を行うには、対象のターゲットの横にあるボタンをクリックした後に、**[Deregister target]** (ターゲットの登録解除) をクリックします。[**メンテナンスウィンドウのターゲットを登録解除する**] ダイアログボックスで、[**登録解除**] を選びます。

## コンソールを使用してメンテナンスウィンドウタスクを更新または登録解除する
<a name="sysman-maintenance-update-tasks"></a>

メンテナンスウィンドウのタスクは、更新または登録解除することができます。更新する場合、新しいタスク名、説明、所有者を指定できます。Run Command とオートメーションタスクの場合は、タスクに別の SSM ドキュメントを選択できます。ただし、タスクのタイプを変更する編集はできません。たとえば、オートメーションタスクを作成した場合、そのタスクを編集して Run Command タスクに変更することはできません。

**コンソールを使用してメンテナンスウィンドウのタスクを更新または削除するには**

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

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

1. 更新するメンテナンスウィンドウの名前を選択します。

1. **[Tasks]** (タスク) タブを選択し、更新するタスクの横にあるボタンをクリックします。

1. 次のいずれかを行います。
   + タスクを登録解除するには、**[Deregister task]** (タスクの登録解除) をクリックします。
   + タスクを編集するには、[**編集**] を選択します。目的の値やオプションを変更し、**[Edit task]** (タスクの編集) をクリックします。

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

このセクションのチュートリアルでは、メンテナンスウィンドウを操作する際の一般的なタスクを実行する方法について説明する。

**前提条件を完了します。**  
これらのチュートリアルを試す前に、以下の前提条件を満たしてください。
+ **ローカルマシンで AWS CLI を設定する** – AWS CLI コマンドを実行する前に、ローカルマシンに CLI をインストールして設定する必要があります。詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」および「[AWS Tools for PowerShell のインストール](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)」を参照してください。
+ **メンテナンスウィンドウのロールとアクセス許可を確認する** – アカウントの AWS 管理者は、CLI を使用してメンテナンスウィンドウを管理するのに必要な AWS Identity and Access Management (IAM) アクセス許可をユーザーに付与する必要があります。詳細については、[Maintenance Windows を設定する](setting-up-maintenance-windows.md) を参照してください。
+ **Systems Manager と互換性のあるインスタンスを作成または設定する** – チュートリアルを完了するには、Systems Manager で使用するように設定された Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが少なくとも 1 つ必要です。つまり、SSM Agent がインスタンスにインストールされ、Systems Manager の IAM インスタンスプロファイルがインスタンスにアタッチされていることになります。

  プリインストールされたエージェントにより、マネージド Amazon Machine Image (AMI) の 1 つの AWS からインスタンスを起動することをお勧めします。詳細については、「[SSM Agent がプリインストールされている AMIs を見つける](ami-preinstalled-agent.md)」を参照してください。

  インスタンスへの SSM Agent のインストールについては、以下のトピックを参照してください。
  + [Windows Server 用の EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする](manually-install-ssm-agent-windows.md)
  + [Linux 用 EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする](manually-install-ssm-agent-linux.md)

  Systems Manager に IAM アクセス許可を設定する方法については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」を参照してください。
+ **必要に応じて追加のリソースを作成する** – Systems Manager のツールである Run Command には、この前提条件トピックに記載されているもの以外のリソースを作成する必要のないタスクが多く含まれています。そのため、チュートリアルを通して初めて使用するためのシンプルな Run Command タスクが用意されています。このトピックで前述のように、Systems Manager で使用するように設定されている EC2 インスタンスも必要です。そのインスタンスを設定した後、シンプルな Run Command タスクを登録できます。

  Systems Manager の Maintenance Windows ツールは、4 種類のタスクの実行をサポートします。
  + Run Command コマンド
  + Systems Manager Automation ワークフロー
  + AWS Lambda 関数
  + AWS Step Functions タスク

  一般的に、メンテナンスウィンドウ、タスク、実行する追加のリソースが必要です。これらを作成する必要があります。たとえば、AWS Lambda 関数を実行するメンテナンスウィンドウが必要な場合は、始める前に Lambda 関数を作成します。Run Command タスクの場合は、コマンド出力を保存できる S3 バケットを作成するなどの作業を行います (必要に応じて)。

**Topics**
+ [チュートリアル: AWS CLI を使用したメンテナンスウィンドウの作成と管理](maintenance-window-tutorial-cli.md)
+ [チュートリアル: コンソールを使用してパッチ用メンテナンスウィンドウを作成する](maintenance-window-tutorial-patching.md)

# チュートリアル: AWS CLI を使用したメンテナンスウィンドウの作成と管理
<a name="maintenance-window-tutorial-cli"></a>

このセクションには、AWS Command Line Interface (AWS CLI) を使用して以下を行う方法を理解するのに役立つチュートリアルが含まれています。
+ メンテナンスウィンドウを作成および設定する
+ メンテナンスウィンドウに関する情報を表示する
+ メンテナンスウィンドウのタスクとタスク実行に関する情報を表示する
+ メンテナンスウィンドウを更新する
+ メンテナンスウィンドウを削除する

**リソース ID を記録する**  
この AWS CLI チュートリアルのタスクを完了したら、実行するコマンドによって生成されたリソース ID を記録します。これらの ID の多くを後続のコマンドの入力として使用します。例えば、メンテナンスウィンドウを作成すると、このシステムによって以下の形式でメンテナンスウィンドウ ID が表示されます。

```
{
   "WindowId":"mw-0c50858d01EXAMPLE"
}
```

システムによって生成された以下の ID をメモします。それらの ID はこのセクションのチュートリアルで必要になります。
+ `WindowId`
+ `WindowTargetId`
+ `WindowTaskId`
+ `WindowExecutionId`
+ `TaskExecutionId`
+ `InvocationId`
+ `ExecutionId`

チュートリアルで使用する EC2 インスタンスの ID も必要です。例: `i-02573cafcfEXAMPLE`

**Topics**
+ [チュートリアル: AWS CLI を使用してメンテナンスウィンドウを作成および設定する](maintenance-windows-cli-tutorials-create.md)
+ [チュートリアル: AWS CLI を使用してメンテナンスウィンドウに関する情報を確認する](maintenance-windows-cli-tutorials-describe.md)
+ [チュートリアル: AWS CLI を使用してタスクおよびタスク実行に関する情報を確認する](mw-cli-tutorial-task-info.md)
+ [チュートリアル : AWS CLI を使用してメンテナンスウィンドウを更新する](maintenance-windows-cli-tutorials-update.md)
+ [チュートリアル: AWS CLI を使用してメンテナンスウィンドウを削除する](mw-cli-tutorial-delete-mw.md)

# チュートリアル: AWS CLI を使用してメンテナンスウィンドウを作成および設定する
<a name="maintenance-windows-cli-tutorials-create"></a>

このチュートリアルでは、AWS Command Line Interface (AWS CLI) を使用して、メンテナンスウィンドウおよびそのターゲットとタスクを作成し設定する方法について説明します。チュートリアルの主な手順はシンプルなステップで構成されています。1 つのメンテナンスウィンドウを作成し、1 つのターゲットを識別して、メンテナンスウィンドウで実行するシンプルなタスクを設定します。また、より複雑なシナリオを試すのに役立つ情報も提供しています。

このチュートリアルの手順に従う際に、斜体の*赤色*テキストの値を、独自のオプションおよび ID に置き換えてください。例えば、メンテナンスウィンドウ ID *mw-0c50858d01EXAMPLE* とインスタンス ID *i-02573cafcfEXAMPLE* を、作成したリソースの ID に置き換えます。

**Topics**
+ [ステップ 1: AWS CLI を使用してメンテナンスウィンドウを作成する](mw-cli-tutorial-create-mw.md)
+ [ステップ 2: AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録する](mw-cli-tutorial-targets.md)
+ [ステップ 3: AWS CLI を使用してメンテナンスウィンドウにタスクを登録する](mw-cli-tutorial-tasks.md)

# ステップ 1: AWS CLI を使用してメンテナンスウィンドウを作成する
<a name="mw-cli-tutorial-create-mw"></a>

このステップではメンテナンスウィンドウを作成して、名前、スケジュール、所要時間などの基本的なオプションを指定します。以降の手順で、更新するインスタンスと実行するタスクを選択します。

この例では、5 分ごとに実行されるメンテナンスウィンドウを作成します。通常は、メンテナンスウィンドウを頻繁に実行することはありません。ただし、この頻度では、チュートリアルの結果をすぐに確認できます。タスクが正常に実行された後、頻度を減らす方法を示します。

**注記**  
メンテナンスウィンドウのスケジュールに関するオプションの相互関係については、「[メンテナンスウィンドウのスケジューリングおよび有効期間のオプション](maintenance-windows-schedule-options.md)」を参照してください。  
`--schedule` オプションの使用方法の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

**AWS CLIを使用してメンテナンスウィンドウを作成するには**

1. AWS Command Line Interface (AWS CLI) を開き、ローカルマシンで次のコマンドを実行して、以下を実行するメンテナンスウィンドウを作成します。
   + 5 分ごとに最大 2 時間実行します (必要に応じて)。
   + メンテナンスウィンドウのオペレーションが終了してから 1 時間以内に新しいタスクが開始されないようにします。
   + 関連付けられていないターゲット (メンテナンスウィンドウに登録されていないインスタンス) を許可します。
   + カスタムタグによって、メンテナンスウィンドウをその作成者がチュートリアルで使用することを示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-maintenance-window \
       --name "My-First-Maintenance-Window" \
       --schedule "rate(5 minutes)" \
       --duration 2 \
       --cutoff 1 \
       --allow-unassociated-targets \
       --tags "Key=Purpose,Value=Tutorial"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-maintenance-window ^
       --name "My-First-Maintenance-Window" ^
       --schedule "rate(5 minutes)" ^
       --duration 2 ^
       --cutoff 1 ^
       --allow-unassociated-targets ^
       --tags "Key"="Purpose","Value"="Tutorial"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
      "WindowId":"mw-0c50858d01EXAMPLE"
   }
   ```

1. 次に、以下のコマンドを実行して、既にアカウントにあるこのメンテナンスウィンドウおよび他のウィンドウの詳細を表示します。

   ```
   aws ssm describe-maintenance-windows
   ```

   システムは以下のような情報を返します。

   ```
   {
      "WindowIdentities":[
         {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "Name": "My-First-Maintenance-Window",
               "Enabled": true,
               "Duration": 2,
               "Cutoff": 1,
               "NextExecutionTime": "2019-05-11T16:46:16.991Z"
         }
      ]
   }
   ```

「[ステップ 2: AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録する](mw-cli-tutorial-targets.md)」に進みます。

# ステップ 2: AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録する
<a name="mw-cli-tutorial-targets"></a>

このステップでは、新しいメンテナンスウィンドウでターゲットを登録します。この場合、メンテナンスウィンドウ実行時に更新するノードを指定します。

ノード ID を使用して一度に複数のノードを登録する例、タグを使用して複数のノードを識別する例、およびリソースグループをターゲットとして指定する例については、「[例: ターゲットをメンテナンスウィンドウに登録する](mw-cli-tutorial-targets-examples.md)」を参照してください。

**注記**  
[Maintenance Windows のチュートリアルの前提条件](maintenance-windows-tutorials.md)で説明されているように、このステップで使用する Amazon Elastic Compute Cloud (Amazon EC2) インスタンスは既に作成されているはずです。

**AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録するには**

1. ローカルマシンで次のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm register-target-with-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --resource-type "INSTANCE" \
       --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm register-target-with-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --resource-type "INSTANCE" ^
       --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
      "WindowTargetId":"e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
   }
   ```

1. ここで、ローカルマシンで次のコマンドを実行して、メンテナンスウィンドウのターゲットに関する詳細を表示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-targets \
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-targets ^
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "Targets": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
               "ResourceType": "INSTANCE",
               "Targets": [
                   {
                       "Key": "InstanceIds",
                       "Values": [
                           "i-02573cafcfEXAMPLE"
                       ]
                   }
               ]
           }
       ]
   }
   ```

「[ステップ 3: AWS CLI を使用してメンテナンスウィンドウにタスクを登録する](mw-cli-tutorial-tasks.md)」に進みます。

# 例: ターゲットをメンテナンスウィンドウに登録する
<a name="mw-cli-tutorial-targets-examples"></a>

[ステップ 2: AWS CLI を使用してメンテナンスウィンドウにターゲットノードを登録する](mw-cli-tutorial-targets.md) で示すように、ノード ID を使用して、単一のノードをターゲットとして登録できます。このページのコマンド形式を使用すると、複数のノードをターゲットとして登録することもできます。

一般的に、メンテナンスウィンドウのターゲットとして使用するノードを特定する方法は 2 つあります。個々のノードを指定する方法と、リソースタグを使用する方法です。例 2～3 に示すように、リソースタグメソッドには、さらに多くのオプションがあります。

メンテナンスウィンドウのターゲットとして、1 つ以上のリソースグループを指定することもできます。リソースグループには、ノードおよびサポートされている他の多くの種類の AWS リソースを含めることができます。次に、例 4 と 5 で、リソースグループをメンテナンスウィンドウのターゲットに追加する方法を示しています。

**注記**  
1 つのメンテナンスウィンドウタスクが複数のターゲットに登録されている場合、そのタスクの呼び出しは並列ではなく、順番に実行されます。複数のターゲットで同時にタスクを実行する必要がある場合は、各ターゲットでタスクを個別に登録し、各タスクに同じ優先度レベルを割り当てます。

リソースグループの作成と管理の詳細については、*AWS Resource Groups ユーザーガイド*の「[リソースグループとは](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)」および*AWS ニュースブログ*の「[AWS のリソースグループとタグ付け](https://aws.amazon.com/blogs/aws/resource-groups-and-tagging/)」を参照してください。

AWS Systems Manager のツールである Maintenance Windows のクォータについては、次の例で指定されているものに加えて、「*Amazon Web Services 全般のリファレンス*」の「[Systems Manager のサービスクォータ](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」を参照してください。

## 例 1: ノード ID を使用して複数のターゲットを登録する
<a name="mw-target-example-1"></a>

次のコマンドをローカルマシン形式で実行し、ノード ID を使用して複数のノードをターゲットとして登録します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE ^
    --resource-type "INSTANCE" ^
    --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE
```

------

**推奨用途**: 最初はメンテナンスウィンドウに一意のノードグループを登録し、共通のノードタグを共有*しない*のが最も有益です。

**クォータ:** 各メンテナンスウィンドウターゲットに対して、ノードを合計 50 個まで指定できます。

## 例 2: ノードに適用されたリソースタグを使用してターゲットを登録する
<a name="mw-target-example-2"></a>

ローカルマシンで次のコマンドを実行して、割り当てたキーと値のペアで既にすべてがタグ付けされているノードを登録します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=tag:Region,Values=East"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "INSTANCE" ^
    --target "Key=tag:Region,Values=East"
```

------

**推奨用途**: 最初はメンテナンスウィンドウに一意のノードグループを登録し、共通のノードタグを共有*する*のが最も有益です。

**クォータ**: ターゲットごとにキーと値のペアを合計 5 つまで指定できます。複数のキーと値のペアを指定する場合、ターゲットグループに含めると指定した*すべての*タグキーと値でノードをタグ付けする必要があります。

**注記**  
タグキー `Patch Group` または `PatchGroup` を使用してノードのグループにタグを付け、ノードに共通のキー値 (`my-patch-group`) を割り当てることができます。([EC2 インスタンスメタデータでタグを許可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#allow-access-to-tags-in-IMDS)している場合は、スペースなしで `PatchGroup` を使用する必要があります。) Systems Manager のツールである Patch Manager は、ノードで `Patch Group` または `PatchGroup` キーを評価し、適用されるパッチベースラインを決定するのに役立ちます。タスクで `AWS-RunPatchBaseline` SSM ドキュメント (またはレガシー `AWS-ApplyPatchBaseline` の SSM ドキュメント) が実行される場合は、メンテナンスウィンドウにターゲットを登録する際に、同じ `Patch Group` または `PatchGroup` のキーの値を指定することができます。例: `--target "Key=tag:PatchGroup,Values=my-patch-group`。そうすることで、メンテナンスウィンドウを使用して、同じパッチベースラインにすでに関連付けられているノードグループのパッチを更新できます。詳細については、「[パッチグループ](patch-manager-patch-groups.md)」を参照してください。

## 例 3: タグキーのグループを使用してターゲットを登録する (タグ値なし)
<a name="mw-target-example-3"></a>

ローカルマシンで次のコマンドを実行して、キー値に関係なく、複数のタグキーが割り当てられているノードをすべて登録します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=tag-key,Values=Name,Instance-Type,CostCenter"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "INSTANCE" ^
    --target "Key=tag-key,Values=Name,Instance-Type,CostCenter"
```

------

**推奨用途**: 1 つのタグキーやタグキーと値のペアではなく、複数のタグ*キー* (値はなし) を指定して、ノードをターゲットにする場合に役立ちます。

**クォータ**: ターゲットごとにタグキーを合計 5 つまで指定できます。複数のタグキーを指定する場合、ターゲットグループに含めるように指定した*すべての*タグキーで、ノードにタグ付けする必要があります。

## 例 4: リソースグループ名を使用してターゲットを登録する
<a name="mw-target-example-4"></a>

ローカルマシンで次のコマンドを実行して、指定されたリソースグループを登録します。含まれるリソースのタイプは関係ありません。*mw-0c50858d01EXAMPLE* を自分の情報に置き換えます。メンテナンスウィンドウに割り当てたタスクが、このリソースグループに含まれるリソースのタイプで動作しない場合は、エラーがレポートされる場合があります。これらのエラーにもかかわらず、サポートされているリソースタイプが検出されたタスクは引き続き実行されます。

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "RESOURCE_GROUP" \
    --target "Key=resource-groups:Name,Values=MyResourceGroup"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "RESOURCE_GROUP" ^
    --target "Key=resource-groups:Name,Values=MyResourceGroup"
```

------

**推奨用途**: すべてのリソースタイプがメンテナンスウィンドウのターゲットになるかどうかを評価せずに、リソースグループをターゲットとしてすばやく指定する場合、またはタスクでアクションを実行するリソースタイプのみ、リソースグループに含まれていることがわかっている場合に役立ちます。

**制限:** 1 つのリソースグループのみをターゲットとして指定できます。

## 例 5: リソースグループのリソースタイプをフィルタリングしてターゲットを登録する
<a name="mw-target-example-5"></a>

ローカルマシンで次のコマンドを実行して、指定したリソースグループに属する特定のリソースタイプのみを登録します。*mw-0c50858d01EXAMPLE* を自分の情報に置き換えます。このオプションを使用すると、リソースグループに属するリソースタイプのタスクを追加した場合でも、リソースタイプをフィルタに明示的に追加していない場合、タスクは実行されません。

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "RESOURCE_GROUP" \
    --target "Key=resource-groups:Name,Values=MyResourceGroup" \
    "Key=resource-groups:ResourceTypeFilters,Values=AWS::EC2::Instance,AWS::ECS::Cluster"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "RESOURCE_GROUP" ^
    --target "Key=resource-groups:Name,Values=MyResourceGroup" ^
    "Key=resource-groups:ResourceTypeFilters,Values=AWS::EC2::Instance,AWS::ECS::Cluster"
```

------

**推奨用途**: メンテナンスウィンドウでアクションを実行できる AWS リソースのタイプを厳密に制御する場合、またはリソースグループに多数のリソースタイプが含まれていて、メンテナンスウィンドウログに不要なエラーレポートを含めない場合に役立ちます。

**制限:** 1 つのリソースグループのみをターゲットとして指定できます。

# ステップ 3: AWS CLI を使用してメンテナンスウィンドウにタスクを登録する
<a name="mw-cli-tutorial-tasks"></a>

チュートリアルのこのステップでは、Linux 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで `df` コマンドを実行する AWS Systems Manager Run Command タスクを登録します。この標準の Linux コマンドの結果は、空き領域の割合をディスクで使用されているが、インスタンスのファイルシステムです。

-または-

Linux ではなく Windows Server の Amazon EC2 インスタンスをターゲットにしている場合は、以下のコマンドの **df** を **ipconfig** に置き換えます。このコマンドからの出力には、ターゲットインスタンスのアダプターの IP アドレス、サブネットマスク、デフォルトゲートウェイに関する詳細が一覧表示されます。

他のタスクタイプを登録したり、使用可能な Systems Manager Run Command オプションを使用する準備ができたら、「[例: タスクをメンテナンスウィンドウに登録する](mw-cli-register-tasks-examples.md)」を参照してください。そのトピックでは、より現実的なシナリオを計画するのに役立つように、4 つのすべてのタスクタイプについて、また、それらの最も重要なオプションのいくつかについて、詳細な情報を提供しています。

**タスクをメンテナンスウィンドウに登録するには**

1. ローカルマシンで次のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。ローカルの Windows マシンから実行するバージョンには、コマンドラインツールからコマンドを実行するのに必要なエスケープ文字 (/) が含まれています。

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
       --window-id mw-0c50858d01EXAMPLE \
       --task-arn "AWS-RunShellScript" \
       --max-concurrency 1 --max-errors 1 \
       --priority 10 \
       --targets "Key=InstanceIds,Values=i-0471e04240EXAMPLE" \
       --task-type "RUN_COMMAND" \
       --task-invocation-parameters '{"RunCommand":{"Parameters":{"commands":["df"]}}}'
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
       --window-id mw-0c50858d01EXAMPLE ^
       --task-arn "AWS-RunShellScript" ^
       --max-concurrency 1 --max-errors 1 ^
       --priority 10 ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
       --task-type "RUN_COMMAND" ^
       --task-invocation-parameters={\"RunCommand\":{\"Parameters\":{\"commands\":[\"df\"]}}}
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

1. 作成したメンテナンスウィンドウタスクの詳細を表示するには、以下のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-tasks \
       --window-id mw-0c50858d01EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-tasks ^
       --window-id mw-0c50858d01EXAMPLE
   ```

------

1. システムは以下のような情報を返します。

   ```
   {
       "Tasks": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
               "TaskArn": "AWS-RunShellScript",
               "Type": "RUN_COMMAND",
               "Targets": [
                   {
                       "Key": "InstanceIds",
                       "Values": [
                           "i-02573cafcfEXAMPLE"
                       ]
                   }
               ],
               "TaskParameters": {},
               "Priority": 10,
               "ServiceRoleArn": "arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole",
               "MaxConcurrency": "1",
               "MaxErrors": "1"
           }
       ]
   }
   ```

1. 「[ステップ 1: AWS CLI を使用してメンテナンスウィンドウを作成する](mw-cli-tutorial-create-mw.md)」で指定したスケジュールに基づいて、タスクを実行する時間になるまで待ちます。たとえば、**--schedule "rate(5 minutes)"** を指定した場合は、5 分待ちます。その後、以下のコマンドを実行して、このタスクで発生した実行に関する情報を表示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-executions \
       --window-id mw-0c50858d01EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-executions ^
       --window-id mw-0c50858d01EXAMPLE
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutions": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.096,
               "EndTime": 1557593498.611
           }
       ]
   }
   ```

**ヒント**  
タスクが正常に実行した後、メンテナンスウィンドウが実行される頻度を減らすことができます。例えば、以下のコマンドを実行して頻度を週に 1 回に減らします。*mw-0c50858d01EXAMPLE* を自分の情報に置き換えます。  

```
aws ssm update-maintenance-window \
    --window-id mw-0c50858d01EXAMPLE \
    --schedule "rate(7 days)"
```

```
aws ssm update-maintenance-window ^
    --window-id mw-0c50858d01EXAMPLE ^
    --schedule "rate(7 days)"
```
メンテナンスウィンドウのスケジュール管理の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」と「[メンテナンスウィンドウのスケジューリングおよび有効期間のオプション](maintenance-windows-schedule-options.md)」を参照してください。  
AWS Command Line Interface (AWS CLI) を使用してメンテナンスウィンドウを変更する方法については、「[チュートリアル : AWS CLI を使用してメンテナンスウィンドウを更新する](maintenance-windows-cli-tutorials-update.md)」を参照してください。

AWS CLI コマンドによりメンテナンスウィンドウのタスクとその実行に関する詳細を表示する演習については、「[チュートリアル: AWS CLI を使用してタスクおよびタスク実行に関する情報を確認する](mw-cli-tutorial-task-info.md)」に進みます。

**チュートリアルコマンド出力へのアクセス**  
AWS CLI を使用して、メンテナンスウィンドウのタスク実行に関連付けられた Run Command コマンドの*出力*を表示することは、このチュートリアルの範囲外です。

ただし、AWS CLI を使用してこのデータを表示できます。(コマンド出力をコンソールやログファイルに保存するように、メンテナンスウィンドウを設定している場合、Systems Manager コンソールでも、Amazon Simple Storage Service (Amazon S3) バケットに保存されているログファイルでも、出力を表示できます)。Linux の EC2 インスタンスでの **df** コマンドの出力は以下のようになります。

```
Filesystem 1K-blocks Used Available Use% Mounted on

devtmpfs 485716 0 485716 0% /dev

tmpfs 503624 0 503624 0% /dev/shm

tmpfs 503624 328 503296 1% /run

tmpfs 503624 0 503624 0% /sys/fs/cgroup

/dev/xvda1 8376300 1464160 6912140 18% /
```

**ipconfig** の EC2 インスタンスでの Windows Server コマンドの出力は以下のようになります。

```
Windows IP Configuration


Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : example.com
   IPv4 Address. . . . . . . . . . . : 10.24.34.0/23
   Subnet Mask . . . . . . . . . . . : 255.255.255.255
   Default Gateway . . . . . . . . . : 0.0.0.0

Ethernet adapter Ethernet:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : abc1.wa.example.net

Wireless LAN adapter Local Area Connection* 1:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::100b:c234:66d6:d24f%4
   IPv4 Address. . . . . . . . . . . : 192.0.2.0
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.0.2.0

Ethernet adapter Bluetooth Network Connection:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
```

# 例: タスクをメンテナンスウィンドウに登録する
<a name="mw-cli-register-tasks-examples"></a>

「[メンテナンスウィンドウを使用してタスクを登録する](mw-cli-tutorial-tasks.md)」に示されているように、AWS Command Line Interface (AWS CLI) を使用してメンテナンスウィンドウに Run Command (AWS Systems Manager のツール) でタスクを登録できます。このトピックで後ほど示すように、Systems Manager Automation ワークフローのタスク、AWS Lambda 関数、AWS Step Functions タスクを登録することもできます。

**注記**  
メンテナンスウィンドウの Run Command タイプのタスクには、1つ以上のターゲットを指定します。タスクに応じて、他のメンテナンスウィンドウタスクタイプ (Automation、AWS Lambda、AWS Step Functions) に対するターゲットはオプションです。ターゲットを指定しないタスクの実行の詳細については、「[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md)」を参照してください。

このトピックでは、AWS Command Line Interface (AWS CLI) コマンド `register-task-with-maintenance-window` を使用して、サポートされている 4 つのタスクタイプをそれぞれメンテナンスウィンドウに登録する例を示しています。それらの例はデモ専用ですが、作業タスクの登録コマンドを作成するように変更できます。

**--cli-input-json オプションの使用**  
タスクオプションをより適切に管理するために、`--cli-input-json` コマンドオプションに、JSON ファイルで参照されるオプション値を指定できます。

以下の例で提供しているサンプル JSON ファイルコンテンツを使用するには、ローカルマシンで以下の手順を実行します。

1. `MyRunCommandTask.json`、`MyAutomationTask.json` などの名前、または他の任意の名前でファイルを作成します。

1. そのファイルに JSON サンプルの内容をコピーします。

1. タスク登録用にその内容を変更し、そのファイルを保存します。

1. ファイルを保存したのと同じディレクトリで、以下のコマンドを実行します。ファイル名を *MyFile.json* に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
       --cli-input-json file://MyFile.json
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
       --cli-input-json file://MyFile.json
   ```

------

**メンテナンスウィンドウタスクの登録における疑似パラメータ**  
いくつかの例では、ID 情報をタスクに渡すための方法として*疑似パラメータ*を使用します。例えば、`{{TARGET_ID}}` と `{{RESOURCE_ID}}` は、AWS リソースの ID を Automation 、Lambda、Step Functions のタスクに渡すために使用されます。`--task-invocation-parameters` コンテンツ内の疑似パラメータの詳細については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

**詳細情報**  
+ ["register-task-with-maintenance-window" コマンドのパラメーターオプション](mw-cli-task-options.md).
+ [register-task-with-maintenance-window「 コマンドリファレンス」](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html)の*「AWS CLI」*を参照してください。
+ 「*[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_RegisterTaskWithMaintenanceWindow.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_RegisterTaskWithMaintenanceWindow.html) API リファレンス*」の「AWS Systems Manager」

## タスクの登録例
<a name="task-examples"></a>

以下のセクションでは、サポートされているタスクタイプを登録するサンプルの AWS CLI コマンドと、`--cli-input-json` オプションで用できる JSON サンプルを示しています。

### Systems Manager Run Command タスクを登録する
<a name="register-tasks-tutorial-run-command"></a>

以下の例は、AWS CLI を使用して、メンテナンスウィンドウで Systems Manager Run Command タスクを登録する方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id mw-0c50858d01EXAMPLE \
    --task-arn "AWS-RunShellScript" \
    --max-concurrency 1 --max-errors 1 --priority 10 \
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" \
    --task-type "RUN_COMMAND" \
    --task-invocation-parameters '{"RunCommand":{"Parameters":{"commands":["df"]}}}'
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id mw-0c50858d01EXAMPLE ^
    --task-arn "AWS-RunShellScript" ^
    --max-concurrency 1 --max-errors 1 --priority 10 ^
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
    --task-type "RUN_COMMAND" ^
    --task-invocation-parameters "{\"RunCommand\":{\"Parameters\":{\"commands\":[\"df\"]}}}"
```

------

**`--cli-input-json` ファイルオプションで使用する JSON コンテンツ:**

```
{
    "TaskType": "RUN_COMMAND",
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Description": "My Run Command task to update SSM Agent on an instance",
    "MaxConcurrency": "1",
    "MaxErrors": "1",
    "Name": "My-Run-Command-Task",
    "Priority": 10,
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "AWS-UpdateSSMAgent",
    "TaskInvocationParameters": {
        "RunCommand": {
            "Comment": "A TaskInvocationParameters test comment",
            "NotificationConfig": {
                "NotificationArn": "arn:aws:sns:region:123456789012:my-sns-topic-name",
                "NotificationEvents": [
                    "All"
                ],
                "NotificationType": "Invocation"
            },
            "OutputS3BucketName": "amzn-s3-demo-bucket",
            "OutputS3KeyPrefix": "S3-PREFIX",
            "TimeoutSeconds": 3600
        }
    }
}
```

### Systems Manager Automation タスクを登録する
<a name="register-tasks-tutorial-automation"></a>

以下の例では、AWS CLI を使用して Systems Manager Automation タスクをメンテナンスウィンドウに登録する方法を示しています。

** AWS CLI コマンド:**

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --task-arn "AWS-RestartEC2Instance" \
    --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole \
    --task-type AUTOMATION \
    --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" \
    --priority 0 --name "My-Restart-EC2-Instances-Automation-Task" \
    --description "Automation task to restart EC2 instances"
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --task-arn "AWS-RestartEC2Instance" ^
    --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole ^
    --task-type AUTOMATION ^
    --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{TARGET_ID}}'}}" ^
    --priority 0 --name "My-Restart-EC2-Instances-Automation-Task" ^
    --description "Automation task to restart EC2 instances"
```

------

**`--cli-input-json` ファイルオプションで使用する JSON コンテンツ:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
        "TaskArn": "AWS-PatchInstanceWithRollback",
    "TaskType": "AUTOMATION","TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "instanceId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
}
```

### AWS Lambda タスクを登録する
<a name="register-tasks-tutorial-lambda"></a>

以下の例では、AWS CLI を使用して Lambda 関数タスクをメンテナンスウィンドウに登録する方法を示しています。

これらの例では、Lambda 関数を作成したユーザーがその関数に `SSMrestart-my-instances` という名前を付け、`instanceId` と `targetType` という名前の 2 つのパラメータを作成したとします。

**重要**  
Maintenance Windows の IAM ポリシーでは、Lambda 関数名 (またはエイリアス) の前にプレフィックス `SSM` を付ける必要があります。このタイプのタスクを登録する前に、AWS Lambda で `SSM` を含めるようにその名前を更新します。例えば、Lambda 関数名が `MyLambdaFunction` の場合は、`SSMMyLambdaFunction` に変更します。

** AWS CLI コマンド:**

------
#### [ Linux & macOS ]

**重要**  
AWS CLI のバージョン 2 を使用している場合、Lambda ペイロードが base64 エンコードでなければ、以下のコマンドにオプション `--cli-binary-format raw-in-base64-out` を含める必要があります。`cli_binary_format` オプションは、バージョン 2 でしか使用できません。これと他の AWS CLI `config`ファイル設定については、*AWS Command Line Interface ユーザーガイド*で「[サポート対象 `config` ファイル設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings)」を参照してください。

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
    --priority 2 --max-concurrency 10 --max-errors 5 --name "My-Lambda-Example" \
    --description "A description for my LAMBDA example task" --task-type "LAMBDA" \
    --task-arn "arn:aws:lambda:region:123456789012:function:serverlessrepo-SSMrestart-my-instances-C4JF9EXAMPLE" \
    --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}","Qualifier": "$LATEST"}}'
```

------
#### [ PowerShell ]

**重要**  
AWS CLI のバージョン 2 を使用している場合、Lambda ペイロードが base64 エンコードでなければ、以下のコマンドにオプション `--cli-binary-format raw-in-base64-out` を含める必要があります。`cli_binary_format` オプションは、バージョン 2 でしか使用できません。これと他の AWS CLI `config`ファイル設定については、*AWS Command Line Interface ユーザーガイド*で「[サポート対象 `config` ファイル設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings)」を参照してください。

```
aws ssm register-task-with-maintenance-window `
    --window-id "mw-0c50858d01EXAMPLE" `
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" `
    --priority 2 --max-concurrency 10 --max-errors 5 --name "My-Lambda-Example" `
    --description "A description for my LAMBDA example task" --task-type "LAMBDA" `
    --task-arn "arn:aws:lambda:region:123456789012:function:serverlessrepo-SSMrestart-my-instances-C4JF9EXAMPLE" `
    --task-invocation-parameters '{\"Lambda\":{\"Payload\":\"{\\\"InstanceId\\\":\\\"{{RESOURCE_ID}}\\\",\\\"targetType\\\":\\\"{{TARGET_TYPE}}\\\"}\",\"Qualifier\": \"$LATEST\"}}'
```

------

**`--cli-input-json` ファイルオプションで使用する JSON コンテンツ:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "SSM_RestartMyInstances",
    "TaskType": "LAMBDA",
    "MaxConcurrency": "10",
    "MaxErrors": "10",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"instanceId\": \"{{RESOURCE_ID}}\", \"targetType\": \"{{TARGET_TYPE}}\" }",
            "Qualifier": "$LATEST"
        }
    },
    "Name": "My-Lambda-Task",
    "Description": "A description for my LAMBDA task",
    "Priority": 5
}
```

### Step Functions タスクを登録する
<a name="register-tasks-tutorial-step-functions"></a>

以下の例では、AWS CLI を使用して Step Functions ステートマシンタスクをメンテナンスウィンドウに登録する方法を示しています。

**注記**  
メンテナンスウィンドウタスクは、Step Functions 標準ステートマシンワークフローのみをサポートします。Express ステートマシンワークフローはサポートされていません。ステートマシンワークフロータイプの詳細については、「AWS Step Functions デベロッパーガイド」の「[標準ワークフローと Express ワークフロー](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html)」を参照してください。

これらの例では、ステップ関数ステートマシンを作成したユーザーが、`SSMMyStateMachine` というパラメータを指定して、`instanceId` という名前のステートマシンを作成しました。

**重要**  
Maintenance Windows の AWS Identity and Access Management (IAM) ポリシーでは、Step Functions ステートマシン名の前に `SSM` でプレフィックスを付ける必要があります。このタイプのタスクを登録する前に、AWS Step Functions で `SSM` を含めるようにその名前を更新する必要があります。たとえば、ステートマシン名が `MyStateMachine` の場合は、`SSMMyStateMachine` に変更します。

** AWS CLI コマンド:**

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
    --task-arn arn:aws:states:region:123456789012:stateMachine:SSMMyStateMachine-MggiqEXAMPLE \
    --task-type STEP_FUNCTIONS \
    --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}", "Name":"{{INVOCATION_ID}}"}}' \
    --priority 0 --max-concurrency 10 --max-errors 5 \
    --name "My-Step-Functions-Task" --description "A description for my Step Functions task"
```

------
#### [ PowerShell ]

```
aws ssm register-task-with-maintenance-window `
    --window-id "mw-0c50858d01EXAMPLE" `
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" `
    --task-arn arn:aws:states:region:123456789012:stateMachine:SSMMyStateMachine-MggiqEXAMPLE `
    --task-type STEP_FUNCTIONS `
    --task-invocation-parameters '{\"StepFunctions\":{\"Input\":\"{\\\"InstanceId\\\":\\\"{{RESOURCE_ID}}\\\"}\", \"Name\":\"{{INVOCATION_ID}}\"}}' `
    --priority 0 --max-concurrency 10 --max-errors 5 `
    --name "My-Step-Functions-Task" --description "A description for my Step Functions task"
```

------

**`--cli-input-json` ファイルオプションで使用する JSON コンテンツ:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "SSM_MyStateMachine",
    "TaskType": "STEP_FUNCTIONS",
    "MaxConcurrency": "10",
    "MaxErrors": "10",
    "TaskInvocationParameters": {
        "StepFunctions": {
            "Input": "{ \"instanceId\": \"{{TARGET_ID}}\" }",
            "Name": "{{INVOCATION_ID}}"
        }
    },
    "Name": "My-Step-Functions-Task",
    "Description": "A description for my Step Functions task",
    "Priority": 5
}
```

# "register-task-with-maintenance-window" コマンドのパラメーターオプション
<a name="mw-cli-task-options"></a>

**register-task-with-maintenance-window** コマンドには、必要に応じてタスクを設定するためのいくつかのオプションがあります。それらは、必須のオプション、任意のオプション、1 つのメンテナンスウィンドウタスクタイプにのみ適用されるオプションです。

このトピックでは、このチュートリアルのセクションでサンプルを使用するのに役立つ、これらのオプションのいくつかについて情報を提供します。すべてのコマンドオプションについては、*AWS CLI コマンドリファレンス*の「**[https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html)**」を参照してください。

**コマンドオプション: `--task-arn`**  
`--task-arn` オプションでは、タスクが実行するリソースを指定するために使用します。以下の表に示しているように、指定する値は登録するタスクのタイプによって異なります。


**メンテナンスウィンドウタスクの TaskArn 形式**  

| メンテナンスウィンドウタスクのタイプ | TaskArn 値 | 
| --- | --- | 
|  **`RUN_COMMAND`** および ** `AUTOMATION`**  |  `TaskArn` は SSM ドキュメント名または Amazon リソースネーム (ARN) です。以下に例を示します。 `AWS-RunBatchShellScript`  -または- `arn:aws:ssm:region:111122223333:document/My-Document`.  | 
|  **`LAMBDA`**  |  `TaskArn` は関数名または ARN です。以下に例を示します。 `SSMMy-Lambda-Function` -または- `arn:aws:lambda:region:111122223333:function:SSMMyLambdaFunction`.  Maintenance Windows の IAM ポリシーでは、Lambda 関数名 (またはエイリアス) の前にプレフィックス `SSM` を付ける必要があります。このタイプのタスクを登録する前に、AWS Lambda で `SSM` を含めるようにその名前を更新します。例えば、Lambda 関数名が `MyLambdaFunction` の場合は、`SSMMyLambdaFunction` に変更します。   | 
|  **`STEP_FUNCTIONS`**  |  `TaskArn` はステートマシン ARN です。以下に例を示します。 `arn:aws:states:us-east-2:111122223333:stateMachine:SSMMyStateMachine`.  メンテナンスウィンドウの IAM ポリシーでは、Step Functions ステートマシン名の前に `SSM` を付ける必要があります。このタイプのタスクを登録する前に、AWS Step Functions を含むように `SSM` の名前を更新する必要があります。たとえば、ステートマシン名が `MyStateMachine` の場合は、`SSMMyStateMachine` に変更します。   | 

**コマンドオプション: `--service-role-arn`**  
メンテナンスウィンドウタスクを実行するときに AWS Systems Manager が引き受けるロール。

詳細については、[Maintenance Windows を設定する](setting-up-maintenance-windows.md)を参照してください。

**コマンドオプション: `--task-invocation-parameters`**  
`--task-invocation-parameters` オプションを使用して、4 つのタスクタイプのそれぞれに固有のパラメータを指定します。以下の表では、4 つのタスクタイプそれぞれでサポートされているパラメータを示しています。

**注記**  
`--task-invocation-parameters` コンテンツでの \$1\$1TARGET\$1ID\$1\$1 などの疑似パラメータの使用については、「[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md)」を参照してください。

メンテナンスウィンドウタスク用のタスク呼び出しパラメータのオプション


| メンテナンスウィンドウタスクのタイプ | 使用できるパラメータ  | 例 | 
| --- | --- | --- | 
|  **`RUN_COMMAND`**  |  `Comment` `DocumentHash` `DocumentHashType` `NotificationConfig` `OutputS3BucketName` `OutPutS3KeyPrefix` `Parameters` `ServiceRoleArn` `TimeoutSeconds`  |  <pre>"TaskInvocationParameters": {<br />        "RunCommand": {<br />            "Comment": "My Run Command task comment",<br />            "DocumentHash": "6554ed3d--truncated--5EXAMPLE",<br />            "DocumentHashType": "Sha256",<br />            "NotificationConfig": {<br />                "NotificationArn": "arn:aws:sns:region:123456789012:my-sns-topic-name",<br />                "NotificationEvents": [<br />                    "FAILURE"<br />                ],<br />                "NotificationType": "Invocation"<br />            },<br />            "OutputS3BucketName": "amzn-s3-demo-bucket",<br />            "OutputS3KeyPrefix": "S3-PREFIX",<br />            "Parameters": {<br />                "commands": [<br />                    "Get-ChildItem$env: temp-Recurse|Remove-Item-Recurse-force"<br />                ]<br />            },<br />            "ServiceRoleArn": "arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole",<br />            "TimeoutSeconds": 3600<br />        }<br />    }</pre>  | 
|  **`AUTOMATION`**  |  `DocumentVersion` `Parameters`  |  <pre>"TaskInvocationParameters": {<br />        "Automation": {<br />            "DocumentVersion": "3",<br />            "Parameters": {<br />                "instanceid": [<br />                    "{{TARGET_ID}}"<br />                ]<br />            }<br />        }<br />    }</pre>  | 
|  **`LAMBDA`**  |  `ClientContext` `Payload` `Qualifier`  |  <pre>"TaskInvocationParameters": {<br />        "Lambda": {<br />            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",<br />            "Payload": "{ \"targetId\": \"{{TARGET_ID}}\", \"targetType\": \"{{TARGET_TYPE}}\" }",<br />            "Qualifier": "$LATEST"<br />        }<br />    }</pre>  | 
|  **`STEP_FUNCTIONS`**  |  `Input` `Name`  |  <pre>"TaskInvocationParameters": {<br />        "StepFunctions": {<br />            "Input": "{ \"targetId\": \"{{TARGET_ID}}\" }",<br />            "Name": "{{INVOCATION_ID}}"<br />        }<br />    }</pre>  | 

# チュートリアル: AWS CLI を使用してメンテナンスウィンドウに関する情報を確認する
<a name="maintenance-windows-cli-tutorials-describe"></a>

このチュートリアルでは、メンテナンスウィンドウ、タスク、実行、呼び出しに関する情報の更新や取得に役立つコマンドについて説明します。この例はコマンド別にまとめられており、表示したい詳細の種類をフィルタリングするためにコマンドオプションを使用する方法を示しています。

このチュートリアルの手順に従う際に、斜体の*赤色*テキストの値を、独自のオプションおよび ID に置き換えてください。例えば、メンテナンスウィンドウ ID *mw-0c50858d01EXAMPLE* とインスタンス ID *i-02573cafcfEXAMPLE* を、作成したリソースの ID に置き換えます。

AWS Command Line Interface (AWS CLI) のセットアップと構成については、「[AWS CLI のインストール、更新、アンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」および「[AWS CLI の設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」を参照してください。

**Topics**
+ ['describe-maintenance-windows' の例](#mw-cli-tutorials-describe-maintenance-windows)
+ ['describe-maintenance-window-targets' の例](#mw-cli-tutorials-describe-maintenance-window-targets)
+ ['describe-maintenance-window-tasks' の例](#mw-cli-tutorials-describe-maintenance-window-tasks)
+ [「describe-maintenance-windows-for-target」の例](#mw-cli-tutorials-describe-maintenance-windows-for-target)
+ ['describe-maintenance-window-executions'](#mw-cli-tutorials-describe-maintenance-window-executions)
+ ['describe-maintenance-window-schedule'](#mw-cli-tutorials-describe-maintenance-window-schedule)

## 'describe-maintenance-windows' の例
<a name="mw-cli-tutorials-describe-maintenance-windows"></a>

**のすべてのメンテナンスウィンドウを一覧表示するAWS アカウント**  
以下のコマンドを実行してください。

```
aws ssm describe-maintenance-windows
```

システムは以下のような情報を返します。

```
{
   "WindowIdentities":[
      {
         "WindowId":"mw-0c50858d01EXAMPLE",
         "Name":"My-First-Maintenance-Window",
         "Enabled":true,
         "Duration":2,
         "Cutoff":0,
         "NextExecutionTime": "2019-05-18T17:01:01.137Z"        
      },
      {
         "WindowId":"mw-9a8b7c6d5eEXAMPLE",
         "Name":"My-Second-Maintenance-Window",
         "Enabled":true,
         "Duration":4,
         "Cutoff":1,
         "NextExecutionTime": "2019-05-30T03:30:00.137Z"        
      },
   ]
}
```

**有効なすべてのメンテナンスウィンドウを一覧表示する**  
以下のコマンドを実行してください。

```
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=true"
```

システムは以下のような情報を返します。

```
{
   "WindowIdentities":[
      {
         "WindowId":"mw-0c50858d01EXAMPLE",
         "Name":"My-First-Maintenance-Window",
         "Enabled":true,
         "Duration":2,
         "Cutoff":0,
         "NextExecutionTime": "2019-05-18T17:01:01.137Z"        
      },
      {
         "WindowId":"mw-9a8b7c6d5eEXAMPLE",
         "Name":"My-Second-Maintenance-Window",
         "Enabled":true,
         "Duration":4,
         "Cutoff":1,
         "NextExecutionTime": "2019-05-30T03:30:00.137Z"        
      },
   ]
}
```

**無効なすべてのメンテナンスウィンドウを一覧表示する**  
以下のコマンドを実行してください。

```
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=false"
```

システムは以下のような情報を返します。

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-6e5c9d4b7cEXAMPLE",
            "Name": "My-Disabled-Maintenance-Window",
            "Enabled": false,
            "Duration": 2,
            "Cutoff": 1
        }
    ]
}
```

**特定のプレフィックスから始まる名前を持つすべてのメンテナンスウィンドウを一覧表示する**  
以下のコマンドを実行してください。

```
aws ssm describe-maintenance-windows --filters "Key=Name,Values=My"
```

システムは以下のような情報を返します。

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "Enabled": true,
            "Duration": 2,
            "Cutoff": 0,
            "NextExecutionTime": "2019-05-18T17:01:01.137Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "Enabled": true,
            "Duration": 4,
            "Cutoff": 1,
            "NextExecutionTime": "2019-05-30T03:30:00.137Z"
        },
        {
            "WindowId": "mw-6e5c9d4b7cEXAMPLE",
            "Name": "My-Disabled-Maintenance-Window",
            "Enabled": false,
            "Duration": 2,
            "Cutoff": 1
        }
    ]
}
```

## 'describe-maintenance-window-targets' の例
<a name="mw-cli-tutorials-describe-maintenance-window-targets"></a>

**特定の所有者情報の値に一致するメンテナンスウィンドウのターゲットを表示する**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-targets \
    --window-id "mw-6e5c9d4b7cEXAMPLE" \
    --filters "Key=OwnerInformation,Values=CostCenter1"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-targets ^
    --window-id "mw-6e5c9d4b7cEXAMPLE" ^
    --filters "Key=OwnerInformation,Values=CostCenter1"
```

------

**注記**  
サポートされているフィルタキーは `Type`、`WindowTargetId`、`OwnerInformation` です。

システムは以下のような情報を返します。

```
{
    "Targets": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
            "ResourceType": "INSTANCE",
            "Targets": [
                {
                    "Key": "tag:Name",
                    "Values": [
                        "Production"
                    ]
                }
            ],
            "OwnerInformation": "CostCenter1",
            "Name": "Target1"
        }
    ]
}
```

## 'describe-maintenance-window-tasks' の例
<a name="mw-cli-tutorials-describe-maintenance-window-tasks"></a>

**SSM コマンドドキュメント `AWS-RunPowerShellScript` を呼び出す登録されたタスクをすべて表示する**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-0c50858d01EXAMPLE" \
    --filters "Key=TaskArn,Values=AWS-RunPowerShellScript"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --filters "Key=TaskArn,Values=AWS-RunPowerShellScript"
```

------

システムは以下のような情報を返します。

```
{
   "Tasks":[
      {
         "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "driverquery.exe"
               ]
            }
         },
         "Priority":3,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"INSTANCE"
            }
         ]
      },
      {
         "ServiceRoleArn":"arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "ipconfig"
               ]
            }
         },
         "Priority":1,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"WINDOW_TARGET"
            }
         ]
      }
   ]
}
```

**優先度 "3" の登録されたタスクをすべて表示する**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=Priority,Values=3"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=Priority,Values=3"
```

------

システムは以下のような情報を返します。

```
{
   "Tasks":[
      {
         "ServiceRoleArn":"arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "driverquery.exe"
               ]
            }
         },
         "Priority":3,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"INSTANCE"
            }
         ]
      }
   ]
}
```

**優先度 "1" および Run Command を使用するすべての登録されたタスクを表示する**  
以下のコマンドを実行してください。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-0c50858d01EXAMPLE" \
    --filters "Key=Priority,Values=1" "Key=TaskType,Values=RUN_COMMAND"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --filters "Key=Priority,Values=1" "Key=TaskType,Values=RUN_COMMAND"
```

------

システムは以下のような情報を返します。

```
{
    "Tasks": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
            "TaskArn": "AWS-RunShellScript",
            "Type": "RUN_COMMAND",
            "Targets": [
                {
                    "Key": "InstanceIds",
                    "Values": [
                        "i-02573cafcfEXAMPLE"
                    ]
                }
            ],
            "TaskParameters": {},
            "Priority": 1,
            "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
            "MaxConcurrency": "1",
            "MaxErrors": "1"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTaskId": "8a5c4629-31b0-4edd-8aea-33698EXAMPLE",
            "TaskArn": "AWS-UpdateSSMAgent",
            "Type": "RUN_COMMAND",
            "Targets": [
                {
                    "Key": "InstanceIds",
                    "Values": [
                        "i-0471e04240EXAMPLE"
                    ]
                }
            ],
            "TaskParameters": {},
            "Priority": 1,
            "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
            "MaxConcurrency": "1",
            "MaxErrors": "1",
            "Name": "My-Run-Command-Task",
            "Description": "My Run Command task to update SSM Agent on an instance"
        }
    ]
}
```

## 「describe-maintenance-windows-for-target」の例
<a name="mw-cli-tutorials-describe-maintenance-windows-for-target"></a>

**特定のノードに関連付けられたメンテナンスウィンドウターゲットまたはタスクに関する情報を一覧表示する**  
以下のコマンドを実行してください。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-windows-for-target \
    --resource-type INSTANCE \
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" \
    --max-results 10
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-windows-for-target ^
    --resource-type INSTANCE ^
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
    --max-results 10
```

------

システムは以下のような情報を返します。

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window"
        }
    ]
}
```

## 'describe-maintenance-window-executions'
<a name="mw-cli-tutorials-describe-maintenance-window-executions"></a>

**特定の日付の前に実行されたタスクを一覧表示する**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-executions \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=ExecutedBefore,Values=2019-05-12T05:00:00Z"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-executions ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=ExecutedBefore,Values=2019-05-12T05:00:00Z"
```

------

システムは以下のような情報を返します。

```
{
    "WindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
            "Status": "FAILED",
            "StatusDetails": "The following SSM parameters are invalid: LevelUp",
            "StartTime": 1557617747.993,
            "EndTime": 1557617748.101
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557594085.428,
            "EndTime": 1557594090.978
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557593793.483,
            "EndTime": 1557593798.978
        }
    ]
}
```

**特定の日付の後で実行されるすべてのタスクを一覧表示する**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-executions \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=ExecutedAfter,Values=2018-12-31T17:00:00Z"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-executions ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=ExecutedAfter,Values=2018-12-31T17:00:00Z"
```

------

システムは以下のような情報を返します。

```
{
    "WindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
            "Status": "FAILED",
            "StatusDetails": "The following SSM parameters are invalid: LevelUp",
            "StartTime": 1557617747.993,
            "EndTime": 1557617748.101
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557594085.428,
            "EndTime": 1557594090.978
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557593793.483,
            "EndTime": 1557593798.978
        }
    ]
}
```

## 'describe-maintenance-window-schedule'
<a name="mw-cli-tutorials-describe-maintenance-window-schedule"></a>

**特定のノードで実行する次の 10 個のスケジュールされたメンテナンスウィンドウを表示する**  
以下のコマンドを実行してください。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --resource-type INSTANCE \
    --targets "Key=InstanceIds,Values=i-07782c72faEXAMPLE" \
    --max-results 10
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --resource-type INSTANCE ^
    --targets "Key=InstanceIds,Values=i-07782c72faEXAMPLE" ^
    --max-results 10
```

------

システムは以下のような情報を返します。

```
{
    "ScheduledWindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-05-18T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-05-25T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-01T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-08T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-06-15T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-22T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-06-29T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-07-06T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-07-13T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-07-20T23:35:24.902Z"
        }
    ],
    "NextToken": "AAEABUXdceT92FvtKld/dGHELj5Mi+GKW/EXAMPLE"
}
```

**特定のキーと値のペアでタグ付けされたノードのメンテナンスウィンドウのスケジュールを表示する**  
以下のコマンドを実行してください。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --resource-type INSTANCE \
    --targets "Key=tag:prod,Values=rhel7"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --resource-type INSTANCE ^
    --targets "Key=tag:prod,Values=rhel7"
```

------

システムは以下のような情報を返します。

```
{
    "ScheduledWindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-20T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-21T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-22T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-23T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-24T05:34:56-07:00"
        }
    ],
    "NextToken": "AAEABccwSXqQRGKiTZ1yzGELR6cxW4W/EXAMPLE"
}
```

**次の 4 つの開始時間を表示し、メンテナンスウィンドウの実行**  
次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --window-id "mw-0c50858d01EXAMPLE" \
    --max-results "4"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --max-results "4"
```

------

システムは以下のような情報を返します。

```
{
    "WindowSchedule": [
        {
            "ScheduledWindowExecutions": [
                {
                    "ExecutionTime": "2019-10-04T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-11T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-18T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-25T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                }
            ]
        }
    ]
}
```

# チュートリアル: AWS CLI を使用してタスクおよびタスク実行に関する情報を確認する
<a name="mw-cli-tutorial-task-info"></a>

このチュートリアルでは、AWS Command Line Interface (AWS CLI) を使用して、完了したメンテナンスウィンドウの実行に関する詳細を表示する方法を説明します。

[チュートリアル: AWS CLI を使用してメンテナンスウィンドウを作成および設定する](maintenance-windows-cli-tutorials-create.md) から直接進む場合は、実行結果を確認するために、メンテナンスウィンドウが少なくとも 1 回実行できる十分な時間があることを確認してください。

このチュートリアルの手順に従う際に、斜体の*赤色*テキストの値を、独自のオプションおよび ID に置き換えてください。例えば、メンテナンスウィンドウ ID *mw-0c50858d01EXAMPLE* とインスタンス ID *i-02573cafcfEXAMPLE* を、作成したリソースの ID に置き換えます。

**AWS CLI を使用してタスクおよびタスク実行に関する情報を確認するには**

1. 以下のコマンドを実行して、特定のメンテナンスウィンドウのタスクの実行を一覧表示します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-executions \
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-executions ^
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutions": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593793.483,
               "EndTime": 1557593798.978
           },
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.096,
               "EndTime": 1557593498.611
           },
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
               "Status": "SUCCESS",
               "StatusDetails": "No tasks to execute.",
               "StartTime": 1557593193.309,
               "EndTime": 1557593193.334
           }
       ]
   }
   ```

1. 次のコマンドを実行して、メンテナンスウィンドウのタスクの実行に関する情報を取得します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-maintenance-window-execution \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-maintenance-window-execution ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
       "TaskIds": [
           "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
       ],
       "Status": "SUCCESS",
       "StartTime": 1557593493.096,
       "EndTime": 1557593498.611
   }
   ```

1. 次のコマンドを実行して、メンテナンスウィンドウの一部として実行されるタスクリストを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-execution-tasks \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-execution-tasks ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutionTaskIdentities": [
           {
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.162,
               "EndTime": 1557593498.57,
               "TaskArn": "AWS-RunShellScript",
               "TaskType": "RUN_COMMAND"
           }
       ]
   }
   ```

1. 次のコマンドを実行して、タスク実行の詳細を取得します。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-maintenance-window-execution-task \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" \
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-maintenance-window-execution-task ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" ^
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
       "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
       "TaskArn": "AWS-RunShellScript",
       "ServiceRole": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "Type": "RUN_COMMAND",
       "TaskParameters": [
           {
               "aws:InstanceId": {
                   "Values": [
                       "i-02573cafcfEXAMPLE"
                   ]
               },
               "commands": {
                   "Values": [
                       "df"
                   ]
               }
           }
       ],
       "Priority": 10,
       "MaxConcurrency": "1",
       "MaxErrors": "1",
       "Status": "SUCCESS",
       "StartTime": 1557593493.162,
       "EndTime": 1557593498.57
   }
   ```

1. 次のコマンドを実行して、タスク実行のために行われた特定のタスク呼び出しを取得します。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-execution-task-invocations \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" \
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-execution-task-invocations ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" ^
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowExecutionTaskInvocationIdentities": [
           {
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
               "InvocationId": "c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
               "ExecutionId": "76a5a04f-caf6-490c-b448-92c02EXAMPLE",
               "TaskType": "RUN_COMMAND",
               "Parameters": "{\"documentName\":\"AWS-RunShellScript\",\"instanceIds\":[\"i-02573cafcfEXAMPLE\"],\"maxConcurrency\":\"1\",\"maxErrors\":\"1\",\"parameters\":{\"commands\":[\"df\"]}}",
               "Status": "SUCCESS",
               "StatusDetails": "Success",
               "StartTime": 1557593493.222,
               "EndTime": 1557593498.466
           }
       ]
   }
   ```

# チュートリアル : AWS CLI を使用してメンテナンスウィンドウを更新する
<a name="maintenance-windows-cli-tutorials-update"></a>

このチュートリアルでは、メンテナンスウィンドウの更新に AWS Command Line Interface (AWS CLI) を使用する方法を示します。異なるタスクタイプを更新する方法についても説明します。これらには、AWS Systems Manager Run Command と Automation、AWS Lambda、AWS Step Functions が含まれます。

このセクションの例では、メンテナンスウィンドウの更新に次の Systems Manager アクションを使用します。
+ [UpdateMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindow.html)
+ [UpdateMaintenanceWindowTarget](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindowTarget.html)
+ [UpdateMaintenanceWindowTask](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindowTask.html)
+ [DeregisterTargetFromMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DeregisterTargetFromMaintenanceWindow.html)

Systems Manager コンソールを使用してメンテナンスウィンドウを更新する方法については、「[コンソールを使用してメンテナンスウィンドウリソースを更新または削除する](sysman-maintenance-update.md)」を参照してください。

このチュートリアルの手順に従う際に、斜体の*赤色*テキストの値を、独自のオプションおよび ID に置き換えてください。例えば、メンテナンスウィンドウ ID *mw-0c50858d01EXAMPLE* とインスタンス ID *i-02573cafcfEXAMPLE* を、作成したリソースの ID に置き換えます。

**AWS CLI を使用してメンテナンスウィンドウを更新するには**

1. AWS CLI を開き、次のコマンドを実行して、ターゲットを更新し、名前と説明を含めます。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-target \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --name "My-Maintenance-Window-Target" \
       --description "Description for my maintenance window target"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-target ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --name "My-Maintenance-Window-Target" ^
       --description "Description for my maintenance window target"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE"
               ]
           }
       ],
       "Name": "My-Maintenance-Window-Target",
       "Description": "Description for my maintenance window target"
   }
   ```

1. 次のコマンドを実行し、`replace` オプションを使用して説明フィールドを削除して別のターゲットを追加します。後進に説明フィールドが含まれていない (Null 値) ため、このフィールドは削除されます。Systems Manager で使用するように設定されている追加のノードを必ず指定してください。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-target \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "d208dedf-3f6b-41ff-ace8-8e751EXAMPLE" \
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE" \
       --name "My-Maintenance-Window-Target" \
       --replace
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-target ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "d208dedf-3f6b-41ff-ace8-8e751EXAMPLE" ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE" ^
       --name "My-Maintenance-Window-Target" ^
       --replace
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE",
                   "i-0471e04240EXAMPLE"
               ]
           }
       ],
       "Name": "My-Maintenance-Window-Target"
   }
   ```

1. `start-date` オプションにより、指定した将来の日付までメンテナンスウィンドウのアクティベーションを遅らせることができます。この `end-date` オプションを設定できます。その後、将来の日付と時刻をメンテナンスウィンドウが実行されなくなりました。拡張された形式の ISO-8601 のオプションを指定します。

   次のコマンドを実行し、日時の範囲を指定する場合は定期的にスケジュールされたメンテナンスを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --start-date "2020-10-01T10:10:10Z" \
       --end-date "2020-11-01T10:10:10Z"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --start-date "2020-10-01T10:10:10Z" ^
       --end-date "2020-11-01T10:10:10Z"
   ```

------

1. 次のコマンドを実行して Run Command タスクを更新します。
**ヒント**  
ターゲットが Windows Server の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの場合は、以下のコマンドで `df` を `ipconfig` に、`AWS-RunShellScript` を `AWS-RunPowerShellScript` に変更します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "AWS-RunShellScript" \
       --service-role-arn "arn:aws:iam::account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters "RunCommand={Comment=Revising my Run Command task,Parameters={commands=df}}" \
       --priority 1 --max-concurrency 10 --max-errors 4 \
       --name "My-Task-Name" --description "A description for my Run Command task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn "AWS-RunShellScript" ^
       --service-role-arn "arn:aws:iam::account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters "RunCommand={Comment=Revising my Run Command task,Parameters={commands=df}}" ^
       --priority 1 --max-concurrency 10 --max-errors 4 ^
       --name "My-Task-Name" --description "A description for my Run Command task"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AWS-RunShellScript",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "Revising my Run Command task",
               "Parameters": {
                   "commands": [
                       "df"
                   ]
               }
           }
       },
       "Priority": 1,
       "MaxConcurrency": "10",
       "MaxErrors": "4",
       "Name": "My-Task-Name",
       "Description": "A description for my Run Command task"
   }
   ```

1. 次のコマンドを調整および実行して Lambda タスクを更新します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id mw-0c50858d01EXAMPLE \
       --window-task-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "arn:aws:lambda:region:111122223333:function:SSMTestLambda" \
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}"}}' \
       --priority 1 --max-concurrency 10 --max-errors 5 \
       --name "New-Lambda-Task-Name" \
       --description "A description for my Lambda task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id mw-0c50858d01EXAMPLE ^
       --window-task-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn --task-arn "arn:aws:lambda:region:111122223333:function:SSMTestLambda" ^
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}"}}' ^
       --priority 1 --max-concurrency 10 --max-errors 5 ^
       --name "New-Lambda-Task-Name" ^
       --description "A description for my Lambda task"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
           }
       ],
       "TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestLambda",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "Lambda": {
               "Payload": "e30="
           }
       },
       "Priority": 1,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "New-Lambda-Task-Name",
       "Description": "A description for my Lambda task"
   }
   ```

1. Step Functions タスクを更新する場合は、task-invocation-parameters を更新するように以下のコマンドを調整して実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "arn:aws:states:region:execution:SSMStepFunctionTest" \
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}"}}' \
       --priority 0 --max-concurrency 10 --max-errors 5 \
       --name "My-Step-Functions-Task" \
       --description "A description for my Step Functions task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn "arn:aws:states:region:execution:SSMStepFunctionTest" ^
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}"}}' ^
       --priority 0 --max-concurrency 10 --max-errors 5 ^
       --name "My-Step-Functions-Task" ^
       --description "A description for my Step Functions task"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "arn:aws:states:us-east-2:111122223333:execution:SSMStepFunctionTest",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "StepFunctions": {
               "Input": "{\"instanceId\":\"{{RESOURCE_ID}}\"}"
           }
       },
       "Priority": 0,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "My-Step-Functions-Task",
       "Description": "A description for my Step Functions task"
   }
   ```

1. 以下のコマンドを実行して、メンテナンスウィンドウからターゲットを登録解除します。この例では、`safe` パラメータを使用してターゲットがタスクから参照されているかどうかを判別しているため、安全に登録解除できます。

------
#### [ Linux & macOS ]

   ```
   aws ssm deregister-target-from-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --safe
   ```

------
#### [ Windows ]

   ```
   aws ssm deregister-target-from-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --safe
   ```

------

   システムは以下のような情報を返します。

   ```
   An error occurred (TargetInUseException) when calling the DeregisterTargetFromMaintenanceWindow operation: 
   This Target cannot be deregistered because it is still referenced in Task: 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

1. 次のコマンドを実行して、ターゲットがタスクから参照されている場合でもメンテナンスウィンドウからターゲットを登録解除します。`no-safe` パラメータを使用して、登録解除オペレーションを強制できます。

------
#### [ Linux & macOS ]

   ```
   aws ssm deregister-target-from-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --no-safe
   ```

------
#### [ Windows ]

   ```
   aws ssm deregister-target-from-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --no-safe
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
   }
   ```

1. 次のコマンドを実行して Run Command タスクを更新します。この例では、`UpdateLevel` という名前の Systems Manager Parameter Store パラメータを「`{{ssm:UpdateLevel}}`」という形式で使用しています。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"  \
       --task-invocation-parameters "RunCommand={Comment=A comment for my task update,Parameters={UpdateLevel='{{ssm:UpdateLevel}}'}}"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"  ^
       --task-invocation-parameters "RunCommand={Comment=A comment for my task update,Parameters={UpdateLevel='{{ssm:UpdateLevel}}'}}"
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AWS-RunShellScript",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "A comment for my task update",
               "Parameters": {
                   "UpdateLevel": [
                       "{{ssm:UpdateLevel}}"
                   ]
               }
           }
       },
       "Priority": 10,
       "MaxConcurrency": "1",
       "MaxErrors": "1"
   }
   ```

1. 次のコマンドを実行してオートメーションタスクを更新し、`WINDOW_ID` パラメータに `WINDOW_TASK_ID` パラメータと `task-invocation-parameters` パラメータを指定します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE \
       --task-arn "AutoTestDoc" \
       --service-role-arn "arn:aws:iam:account-id:role/MyMaintenanceWindowServiceRole \
       --task-invocation-parameters "Automation={Parameters={InstanceId='{{RESOURCE_ID}}',initiator='{{WINDOW_ID}}.Task-{{WINDOW_TASK_ID}}'}}" \
       --priority 3 --max-concurrency 10 --max-errors 5
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE ^
       --task-arn "AutoTestDoc" ^
       --service-role-arn "arn:aws:iam:account-id:role/MyMaintenanceWindowServiceRole ^
       --task-invocation-parameters "Automation={Parameters={InstanceId='{{RESOURCE_ID}}',initiator='{{WINDOW_ID}}.Task-{{WINDOW_TASK_ID}}'}}" ^
       --priority 3 --max-concurrency 10 --max-errors 5
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AutoTestDoc",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "Automation": {
               "Parameters": {
                   "multi": [
                       "{{WINDOW_TASK_ID}}"
                   ],
                   "single": [
                       "{{WINDOW_ID}}"
                   ]
               }
           }
       },
       "Priority": 0,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "My-Automation-Task",
       "Description": "A description for my Automation task"
   }
   ```

# チュートリアル: AWS CLI を使用してメンテナンスウィンドウを削除する
<a name="mw-cli-tutorial-delete-mw"></a>

これらのチュートリアルで作成したメンテナンスウィンドウを削除するには、次のコマンドを実行します。

```
aws ssm delete-maintenance-window --window-id "mw-0c50858d01EXAMPLE"
```

システムは以下のような情報を返します。

```
{
   "WindowId":"mw-0c50858d01EXAMPLE"
}
```

# チュートリアル: コンソールを使用してパッチ用メンテナンスウィンドウを作成する
<a name="maintenance-window-tutorial-patching"></a>

**重要**  
このレガシートピックを引き続き使用してパッチ適用のためのメンテナンスウィンドウを作成することができます。ただし、代わりにパッチポリシーを使用することをお勧めします。詳細については、「[Quick Setup でのパッチポリシー設定](patch-manager-policies.md)」および「[Quick Setup パッチポリシーを使用して組織内のインスタンスのためにパッチ適用を設定する](quick-setup-patch-manager.md)」を参照してください。

サーバーの可用性に対する影響を最小限に抑えるため、メンテナンスウィンドウを設定して事業運営を中断させない時間帯にパッチ適用を実行することをお勧めします。

この手順を開始する前に、AWS Systems Manager のツールである Maintenance Windows のロールおよびアクセス許可を設定する必要があります。詳細については、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

**パッチ適用のメンテナンスウィンドウを作成するには**

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

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

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

1. [**Name**] に、緊急および重要な更新プログラムのパッチを適用するメンテナンスウィンドウとして、これを指定する名前を入力します。

1. (オプション) **[説明]** に説明を入力します。

1. ノードをがターゲットとして登録されていない場合でも、そのマネージドノードでメンテナンスウィンドウタスクの実行を許可する場合は、[**Allow unregistered targets**] (未登録ターゲットを許可) を選択します。

   このオプションを選択すると、タスクをメンテナンスウィンドウに登録する際に、未登録ノードを (ノード ID で) 選択できます。

   このオプションを選択しない場合、タスクをメンテナンスウィンドウに登録する際に、事前に登録済みのターゲットを選択する必要があります。

1. [**スケジュール** ] セクションの上部で、3 つのスケジュールオプションのいずれかを使用して、メンテナンスウィンドウのスケジュールを指定します。

   cron/rate 式の作成の詳細については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

1. [**期間**] に、メンテナンスウィンドウを実行する時間数を入力します。指定する値は、開始時刻に基づいてメンテナンスウィンドウの具体的な終了時刻を決定します。メンテナンスウィンドウタスクは、決定された終了時刻から、次のステップで [**タスクの開始を停止**] に指定する時間数を引いて求められる時刻の後に開始することは許可されません。

   たとえば、メンテナンスウィンドウが午後 3 時に開始され、期間が 3 時間で、[**タスクの開始を停止**] の値が 1 時間の場合、午後 5 時以降はメンテナンスウィンドウのタスクを開始できません。

1. [**Stop initiating tasks**] に、メンテナンスウィンドウが終了してから新しいタスクの実行のスケジュールが停止されるまでの時間数を入力します。

1. (オプション) **[Window start date]** (ウィンドウ開始日) で、メンテナンスウィンドウをアクティブにする日時を ISO-8601 拡張形式で指定します。これにより、指定した将来の日付までメンテナンスウィンドウのアクティベーションを遅らせることができます。

1. (オプション) **[Window end date]** (ウィンドウ終了日) で、メンテナンスウィンドウを非アクティブにする日時を ISO-8601 拡張形式で指定します。これにより、メンテナンスウィンドウの実行を停止する将来の日時を設定できるようになります。

1. (オプション) **[タイムゾーンのスケジュール]** で、スケジュールされたメンテナンスウィンドウの実行の基準となるタイムゾーンを、IANA (Internet Assigned Numbers Authority) 形式で指定できます。例: 「America/Los\$1Angeles」、「etc/UTC」、または「Asia/Seoul」。

   有効な形式の詳細については、IANA ウェブサイトの「[Time Zone Database](https://www.iana.org/time-zones)」を参照してください。

1. (オプション) [**タグの管理**] 領域で、1 つ以上のタグキーの名前と値のペアをメンテナンスウィンドウに適用します。

   タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。例えば、このメンテナンスウィンドウにタグを付けて、実行するタスクのタイプを指定できます。この場合、以下のキーの名前と値のペアを指定します。
   + `Key=TaskType,Value=Patching`

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

1. メンテナンスウィンドウのリストで、作成したメンテナンスウィンドウを選択し、[**Actions**]、[**Register targets**] の順に選択します。

1. (オプション) [**Maintenance window target details**] セクションで、このターゲットの名前、説明、所有者情報 (自分の名前またはエイリアス) を指定します。

1. **[ターゲットの選択]** で、**[インスタンスタグの指定]** を選択します。

1. **[インスタンスタグの指定]** で、メンテナンスウィンドウに登録するノードを識別するためのタグキーとタグ値を入力し、**[追加]** を選択します。

1. [**Register target**] を選択します。メンテナンスウィンドウのターゲットが作成されます。

1. 作成したメンテナンスウィンドウの詳細ページで、[**アクション**]、[**run command タスクの登録**] の順に選択します。

1. (オプション) [**Maintenance window task details (メンテナンスウィンドウのタスクの詳細)**] に、このタスクの名前と説明を入力します。

1. [**Command document**] (コマンドのドキュメント) で、`AWS-RunPatchBaseline` を選択します。

1. [**Task priority (タスクの優先度)**] で、優先度を選択します。ゼロ (`0`) が最高の優先度になります。

1. [**Targets (ターゲット)**] の [**Target by (ターゲットの条件)**] で、この手順の前半で作成したメンテナンスウィンドウターゲットを選択します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) **[IAM サービスロール]** で、Systems Manager がメンテナンスウィンドウタスクの実行時期を推測するための許可を付与するロールを選択します。

   サービスロール ARN を指定しない場合、Systems Manager はアカウントのサービスにリンクされたロールを使用します。アカウントに Systems Manager 用の適切なサービスにリンクされたロールが存在しない場合は、タスクが正常に登録されるとロールが作成されます。
**注記**  
セキュリティ体制を強化するために、メンテナンスウィンドウタスクを実行するためのカスタムポリシーとカスタムサービスロールを作成することを強くお勧めします。ポリシーは、特定のメンテナンスウィンドウタスクに必要なアクセス許可のみを提供するように作成できます。詳細については、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

1. (オプション) [**出力オプション**] で、コマンド出力をファイルに保存するには、[**S3 への出力の書き込みを有効にします**] ボックスをオンにします。ボックスにバケット名とプレフィックス (フォルダ) 名を入力してください。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 アクセス許可は、このタスクを実行する IAM ユーザーのものではなく、マネージドノードに割り当てられたインスタンスプロファイルのものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールに、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

   Amazon CloudWatch Logs ロググループに出力をストリーミングするには、[**CloudWatch 出力**] ボックスを選択します。ボックスにロググループ名を入力します。

1. [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

1. [**Parameters (パラメータ)**]。
   + [**Operation (オペレーション)**] リストで、[**Scan (スキャン)**] を選択して見つからないパッチをスキャンするか、[**Install (インストール)**] を選択して見つからないパッチをスキャンしてインストールします。
   + [**Snapshot Id (スナップショット ID)**] フィールドには何も指定する必要がありません。このシステムでは、このパラメータが自動的に生成されて提供されます。
   + パッチベースラインに指定されているものとは異なるパッチのセットをPatch Managerで使用する場合を除き、[**Install Override List (インストール上書きリスト)**] フィールドには何も入力する必要はありません。詳細については、「[パラメータ名: `InstallOverrideList`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-installoverridelist)」を参照してください。
   + **[再起動オプション]** で、`Install` オペレーション中にパッチがインストールされた場合にノードを再起動するか、Patch Manager が前回のノードの再起動後にインストールされた他のパッチを検出した場合にノードを再起動するかを指定します。詳細については、「[パラメータ名: `RebootOption`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-norebootoption)」を参照してください。
   + (オプション) [**Comment (コメント)**] に、このコマンドに関する追跡メモまたはリマインダーを入力します。
   + [**Timeout (seconds) (タイムアウト (秒))**] に、オペレーションが完了せずに失敗したとみなされるまでにシステムが待機する秒数を入力します。

1. [**Register Run command task** (Run command タスクの登録)] を選択します。

メンテナンスウィンドウタスクが完了したら、[Fleet Manager](fleet-manager.md) ツールの Systems Manager コンソールで、パッチコンプライアンスの詳細を確認できます。

あるいは [Patch Manager](patch-manager.md) ツールの **[コンプライアンスレポート]** タブでコンプライアンス情報を確認することもできます。

[DescribePatchGroupState](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribePatchGroupState.html) と [DescribeInstancePatchStatesForPatchGroup](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeInstancePatchStatesForPatchGroup.html) の API を使用してコンプライアンスの詳細を確認することもできます。パッチコンプライアンスデータの詳細については、「[パッチコンプライアンスについて](compliance-about.md#compliance-monitor-patch)」を参照してください。

# メンテナンスウィンドウを使用してスケジュールにパッチを適用する
<a name="sysman-patch-scheduletasks"></a>

パッチベースライン (およびオプションのパッチグループ) を設定したら、メンテナンスウィンドウを使用してパッチをノードに適用できます。メンテナンスウィンドウは、パッチ適用プロセスを実行する時間を、事業運営を中断させない時間に指定することで、サーバーの可用性に対する影響を軽減させることができます。メンテナンスウィンドウの動作は次のようになります。

1. メンテナンスウィンドウを作成してパッチ適用オペレーションをスケジュールします。

1. `Patch Group` または `PatchGroup` タグ、Amazon Elastic Compute Cloud (Amazon EC2) タグを定義した値 (「Web サーバー」、「US-EAST-PROD」など) を指定して、メンテナンスウィンドウのターゲットを選択します。([EC2 インスタンスのメタデータでタグを許可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#allow-access-to-tags-in-IMDS)している場合は、スペースなしで `PatchGroup` を使用する必要があります。)

1. 新しいメンテナンスウィンドウタスクを作成し、`AWS-RunPatchBaseline`ドキュメントを指定します。

タスクを設定するときに、ノードをスキャンするか、ノードをスキャンしてパッチをインストールするかを選択できます。ノードのスキャンを選択すると、AWS Systems Manager のツールである Patch Manager は各ノードをスキャンし、見つからないパッチのリストを生成して確認できるようにします。

パッチのスキャンとインストールを選択すると、Patch Manager は各ノードをスキャンし、インストールされているパッチのリストとベースラインの承認済みパッチのリストを照合します。Patch Manager は不足しているパッチを特定し、不足しているすべての承認済みパッチをダウンロードしてインストールします。

問題を解決するためにスキャンやインストールを 1 回のみ実行する場合は、Run Command を使用して `AWS-RunPatchBaseline` ドキュメントを直接呼び出すことができます。

**重要**  
パッチをインストールすると、Systems Manager によって各ノードが再起動されます。再起動は、パッチが正しくインストールされていることを確認し、ノードを適切な状態に更新するために必要です。(例外: `RebootOption` パラメータが `AWS-RunPatchBaseline` ドキュメントの `NoReboot` で設定されている場合、パッチマネージャーの Patch Manager 実行後にマネージドノードは再起動されません。詳細については、「[パラメータ名: `RebootOption`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-norebootoption)」を参照してください。) 

# メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用
<a name="maintenance-window-tasks-pseudo-parameters"></a>

AWS Systems Manager のツールである Maintenance Windows でタスクを登録する際、4 つのタスクタイプのそれぞれに固有のパラメータを指定します。(CLI コマンドでは、これらは `--task-invocation-parameters` オプションを使用して指定されます)。

 `{{RESOURCE_ID}}`、`{{TARGET_TYPE}}`、`{{WINDOW_TARGET_ID}}` などの*擬似パラメータ*構文を使用して、特定の値を参照することもできます。メンテナンスウィンドウタスクが実行されると、擬似パラメータプレースホルダーの代わりに正しい値を渡します。使用できる擬似パラメータすべてのリストについては、このトピックの後半の「[サポートされる擬似パラメータ](#pseudo-parameters)」を参照してください。

**重要**  
`RESOURCE_GROUP` ターゲットタイプでは、タスクに必要な ID 形式に応じて、タスクの実行時にリソースを参照するために `{{TARGET_ID}}` と `{{RESOURCE_ID}}` を使用するかを選択できます。`{{TARGET_ID}}` は、リソースの完全な ARN を返します。`{{RESOURCE_ID}}` は、これらの例に示すように、リソースの短い名前または ID のみを返します。  
`{{TARGET_ID}}` 形式: `arn:aws:ec2:us-east-1:123456789012:instance/i-02573cafcfEXAMPLE`
`{{RESOURCE_ID}}` 形式: `i-02573cafcfEXAMPLE`
`INSTANCE` ターゲットタイプの場合、`{{TARGET_ID}}` パラメータと `{{RESOURCE_ID}}` パラメータの両方がインスタンス ID のみを生成します。詳細については、「」を参照してください[サポートされる擬似パラメータ](#pseudo-parameters)  
`{{TARGET_ID}}` および `{{RESOURCE_ID}}` を使用して、AWS リソースの ID を Automation、Lambda、Step Functions のタスクにのみ渡すことができます。これら 2 つの擬似パラメータは、Run Command タスクでは使用できません。

## 擬似パラメータの例
<a name="pseudo-parameter-examples"></a>

AWS Lambda タスクのペイロードが、ID でインスタンスを参照する必要があるとします。

`INSTANCE` または `RESOURCE_GROUP` メンテナンスウィンドウターゲットを使用しているかどうかに関係なく、これは `{{RESOURCE_ID}}` 擬似パラメータを使用することで実現できます。例:

```
"TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestFunction",
    "TaskType": "LAMBDA",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"instanceId\": \"{{RESOURCE_ID}}\" }",
            "Qualifier": "$LATEST"
        }
    }
```

Lambda タスクが、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに加えて、サポートされている別のターゲットタイプ (Amazon DynamoDB テーブルなど) に対して実行することを意図している場合は、同じ構文を使用でき、`{{RESOURCE_ID}}` はテーブルの名前のみを生成します。ただし、テーブルの完全な ARN が必要な場合は、次の例に示すように `{{TARGET_ID}}` を使用します。

```
"TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestFunction",
    "TaskType": "LAMBDA",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"tableArn\": \"{{TARGET_ID}}\" }",
            "Qualifier": "$LATEST"
        }
    }
```

ターゲットインスタンスやその他のリソースタイプに対しても、同じ構文を使用できます。複数のリソースタイプがリソースグループに追加されている場合、タスクは適切な各リソースに対して実行されます。

**重要**  
リソースグループに含まれるすべてのリソースタイプが `{{RESOURCE_ID}}` パラメータの値を生成するわけではありません。サポートされているリソースタイプの一覧については、「[サポートされる擬似パラメータ](#pseudo-parameters)」を参照してください。

別の例として、EC2 インスタンスを停止する Automation タスクを実行するには、`AWS-StopEC2Instance` Systems Manager ドキュメント (SSM ドキュメント) を `TaskArn` 値として指定し、`{{RESOURCE_ID}}` 擬似パラメータを使用します。

```
"TaskArn": "AWS-StopEC2Instance",
    "TaskType": "AUTOMATION"
    "TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "instanceId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
```

Amazon Elastic Block Store (Amazon EBS) ボリュームのスナップショットをコピーする Automation タスクを実行するには、`AWS-CopySnapshot` SSM ドキュメントを `TaskArn` 値として指定し、`{{RESOURCE_ID}}` 擬似パラメータを使用します。

```
"TaskArn": "AWS-CopySnapshot",
    "TaskType": "AUTOMATION"
    "TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "SourceRegion": "us-east-2",
                "targetType":"RESOURCE_GROUP",
                "SnapshotId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
```

## サポートされる擬似パラメータ
<a name="pseudo-parameters"></a>

以下のリストでは、`{{PSEUDO_PARAMETER}}` オプションの `--task-invocation-parameters` 構文を使用して指定できる疑似パラメータについて説明しています。
+ **`WINDOW_ID`**: ターゲットメンテナンスウィンドウの ID。
+ **`WINDOW_TASK_ID`**: 実行されているウィンドウタスクの ID。
+ **`WINDOW_TARGET_ID`**: ターゲット (ターゲット ID) を含むウィンドウターゲットの ID。
+ **`WINDOW_EXECUTION_ID`**: 現在のウィンドウ実行の ID。
+ **`TASK_EXECUTION_ID`**: 現在のタスク実行の ID。
+ **`INVOCATION_ID`**: 現在の呼び出しの ID。
+ **`TARGET_TYPE`**: ターゲットのタイプ。サポートされるタイプには `RESOURCE_GROUP`、`INSTANCE` などがあります。
+ **`TARGET_ID`**: 

  指定したターゲットタイプが `INSTANCE` の場合、`TARGET_ID`擬似パラメータはインスタンスの ID に置き換えられます。例えば、`i-078a280217EXAMPLE`。

  指定したターゲットタイプが `RESOURCE_GROUP` の場合、タスク実行で参照される値は、リソースの完全な ARN になります。例: `arn:aws:ec2:us-east-1:123456789012:instance/i-078a280217EXAMPLE`。次の表に、リソースグループ内の特定のリソースタイプの `TARGET_ID` 値の例を示します。
**注記**  
`TARGET_ID` は Run Command タスクではサポートされていません。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/maintenance-window-tasks-pseudo-parameters.html)
+ **`RESOURCE_ID`**: リソースグループに含まれるリソースタイプの短い ID。次の表に、リソースグループ内の特定のリソースタイプの `RESOURCE_ID` 値の例を示します。
**注記**  
`RESOURCE_ID` は Run Command タスクではサポートされていません。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/maintenance-window-tasks-pseudo-parameters.html)
**注記**  
指定した AWS リソースグループに、`RESOURCE_ID` 値を生成しないリソースタイプが含まれており、前述の表にリストされていない場合、`RESOURCE_ID` パラメータは入力されません。そのリソースに対して実行の呼び出しは引き続き発生します。このような場合は、代わりに `TARGET_ID` 擬似パラメータを使用します。このパラメータは、リソースの完全な ARN に置き換えられます。

# メンテナンスウィンドウのスケジューリングおよび有効期間のオプション
<a name="maintenance-windows-schedule-options"></a>

メンテナンスウィンドウを作成するときは、メンテナンスウィンドウの実行頻度を [Cron または Rate 式](reference-cron-and-rate-expressions.md)で指定する必要があります。必要に応じて、メンテナンスウィンドウを定期的なスケジュールで実行できる期間の日付範囲と、その定期的なスケジュールのベースとなるタイムゾーンを指定することができます。

ただし、タイムゾーンオプションおよび開始日と終了日のオプションは互いに影響しない点に注意してください。指定した開始日と終了日時 (タイムゾーンのオフセットの有無にかかわらず) は、メンテナンスウィンドウがそのスケジュールで実行できる*有効期間*のみを決定します。タイムゾーンオプションは、有効な*期間中*にメンテナンスウィンドウのスケジュールがベースとする国際タイムゾーンを決定します。

**注記**  
ISO-8601 タイムスタンプ形式で開始日と終了日を指定します。例: `2021-04-07T14:29:00-08:00`  
タイムゾーンを IANA (Internet Assigned Numbers Authority) 形式で指定します。例: `America/Chicago`、`Europe/Berlin`、または `Asia/Tokyo`

**Topics**
+ [例 1: メンテナンスウィンドウの開始日を指定する](#schedule-example-start-date)
+ [例 2: メンテナンスウィンドウの開始日と終了日を指定する](#schedule-example-start-end-date)
+ [例 3: 一度のみ実行するメンテナンスウィンドウを作成する](#schedule-example-one-time)
+ [例 4: メンテナンスウィンドウのスケジュールオフセット日数を指定する](#schedule-example-schedule-offset)

## 例 1: メンテナンスウィンドウの開始日を指定する
<a name="schedule-example-start-date"></a>

AWS Command Line Interface (AWS CLI) を使用し、次のオプションを指定してメンテナンスウィンドウを作成するとします。
+ `--start-date 2021-01-01T00:00:00-08:00`
+ `--schedule-timezone "America/Los_Angeles"`
+ `--schedule "cron(0 09 ? * WED *)"`

以下に例を示します。

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-LAX-Maintenance-Window" \
    --allow-unassociated-targets \
    --duration 3 \
    --cutoff 1 \
    --start-date 2021-01-01T00:00:00-08:00 \
    --schedule-timezone "America/Los_Angeles" \
    --schedule "cron(0 09 ? * WED *)"
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-LAX-Maintenance-Window" ^
    --allow-unassociated-targets ^
    --duration 3 ^
    --cutoff 1 ^
    --start-date 2021-01-01T00:00:00-08:00 ^
    --schedule-timezone "America/Los_Angeles" ^
    --schedule "cron(0 09 ? * WED *)"
```

------

これは、2021 年 1 月 1 日金曜日、米国東部標準時の午前 0 時に指定された開始日時*以降*は、メンテナンスウィンドウの初回実行ができなくなることを意味しています。(このタイムゾーンは UTC 時間より 8 時間遅れています。) この場合、ウィンドウ期間の開始日時が、メンテナンスウィンドウが最初に実行される時期を表すものではありません。総合すると、`--schedule-timezone` と `--schedule` の値は、メンテナンスウィンドウが米国太平洋標準時 (IANA 形式では「America/Los Angeles」で表される) で毎週水曜日の午前 9 時に実行されることを意味しています。有効な期間中の最初の実行は、2021 年 1 月 4 日水曜日、太平洋標準時の午前 9 時となります。

## 例 2: メンテナンスウィンドウの開始日と終了日を指定する
<a name="schedule-example-start-end-date"></a>

次に、これらのオプションを使用してメンテナンスウィンドウを作成するとします。
+ `--start-date 2019-01-01T00:03:15+09:00`
+ `--end-date 2019-06-30T00:06:15+09:00`
+ `--schedule-timezone "Asia/Tokyo"`
+ `--schedule "rate(7 days)"`

以下に例を示します。

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-NRT-Maintenance-Window" \
    --allow-unassociated-targets \
    --duration 3 \
    --cutoff 1 \
    --start-date 2019-01-01T00:03:15+09:00 \
    --end-date 2019-06-30T00:06:15+09:00 \
    --schedule-timezone "Asia/Tokyo" \
    --schedule "rate(7 days)"
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-NRT-Maintenance-Window" ^
    --allow-unassociated-targets ^
    --duration 3 ^
    --cutoff 1 ^
    --start-date 2019-01-01T00:03:15+09:00 ^
    --end-date 2019-06-30T00:06:15+09:00 ^
    --schedule-timezone "Asia/Tokyo" ^
    --schedule "rate(7 days)"
```

------

このメンテナンスウィンドウの有効期間は、2019 年 1 月 1 日の日本標準時午前 3 時 15 分に始まります。このメンテナンスウィンドウの有効期間は、2019 年 6 月 30 日日曜日の日本標準時午前 6 時 15 分に終了します。(このタイムゾーンは UTC 時間より 9 時間進んでいます。) 総合すると、`--schedule-timezone` と `--schedule` の値は、メンテナンスウィンドウが日本標準時 (IANA 形式では「Asia/Tokyo」で表される) で毎週火曜日の午前 3 時 15 分に実行されることを意味しています。これは、メンテナンスウィンドウが 7 日ごとに実行され、1 月 1 日火曜日の午前 3 時 15 分にアクティブになるためです。最後の実行は、2019 年 6 月 25 日火曜日の日本標準時午前 3 時 15 分です。これは、有効なメンテナンスウィンドウ期間が終了する 5 日前の、最後の火曜日です。

## 例 3: 一度のみ実行するメンテナンスウィンドウを作成する
<a name="schedule-example-one-time"></a>

このオプションでメンテナンスウィンドウを作成できるようになりました。
+ `--schedule "at(2020-07-07T15:55:00)"`

以下に例を示します。

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-One-Time-Maintenance-Window" \
    --schedule "at(2020-07-07T15:55:00)" \
    --duration 5 \
    --cutoff 2 \
    --allow-unassociated-targets
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-One-Time-Maintenance-Window" ^
    --schedule "at(2020-07-07T15:55:00)" ^
    --duration 5 ^
    --cutoff 2 ^
    --allow-unassociated-targets
```

------

このメンテナンスウィンドウは、2020 年 7 月 7 日午後 3 時 55 分 (UTC 時間) に実行されます。メンテナンスウィンドウは、必要に応じて最大 5 時間実行できますが、メンテナンスウィンドウ期間の終了 2 時間前に新しいタスクを開始することはできません。

## 例 4: メンテナンスウィンドウのスケジュールオフセット日数を指定する
<a name="schedule-example-schedule-offset"></a>

このオプションでメンテナンスウィンドウを作成できるようになりました。

```
--schedule-offset 2
```

以下に例を示します。

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-Cron-Offset-Maintenance-Window" \
    --schedule "cron(0 30 23 ? * TUE#3 *)" \
    --duration 4 \
    --cutoff 1 \
    --schedule-offset 2 \
    --allow-unassociated-targets
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-Cron-Offset-Maintenance-Window" ^
    --schedule "cron(0 30 23 ? * TUE#3 *)" ^
    --duration 4 ^
    --cutoff 1 ^
    --schedule-offset 2 ^
    --allow-unassociated-targets
```

------

スケジュールオフセットは、CRON 式で指定された日時からメンテナンスウィンドウを実行するまでに待機する日数です。

前述の例では、CRON 式により、毎月第 3 火曜日の午後 11:30 にメンテナンスウィンドウがスケジュールされます。

```
--schedule "cron(0 30 23 ? * TUE#3 *)
```

ただし、`--schedule-offset 2` を含めると、メンテナンスウィンドウは、毎月第 3 火曜日の 2 日*後*の午後 11:30 PM まで実行されません。

スケジュールオフセットは、CRON 式でのみサポートされます。

**詳細情報**  
+ [リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)
+ [コンソールを使用してメンテナンスウィンドウを作成する](sysman-maintenance-create-mw.md)
+ [チュートリアル: AWS CLI を使用してメンテナンスウィンドウを作成および設定する](maintenance-windows-cli-tutorials-create.md)
+ *AWS Systems Manager API リファレンス*の「[CreateMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateMaintenanceWindow.html)」
+ 「AWS CLI コマンドリファレンスの AWS Systems Manager セクション」内、「[https://docs.aws.amazon.com/cli/latest/reference/ssm/create-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-maintenance-window.html)」
+ IANA ウェブサイトの [Time Zone Database](https://www.iana.org/time-zones)

# ターゲットのないメンテナンスウィンドウタスクを登録
<a name="maintenance-windows-targetless-tasks"></a>

作成するメンテナンスウィンドウごとに、メンテナンスウィンドウの実行時に実行するタスクを 1 つ以上指定できます。ほとんどの場合、タスクを実行するリソース、またはターゲットを指定する必要があります。ただし、タスクでターゲットを明示的に指定する必要がない場合もあります。

メンテナンスウィンドウの Systems Manager Run Command タイプのタスクには、1 つ以上のターゲットを指定する必要があります。タスクの特質に応じて、他のメンテナンスウィンドウタスクタイプ (Systems Manager Automation、AWS Lambda、AWS Step Functions) ではターゲットはオプションです。

Lambda および Step Functions タスクタイプの場合、ターゲットが必要かどうかは、作成した関数またはステートマシンの内容によって異なります。

**注記**  
タスクがターゲットを登録すると、オートメーション、AWS Lambda、および AWS Step Functions タスクはリソースグループとタグからターゲットを解決し、解決されたリソースごとに 1 つの呼び出しを送信し、その結果、複数のタスク呼び出しが発生します。例えば、複数のインスタンスを含むリソースグループに登録されている Lambda タスクの呼び出しを 1 つだけ行う必要があるとしましょう。この場合、AWS マネジメントコンソールで作業している場合は、**[Register Lambda タスク]** ページまたは **[Lambda タスクの編集]** ページで、**[タスクターゲットが不要]** なオプションを選択します。AWS CLI コマンドを使用している場合は、[https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html) コマンドまたは [https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html) コマンドの実行時に `--targets` パラメータを使用してターゲットを指定しないでください。

多くの場合、オートメーションタスクのターゲットを明示的に指定する必要はありません。例えば、`AWS-UpdateLinuxAmi` ランブックを使用して Linux 用の Amazon Machine Image (AMI) を更新するためのオートメーションタイプのタスクを作成するとします。このタスクが実行されると、AMI は最新の利用可能な Linux ディストリビューションパッケージと Amazon ソフトウェアを反映して更新されます。AMI から作成した新しいインスタンスには、これらの更新がインストール済みです。更新する AMI の ID はランブックの入力パラメータで指定されるため、メンテナンスウィンドウタスクでターゲットを再度指定する必要はありません。

同様に、AWS Command Line Interface (AWS CLI) を使用して、`AWS-RestartEC2Instance` ランブックを使用するメンテナンスウィンドウのオートメーションタスクを登録するとします。再起動するノードは `--task-invocation-parameters` 引数で指定されるため、`--targets` オプションも指定する必要はありません。

**注記**  
ターゲットが指定されていないメンテナンスウィンドウタスクの場合、`--max-errors` と `--max-concurrency` の値は指定できません。代わりに、システムはプレースホルダ値として `1` を挿入します。これは [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) や [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html) などのコマンドへのレスポンスで報告されることがあります。これらの値は、タスクの実行には影響しないため、無視できます。

次の例は、ターゲットなしのメンテナンスウィンドウタスクの `--targets`、`--max-errors`、`--max-concurrency` オプションを省略する方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-ab12cd34eEXAMPLE" \
    --service-role-arn "arn:aws:iam::123456789012:role/MaintenanceWindowAndAutomationRole" \
    --task-type "AUTOMATION" \
    --name "RestartInstanceWithoutTarget" \
    --task-arn "AWS-RestartEC2Instance" \
    --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"]}}}" \
    --priority 10
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id "mw-ab12cd34eEXAMPLE" ^
    --service-role-arn "arn:aws:iam::123456789012:role/MaintenanceWindowAndAutomationRole" ^
    --task-type "AUTOMATION" ^
    --name "RestartInstanceWithoutTarget" ^
    --task-arn "AWS-RestartEC2Instance" ^
    --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"]}}}" ^
    --priority 10
```

------

**注記**  
2020 年 12 月 23 日より前に登録されたメンテナンスウィンドウタスクの場合: タスクのターゲットを指定し、そのターゲットが不要になった場合、Systems Manager コンソールまたは [https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html) AWS CLI コマンドを使用して、そのタスクを更新してターゲットを削除できます。

**詳細情報**  
+ [エラーメッセージ:「Maintenance window tasks without targets don't support MaxConcurrency values」および「Maintenance window tasks without targets don't support MaxErrors values」](troubleshooting-maintenance-windows.md#maxconcurrency-maxerrors-not-supported)

# メンテナンスウィンドウのトラブルシューティング
<a name="troubleshooting-maintenance-windows"></a>

以下の情報を参考にして、メンテナンスウィンドウに関する問題のトラブルシューティングを行います。

**Topics**
+ [タスクの編集エラー: メンテナンスウィンドウのタスクを編集するためのページで、IAM ロールリストから次のエラーメッセージが返されます。「このタスクに指定されている IAM メンテナンスウィンドウのロールが見つかりませんでした。このロールは削除された可能性があるか、まだ作成されていない可能性があることを示すエラーメッセージを返す](#maintenance-window-role-troubleshooting)
+ [すべてのメンテナンスウィンドウのターゲットが更新されるわけではありません。](#targets-not-updated)
+ [タスクがタスク呼び出しステータスで失敗する:「The provided role does not contain the correct SSM permissions.」(指定されたロールには正しい SSM 許可が含まれていません。)](#incorrect-ssm-permissions)
+ [タスクはエラーメッセージで失敗します:「Step fails when it is validating and resolving the step inputs」](#step-fails)
+ [エラーメッセージ:「Maintenance window tasks without targets don't support MaxConcurrency values」および「Maintenance window tasks without targets don't support MaxErrors values」](#maxconcurrency-maxerrors-not-supported)

## タスクの編集エラー: メンテナンスウィンドウのタスクを編集するためのページで、IAM ロールリストから次のエラーメッセージが返されます。「このタスクに指定されている IAM メンテナンスウィンドウのロールが見つかりませんでした。このロールは削除された可能性があるか、まだ作成されていない可能性があることを示すエラーメッセージを返す
<a name="maintenance-window-role-troubleshooting"></a>

**問題 1**: タスクを作成したら、元々指定していたAWS Identity and Access Management （IAM) メンテナンスウィンドウロールが削除された。

**解決方法**: 1) 別の IAM メンテナンスウィンドウロールを選択する。(アカウントに存在する場合)、新しいロールを作成してそのタスク用に選択します。

**問題 2**: AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、または AWS SDK を使用してタスクが作成された場合は、存在しない IAM メンテナンスウィンドウロールの名前が指定された可能性があります。例えば、タスクを作成する前に IAM メンテナンスウィンドウロールが削除された、またはロール名が正しく入力されなかった可能性があります (例えば、**myrole** ではなく **my-role** と入力した)。

**解決方法**: 使用する IAM メンテナンスウィンドウロールの正しい名前を選択するか、新しいロールを作成してそのタスク用に指定します。

## すべてのメンテナンスウィンドウのターゲットが更新されるわけではありません。
<a name="targets-not-updated"></a>

**問題:** メンテナンスウィンドウのタスクが、メンテナンスウィンドウの対象となるすべてのリソースで実行されなかったことに気付きました。たとえば、メンテナンスウィンドウの実行結果で、そのリソースのタスクが失敗またはタイムアウトとしてマークされます。

**解決方法:** メンテナンスウィンドウタスクがターゲットリソースで実行されない最も一般的な理由は、接続性と可用性です。以下に例を示します。
+ Systems Manager メンテナンスウィンドウの操作前または操作中にリソースへの接続が失われました。
+ リソースがオフラインだったか、メンテナンスウィンドウの操作中に停止しました。

リソースでタスクを実行するために、次のスケジュールされたメンテナンスウィンドウ時間を待つことができます。使用できないリソースまたはオフラインだったリソースに対して、メンテナンスウィンドウタスクを手動で実行できます。

## タスクがタスク呼び出しステータスで失敗する:「The provided role does not contain the correct SSM permissions.」(指定されたロールには正しい SSM 許可が含まれていません。)
<a name="incorrect-ssm-permissions"></a>

**問題**: タスクにメンテナンスウィンドウサービスロールを指定しましたが、タスクが正常に実行されず、タスク呼び出しステータスが「"The provided role does not contain the correct SSM permissions.」(指定されたロールには正しい SSM 許可が含まれていません) とレポートします。
+ **解決策**: [タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](configuring-maintenance-window-permissions-console.md#create-custom-policy-console) では、[カスタムメンテナンスウィンドウのサービスロール](configuring-maintenance-window-permissions-console.md#create-custom-role-console)にアタッチできる基本ポリシーを提供しています。ポリシーには、多くのタスクシナリオに必要な許可が含まれています。ただし、実行できるタスクは多種多様であるため、メンテナンスウィンドウロールのポリシーで追加の許可を提供する必要がある場合があります。

  たとえば、一部のオートメーションアクションは AWS CloudFormation スタックと連携します。したがって、メンテナンスウィンドウサービスロールのポリシーに、追加の許可 `cloudformation:CreateStack`、`cloudformation:DescribeStacks`、`cloudformation:DeleteStack` を追加する必要がある場合があります。

  別の例: オートメーションランブックの `AWS-CopySnapshot` では、Amazon Elastic Block Store (Amazon EBS) スナップショットを作成するためのアクセス許可が必要です。したがって、許可 `ec2:CreateSnapshot` を追加する必要がある場合があります。

  AWS マネージド自動化ランブックに必要なロール許可については、「[AWS Systems Manager 自動化ランブックリファレンス](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)」のランブックの説明を参照してください。

  AWS マネージド SSM ドキュメントが必要とするロールの許可については、Systems Manager コンソールの「[ドキュメント](https://console.aws.amazon.com//systems-manager/documents)」セクションでドキュメントの内容を確認してください。

  Step Functions タスク、Lambda タスク、カスタム Automation ランブックおよび SSM ドキュメントに必要なロール許可については、それらのリソースの作成者に許可要件を確認してください。

## タスクはエラーメッセージで失敗します:「Step fails when it is validating and resolving the step inputs」
<a name="step-fails"></a>

**問題**: タスクで使用しているオートメーションランブックまたは Systems Manager Command ドキュメントでは `InstanceId` や `SnapshotId` などの入力を指定する必要がありますが、値が指定されていないか、正しく指定されていません。
+ **解決策 1 **: タスクが 1 つのリソース (単一ノードやスナップショットなど) を対象とする場合は、タスクの入力パラメーターにその ID を入力します。
+ **解決策 2**: タスクが複数のリソースをターゲットにしている場合 (ランブック `AWS-CreateImage` を使用するときに複数のノードからイメージを作成する場合など)、メンテナンスウィンドウタスクでサポートされている擬似パラメータの 1 つを入力パラメータで使用して、コマンドでノード ID を表すことができます。

  以下のコマンドは、AWS CLI を使用して、Systems Manager Automation タスクをメンテナンスウィンドウに登録します。`--targets` の値は、メンテナンスウィンドウのターゲット ID を示します。また、`--targets` パラメータでウィンドウターゲット ID が指定されていても、Automation ランブックのパラメータにはノード ID を指定する必要があります。この場合、コマンドは擬似パラメーター`{{RESOURCE_ID}}` を `InstanceId` の値として使用します。

  ** AWS CLI コマンド:**

------
#### [ Linux & macOS ]

  次のサンプルコマンドは、メンテナンスウィンドウのターゲットグループに属する Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを ID e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE で再起動します。

  ```
  aws ssm register-task-with-maintenance-window \
      --window-id "mw-0c50858d01EXAMPLE" \
      --targets Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE \
      --task-arn "AWS-RestartEC2Instance" \
      --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole \
      --task-type AUTOMATION \
      --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" \
      --priority 0 --max-concurrency 10 --max-errors 5 --name "My-Restart-EC2-Instances-Automation-Task" \
      --description "Automation task to restart EC2 instances"
  ```

------
#### [ Windows ]

  ```
  aws ssm register-task-with-maintenance-window ^
      --window-id "mw-0c50858d01EXAMPLE" ^
      --targets Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE ^
      --task-arn "AWS-RestartEC2Instance" ^
      --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole ^
      --task-type AUTOMATION ^
      --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" ^
      --priority 0 --max-concurrency 10 --max-errors 5 --name "My-Restart-EC2-Instances-Automation-Task" ^
      --description "Automation task to restart EC2 instances"
  ```

------

  メンテナンスウィンドウタスクの擬似パラメータの使用の詳細については、[メンテナンスウィンドウのタスクを登録する際の疑似パラメータの使用](maintenance-window-tasks-pseudo-parameters.md) および [タスクの登録例](mw-cli-register-tasks-examples.md#task-examples) を参照してください。

## エラーメッセージ:「Maintenance window tasks without targets don't support MaxConcurrency values」および「Maintenance window tasks without targets don't support MaxErrors values」
<a name="maxconcurrency-maxerrors-not-supported"></a>

**問題:** Run Command タイプタスクを登録するときは、タスクを実行するターゲットを少なくとも 1 つ指定する必要があります。他のタスクタイプ (自動化、AWS Lambda、および AWS Step Functions) では、タスクの特質に応じて、ターゲットはオプションです。ターゲットを指定しないメンテナンスウィンドウタスクでは、オプション `MaxConcurrency` (同時にタスクを実行するリソースの数) と `MaxErrors` (タスクが失敗するまでにターゲットリソースでタスクの実行が失敗できる数) は必須ではなく、サポートされていません。タスクターゲットが指定されていない場合、これらのオプションのいずれかに値が指定されると、システムはこのようなエラーメッセージを生成します。

**解決方法**: これらのエラーのいずれかを受け取った場合は、メンテナンスウィンドウタスクの登録または更新を続行する前に、同時実行性とエラーしきい値の値を削除します。

ターゲットを指定しないタスクの実行の詳細については、*AWS Systems Manager ユーザーガイド*の「[ターゲットのないメンテナンスウィンドウタスクを登録](maintenance-windows-targetless-tasks.md)」を参照してください 。

# AWS Systems Manager Quick Setup
<a name="systems-manager-quick-setup"></a>

AWS Systems Manager のツールである Quick Setup を使用し、推奨されるベストプラクティスを取り入れて頻繁に使用する Amazon Web Services のサービスと機能をすばやく設定します。Quick Setup は一般的なタスクまたは推奨されるタスクを自動化することで、Systems Manager を含むサービスのセットアップを簡素化します。これらのタスクには、例えば、必須の AWS Identity and Access Management (IAM) インスタンスプロファイルロールの作成、定期的なパッチスキャンやインベントリ収集などの運用上のベストプラクティスの設定が含まれます。Quick Setup の使用にコストはかかりません。ただし、設定したサービスの種類と使用制限に基づいて費用が発生する可能性があり、サービスのセットアップに使用したサービスには料金はかかりません。Quick Setup の使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com/systems-manager/quick-setup)を開きます。ナビゲーションペインで、**[Quick Setup]** を選択します。

**注記**  
Quick Setup に移動し、Systems Manager によって管理されるインスタンスを設定できる場合、[Quick Setup を使用して Amazon EC2 ホスト管理を設定する](quick-setup-host-management.md) の手順を実行します。

## Quick Setup の利点は何ですか。
<a name="quick-setup-features"></a>

Quick Setup には以下のような利点があります。
+ **サービスと機能の設定を簡素化**

  Quick Setup では、運用上のベストプラクティスの構成手順を説明し、それらの構成を自動的にデプロイします。Quick Setup のダッシュボードには、構成デプロイのステータスがリアルタイムで表示されます。
+ **複数のアカウント間で自動的に構成をデプロイ**

  AWS Organizations と統合することで、個々の Quick Setup や、複数の AWS アカウント と AWS アカウント にまたがって AWS リージョン を使用できます。複数のアカウントで Quick Setup を使用すると、組織は一貫した構成を維持できます。
+ **構成のドリフトを排除**

  設定のずれは、Quick Setup によって行われた選択と競合するサービスまたは機能にユーザーが変更を加えるたびに発生します。Quick Setup は定期的に設定のずれをチェックし、修正を試みます。

## Quick Setup はどのようなユーザーに適していますか?
<a name="quick-setup-audience"></a>

Quick Setup は、設定中のサービスや機能を使ったことがあり、セットアッププロセスを簡素化したいお客様に最適です。Quick Setup を使用して構成している AWS のサービスに慣れていない場合は、サービスの詳細を確認するようお勧めします。Quick Setup を使用して設定を作成する前に、適切なユーザガイドの内容を確認してください。

## AWS リージョン に Quick Setup の可用性
<a name="quick-setup-getting-started-regions"></a>

以下の AWS リージョンでは、AWS Organizations で設定されている組織全体のすべての Quick Setup 設定タイプを使用することも、選択した組織アカウントとリージョンのみに使用することもできます。これらのリージョンでは、1 つのアカウントだけで Quick Setup を使用することもできます。
+ 米国東部(オハイオ)
+ 米国東部 (バージニア北部)
+ 米国西部 (北カリフォルニア)
+ 米国西部 (オレゴン)
+ アジアパシフィック (ムンバイ)
+ アジアパシフィック (ソウル)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (シドニー)
+ アジアパシフィック (東京)
+ カナダ (中部)
+ 欧州 (フランクフルト)
+ 欧州 (ストックホルム)
+ 欧州 (アイルランド)
+ 欧州 (ロンドン)
+ 欧州 (パリ)
+ 南米 (サンパウロ)

以下のリージョンでは、個々のアカウントで使用できるのは[ホスト管理](quick-setup-host-management.md)設定タイプのみです。
+ 欧州 (ミラノ)
+ アジアパシフィック (香港)
+ 中東 (バーレーン)
+ 中国 (北京)
+ 中国 (寧夏)
+ AWS GovCloud (米国東部)
+ AWS GovCloud (米国西部)

 サポートされているリージョンのリストについては、「**Amazon Web Services 全般のリファレンス」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」にある**リージョン**列を参照してください。

# Quick Setup の開始方法
<a name="quick-setup-getting-started"></a>

このトピックの情報を利用して、Quick Setup を使用する際の準備に役立ててください。

**Topics**
+ [Quick Setup オンボーディングのための IAM ロールと権限](#quick-setup-getting-started-iam)
+ [プログラム的に Quick Setup API を使用するための手動オンボーディング](#quick-setup-api-manual-onboarding)

## Quick Setup オンボーディングのための IAM ロールと権限
<a name="quick-setup-getting-started-iam"></a>

Quick Setup が新しいコンソールエクスペリエンスと新しい API をリリースしました。今後は、コンソール、AWS CLI、CloudFormation、および SDK を使用してこの API を操作できます。新しいエクスペリエンスをオプトインすると、新しい API を使用して既存の設定が再作成されます。アカウント内の既存の設定の数によっては、このプロセスに数分かかる場合があります。

新しい Quick Setup コンソールを使用するには、次のアクションについての許可が必要です:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm-quicksetup:*",
                "cloudformation:DescribeStackSetOperation",
                "cloudformation:ListStacks",
                "cloudformation:DescribeStacks",
                "cloudformation:DescribeStackResources",
                "cloudformation:ListStackSetOperations",
                "cloudformation:ListStackInstances",
                "cloudformation:DescribeStackSet",
                "cloudformation:ListStackSets",
                "cloudformation:DescribeStackInstance",
                "cloudformation:DescribeOrganizationsAccess",
                "cloudformation:ActivateOrganizationsAccess",
                "cloudformation:GetTemplate",
                "cloudformation:ListStackSetOperationResults",
                "cloudformation:DescribeStackEvents",
                "cloudformation:UntagResource",
                "ec2:DescribeInstances",
                "ssm:DescribeAutomationExecutions",
                "ssm:GetAutomationExecution",
                "ssm:ListAssociations",
                "ssm:DescribeAssociation",
                "ssm:GetDocument",
                "ssm:ListDocuments",
                "ssm:DescribeDocument",
                "ssm:ListResourceDataSync",
                "ssm:DescribePatchBaselines",
                "ssm:GetPatchBaseline",
                "ssm:DescribeMaintenanceWindows",
                "ssm:DescribeMaintenanceWindowTasks",
                "ssm:GetOpsSummary",
                "organizations:DeregisterDelegatedAdministrator",
                "organizations:DescribeAccount",
                "organizations:DescribeOrganization",
                "organizations:ListDelegatedAdministrators",
                "organizations:ListRoots",
                "organizations:ListParents",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:DescribeOrganizationalUnit",
                "organizations:ListAWSServiceAccessForOrganization",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "resource-groups:ListGroups",
                "iam:ListRoles",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:CreatePolicy",
                "organizations:RegisterDelegatedAdministrator",
                "organizations:EnableAWSServiceAccess",
                "cloudformation:TagResource"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:RollbackStack",
                "cloudformation:CreateStack",
                "cloudformation:UpdateStack",
                "cloudformation:DeleteStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:*:stack/StackSet-AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:stack/AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:type/resource/*",
                "arn:aws:cloudformation:*:*:stack/StackSet-SSMQuickSetup"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStackSet",
                "cloudformation:UpdateStackSet",
                "cloudformation:DeleteStackSet",
                "cloudformation:DeleteStackInstances",
                "cloudformation:CreateStackInstances",
                "cloudformation:StopStackSetOperation"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:*:stackset/AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:stackset/SSMQuickSetup",
                "arn:aws:cloudformation:*:*:type/resource/*",
                "arn:aws:cloudformation:*:*:stackset-target/AWS-QuickSetup-*:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:GetRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:role/AWS-QuickSetup-*",
                "arn:aws:iam::*:role/service-role/AWS-QuickSetup-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/AWS-QuickSetup-*",
            "Condition": {
                "StringEquals": {
	            "iam:PassedToService": [
	                "ssm-quicksetup.amazonaws.com",
	                "cloudformation.amazonaws.com"
	            ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DeleteAssociation",
                "ssm:CreateAssociation",
                "ssm:StartAssociationsOnce"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:StartAutomationExecution",
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-EnableExplorer",
                "arn:aws:ssm:*:*:automation-execution/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetOpsSummary",
                "ssm:CreateResourceDataSync",
                "ssm:UpdateResourceDataSync"
            ],
            "Resource": "arn:aws:ssm:*:*:resource-data-sync/AWS-QuickSetup-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName": [
                        "accountdiscovery.ssm.amazonaws.com",
                        "ssm.amazonaws.com",
                        "ssm-quicksetup.amazonaws.com",
                        "stacksets.cloudformation.amazonaws.com"
                    ]
                }
            },
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/stacksets.cloudformation.amazonaws.com/AWSServiceRoleForCloudFormationStackSetsOrgAdmin"
        }
    ]
}
```

------

ユーザーを読み取り専用許可に制限するには、Quick Setup API のために `ssm-quicksetup:List*` および `ssm-quicksetup:Get*` オペレーションのみを許可します。

オンボーディング中、お客様の代わりに Quick Setup が AWS Identity and Access Management (IAM) ロールを作成します。
+ `AWS-QuickSetup-LocalExecutionRole` – パッチポリシーテンプレートを除く任意のテンプレートを使用し、必要なリソースを作成するための CloudFormation 許可を付与します。
+ `AWS-QuickSetup-LocalAdministrationRole` – AWS CloudFormation に `AWS-QuickSetup-LocalExecutionRole` を継承する許可を付与します。
+ `AWS-QuickSetup-PatchPolicy-LocalExecutionRole` – パッチポリシーテンプレートを使用し、必要なリソースを作成するための許可を AWS CloudFormation に付与します。
+ `AWS-QuickSetup-PatchPolicy-LocalAdministrationRole` – AWS CloudFormation に `AWS-QuickSetup-PatchPolicy-LocalExecutionRole` を継承する許可を付与します。

管理アカウント (AWS Organizations で組織の作成に使用するアカウント) をオンボーディングする場合、Quick Setup はまた、ユーザーに代わって次のロールを作成します。
+ `AWS-QuickSetup-SSM-RoleForEnablingExplorer` – `AWS-EnableExplorer` オートメーションランブックに許可を付与します。`AWS-EnableExplorer` ランブックは、複数の Explorer と AWS アカウントの情報を表示するように Systems Manager のツールである AWS リージョンを設定します。
+ `AWSServiceRoleForAmazonSSM` –サービスにリンクされたロールで、Systems Manager が管理、使用する AWS リソースへのアクセスを付与します。
+ `AWSServiceRoleForAmazonSSM_AccountDiscovery` – サービスにリンクされたロールで、データの同期時に AWS のサービスを呼び出して AWS アカウント 情報を検出できるようSystems Manager に許可を付与します。詳細については、「[ロールを使用した OpsCenter および Explorer の AWS アカウント 情報の収集](using-service-linked-roles-service-action-2.md)」を参照してください。

管理アカウントのオンボーディング中、Quick Setup は、組織全体で Quick Setup をデプロイするために AWS Organizations と CloudFormation の間で安全なアクセスを有効にします。安全なアクセスを有効にするには、管理アカウントに管理者許可が必要です。オンボーディング後、管理者権限は不要になります。詳細については、「[組織で安全なアクセスを有効にする](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html)」を参照してください。

AWS Organizations アカウントタイプの詳細については、「*AWS Organizations ユーザーガイド*」の「[AWS Organizations 用語と概念](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)」を参照してください。

**注記**  
Quick Setup は CloudFormation StackSet を使用して、AWS アカウント およびリージョン全体で設定をデプロイします。ターゲットアカウントの数にリージョンの数を乗じて算出した数値が 10,000 を超える場合、設定のデプロイは失敗します。ユースケースを確認し、組織の成長に合わせて、より少ないターゲットを使用する設定を作成することをお勧めします。スタックインスタンスは、組織の管理アカウントにはデプロイされません。詳細については、[「サービスマネージド型のアクセス許可を持つスタックセットを作成する際の考慮事項」を参照してください](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html?icmpid=docs_cfn_console#stacksets-orgs-considerations)。

## プログラム的に Quick Setup API を使用するための手動オンボーディング
<a name="quick-setup-api-manual-onboarding"></a>

Quick Setup での作業にコンソールを使用する場合は、サービスがユーザーに代わってオンボーディング手順を処理します。Quick Setup API を使用するために SDK または AWS CLI を使用する予定の場合でも、オンボーディング手順はコンソールを使用して完了できるため、この手順を手動で実行する必要はありません。しかし、コンソールを操作せずに Quick Setup のオンボーディング手順をプログラム的に完了する必要があるお客様もいます。この方法がユースケースに適している場合は、次のステップを完了する必要があります。これらのステップはすべて、AWS Organizations 管理アカウントから完了する必要があります。

**Quick Setup の手動オンボーディングを完了する**

1. Organizations を使用して、CloudFormation の信頼されたアクセスをアクティブ化します。そうすることで、組織の StackSets を作成し管理するためのアクセス許可が管理アカウントに付与されます。このステップは、CloudFormation の `ActivateOrganizationsAccess` API アクションを使用して完了できます。詳細については、「AWS CloudFormation API Reference」の「[ActivateOrganizationsAccess](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html)」を参照してください。

1. Organizations との Systems Manager の統合を有効にします。そうすることで、Systems Manager が組織内のすべてのアカウントでサービスにリンクされたロールを作成できるようになります。これは、Systems Manager が組織とそのアカウント内で、ユーザーに代わってオペレーションを実行することも可能にします。このステップは、AWS Organizations の `EnableAWSServiceAccess` API アクションを使用して完了できます。Systems Manager のサービスプリンシパルは `ssm.amazonaws.com` です。詳細については、「AWS Organizations API Reference」の「[EnableAWSServiceAccess](https://docs.aws.amazon.com/organizations/latest/APIReference/API_EnableAWSServiceAccess.html)」を参照してください。

1. Explorer に必要な IAM ロールを作成します。そうすることで、Quick Setup が設定のダッシュボードを作成できるようになるため、デプロイと関連付けのステータスを表示することが可能になります。IAM ロールを作成して、`AWSSystemsManagerEnableExplorerExecutionPolicy` マネージドポリシーをアタッチします。以下と一致するようにロールの信頼ポリシーを変更します。各 *account ID* は、ユーザー自身の情報に置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "111122223333"
                   },
                   "ArnLike": {
                       "aws:SourceArn": "arn:*:ssm:*:111122223333:automation-execution/*"
                   }
               }
           }
       ]
   }
   ```

------

1. Explorer の Quick Setup サービス設定を更新します。このステップは、Quick Setup の `UpdateServiceSettings` API アクションを使用して完了できます。`ExplorerEnablingRoleArn` リクエストパラメータに、前のステップで作成した IAM ロールの ARN を指定します。詳細については、「Quick Setup API Reference」の「[UpdateServiceSettings](https://docs.aws.amazon.com/quick-setup/latest/APIReference/API_UpdateServiceSettings.html)」を参照してください。

1. CloudFormation StackSets が使用するための、必要な IAM ロールを作成します。これには、実行ロールと管理ロールを作成する必要があります。

   1. 実行ロールを作成する 実行ロールには、少なくとも `AWSQuickSetupDeploymentRolePolicy` または `AWSQuickSetupPatchPolicyDeploymentRolePolicy` 管理ポリシーのいずれかがアタッチされている必要があります。パッチポリシー設定のみを作成している場合は、`AWSQuickSetupPatchPolicyDeploymentRolePolicy` マネージドポリシーを使用できます。その他すべての設定には、`AWSQuickSetupDeploymentRolePolicy` ポリシーを使用します。以下と一致するようにロールの信頼ポリシーを変更します。*account ID* と *administration role name* を、ユーザー自身の情報に置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/administration role name"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 管理ロールを作成します。許可ポリシーは、以下に一致している必要があります。*account ID* と *execution role name* を、ユーザー自身の情報に置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "sts:AssumeRole"
                  ],
                  "Resource": "arn:*:iam::111122223333:role/execution role name",
                  "Effect": "Allow"
              }
          ]
      }
      ```

------

      以下と一致するようにロールの信頼ポリシーを変更します。各 *account ID* は、ユーザー自身の情報に置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "cloudformation.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceAccount": "111122223333"
                      },
                      "ArnLike": {
                          "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:stackset/AWS-QuickSetup-*"
                      }
                  }
              }
          ]
      }
      ```

------

# Systems Manager のロールを引き受ける設定
<a name="quick-setup-assume-role"></a>

## Systems Manager Quick Setup の継承ロールを作成するには:
<a name="create-assume-role"></a>

Systems Manager Quick Setup には、Systems Manager がアカウントでアクションを安全に実行できるロールが必要です。このロールは、ユーザーに代わってインスタンスでのコマンドの実行、および EC2 インスタンス、IAM ロール、その他の Systems Manager リソースを設定を行うために必要なアクセス許可を Systems Manager に付与します。

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

1. ナビゲーションペインで、**[ポリシー]** を選択し、**[ポリシーの作成]** を選択します。

1. 以下の JSON を使用して `SsmOnboardingInlinePolicy` ポリシーを追加します。(このポリシーは、インスタンスプロファイルを作成して EC2 インスタンスに関連付けるなど、指定したインスタンスにインスタンスプロファイルのアクセス許可をアタッチするために必要なアクションを有効にします)。

1. 処理が完了したら、ナビゲーションペインで **[ロール]** を選択し、続いて **[ロールを作成]** を選択します。

1. **[信頼されたエンティティタイプ]** は、デフォルト (サービス) のままにします。

1. **[ユースケース]**で、**[Systems Manager]** を選択し、**[次へ]** を選択します。

1. **[許可を追加]** ページで次の手順を実行します。

1. `SsmOnboardingInlinePolicy` ポリシーを追加します。

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

1. **[ロール名] **にわかりやすい名前 (`AmazonSSMRoleForAutomationAssumeQuickSetup` など) を入力します。

1. (オプション) ロールの識別と整理に役立つタグを追加します。

1. [**ロールの作成**] を選択してください。

**重要**  
このロールには `ssm.amazonaws.com` との信頼関係を含める必要があります。これは、ステップ 4 でサービスとして Systems Manager を選択すると自動的に設定されます。

ロールを作成したら、Quick Setup を設定するときにそのロールを選択できます。このロールにより、Systems Manager は、特定の制限されたアクセス許可を通じてセキュリティを維持しながら、ユーザーに代わって EC2 インスタンス、IAM ロール、その他の Systems Manager リソースを管理してコマンドを実行できます。

## アクセス許可ポリシー
<a name="permissions-policies"></a>

**`SsmOnboardingInlinePolicy`**  
次のポリシーは、Systems Manager Quick Setup のアクセス許可を定義します。

```
{
    "Version": "2012-10-17" 		 	 	 ,
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateInstanceProfile",
                "iam:ListInstanceProfilesForRole",
                "ec2:DescribeIamInstanceProfileAssociations",
                "iam:GetInstanceProfile",
                "iam:AddRoleToInstanceProfile"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AssociateIamInstanceProfile"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "Null": {
                    "ec2:InstanceProfile": "true"
                },
                "ArnLike": {
                    "ec2:NewInstanceProfile": "arn:aws:iam::*:instance-profile/[INSTANCE_PROFILE_ROLE_NAME]"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/[INSTANCE_PROFILE_ROLE_NAME]",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ec2.amazonaws.com"
                }
            }
        }
    ]
        }
```

**信頼関係**  
*これは上記のステップによって自動的に追加されます。*

```
{
    "Version": "2012-10-17" 		 	 	 ,
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
     ]
        }
```

# Quick Setup での委任管理者の使用
<a name="quick-setup-delegated-administrator"></a>

Quick Setup の委任管理者アカウントを登録すると、そのアカウントで適切なアクセス許可を持つユーザーは、AWS Organizations 構造内の組織単位をターゲットとする設定マネージャーを作成、更新、表示、削除できます。委任管理者アカウントはまた、以前、組織の管理アカウントによって作成された設定マネージャーを管理することもできます。

組織の管理アカウントは、組織内の 1 つのアカウントを委任管理者として登録できます。アカウントを Quick Setup の委任管理者として登録すると、このアカウントも AWS CloudFormation StackSets と Systems Manager Explorer の委任管理者になります。これらのサービスは Quick Setup 設定のデプロイとモニタリングに必要になるためです。

**注記**  
現時点では、パッチポリシー設定タイプは Quick Setup の委任管理者によってサポートされていません。組織のパッチポリシー設定は、組織の管理アカウントで作成および維持する必要があります。詳細については、「[パッチポリシーの作成](quick-setup-patch-manager.md#create-patch-policy)」を参照してください。

以下のトピックでは、Quick Setup の委任管理者を登録および登録解除する方法について説明します。

**Topics**
+ [Quick Setup の委任管理者の登録](quick-setup-register-delegated-administrator.md)
+ [Quick Setup の委任管理者の登録解除](quick-setup-deregister-delegated-administrator.md)

# Quick Setup の委任管理者の登録
<a name="quick-setup-register-delegated-administrator"></a>

Quick Setup の委任管理者を登録するには、次の手順を使用します。

**Quick Setup の委任管理者を登録する手順**

1. AWS Organizations 管理アカウントにログインします。

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

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

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

1. [**Quick Setup の委任管理者**] セクションで、サービスにリンクされた必要なロールとサービスアクセスオプションを設定したことを確認します。必要に応じて、[**Create role (ロールの作成)**] ボタンと [**Enable access (アクセスの有効化)**] ボタンを選択して、これらのオプションを設定します。

1. [**アカウント ID**] に AWS アカウント ID を入力します。このアカウントは、AWS Organizations のメンバーアカウントである必要があります。

1. [**Register delegated administrator (委任管理者の登録)**] を選択します。

# Quick Setup の委任管理者の登録解除
<a name="quick-setup-deregister-delegated-administrator"></a>

Quick Setup の委任管理者を登録解除するには、次の手順を使用します。

**Quick Setup の委任管理者を登録解除する手順**

1. AWS Organizations 管理アカウントにログインします。

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

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

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

1. **[Quick Setup の委任された管理者]** セクションで、**[アクション]** ドロップダウンから **[登録解除]** を選択します。

1. **[Confirm]** (確認) を選択します。

# Quick Setup の用語と詳細を知る
<a name="quick-setup-using"></a>

AWS Systems Manager のツールである Quick Setup は、Quick Setup ホームページの **[設定マネージャー]** テーブルに、すべての AWS リージョンでこれまでに作成したすべての設定マネージャーの結果を表示します。このページから、各設定の **[View details]** (詳細を表示) したり、**[Actions]** (アクション) ドロップダウンから設定を削除したり、あるいは設定を **[Create]** (作成) したりできます。**[設定マネージャー]** テーブルには次の情報が含まれます。
+ **[名前]** – 作成時に指定された設定マネージャーの名前。
+ **[Configuration type]** (設定タイプ) – 設定の作成時に選択した設定タイプ。
+ **[バージョン]**– 現在デプロイされている設定タイプのバージョン。
+ **[Organizational units]** (組織単位) – ターゲットの **[Custom]** (カスタム) セットを選択している場合に、対象の設定がデプロイされた組織単位 (OU) を表示します。組織単位とカスタムターゲットは、組織の管理アカウントでのみ使用できます。管理アカウントは、AWS Organizations で組織を作成するために使用するアカウントです。
+ **[デプロイタイプ]** — デプロイが組織全体に適用されるか (`Organizational`)、アカウントのみに適用されるか (`Local`) を示します。
+ **[Regions]** (リージョン) – ターゲットの **[Custom]** (カスタム) セットを選択した場合、あるいは **[Current account]** (現在のアカウント) 内のターゲットを選択した場合に、設定がデプロイされているリージョンを示します。
+ **[Deployment status]** (デプロイのステータス) – デプロイのステータスは、ターゲットまたはスタックのインスタンスが、AWS CloudFormation により正常にデプロイされたかどうかを示します。ターゲットとスタックのインスタンスには、設定の作成時に選択した設定オプションが含まれます。
+ **[Association status]** (関連付けのステータス) — 関連付けのステータスは、ユーザーが作成した設定によって作成されたすべての関連付けの状態を示します。すべてターゲットにおいて、関連付けが正常に実行される必要があります。実行されない場合、ステータスは **[Failed]** (失敗) になります。

  Quick Setup は、各設定ターゲットのための State Manager の関連付けを作成および実行します。State Manager は AWS Systems Manager のツールです。

現在参照しているリージョンにデプロイされている設定を表示するには、**[設定]** タブを選択します。

## 設定の詳細
<a name="quick-setup-details"></a>

**[Configuration details]** (設定の詳細) ページに、設定のデプロイとその関連付けに関する情報が表示されます。このページから、設定オプションの編集、ターゲットの更新、または設定の削除を行うことができます。各設定のデプロイに関する詳細を表示し、関連付けに関して、より詳細な情報を取得することもできます。

設定のタイプに応じて、次のステータスグラフが 1 つ以上表示されます。

**設定デプロイのステータス**  
成功、失敗、実行中または保留中のデプロイの数を表示します。デプロイは、設定の影響を受けるノードを含む、指定されたターゲットアカウントとリージョンで実行されます。

**設定の関連付けのステータス**  
成功、失敗、または保留中の State Manager の関連付け数を表示します。Quick Setup は、選択した設定オプション用の関連付けを各デプロイに作成します。

**セットアップステータス**  
設定タイプごとに実行されたアクションの数とそれらの現在のステータスが表示されます。

**リソースコンプライアンス**  
設定で指定されたポリシーに準拠しているリソースの数が表示されます。

**[Configuration details]** (設定の詳細) テーブルに、設定のデプロイに関する情報が表示されます。デプロイを選択し、**[View details]** (詳細を表示) をクリックすると、各デプロイをさらに詳細に表示できます。各デプロイの詳細ページには、そのデプロイ内のノードにデプロイされた関連付けが表示されます。

## 設定の編集と削除
<a name="quick-setup-edit-delete"></a>

設定のオプションは、**[Configuration details]** (設定の詳細) ページで、**[Actions]** (アクション)、**[Edit configuration options]** (設定オプションの編集) の順にクリックすることで編集できます。設定に新しいオプションを追加すると、Quick Setup がデプロイを実行し、新しい関連付けを作成します。設定からオプションを削除すると、Quick Setup がデプロイを実行し、関連する関連付けを削除します。

**注記**  
アカウントの Quick Setup 設定はいつでも編集することが可能です。**[Organization]** (組織) 設定を編集するには、**[Configuration status]** (設定ステータス) が、**[Success]** (成功) または **[Failed]** (失敗) のどちらかである必要があります。

**[Actions]** (アクション) をクリックし、さらに **[Add OUs]** (OU の追加)、**[Add Regions]** (リージョンの追加)、**[Remove OUs]** (OU の削除)、あるいは **[Remove Regions]** (リージョンの削除) のいずれかをクリックすると、設定に含まれるターゲットを更新することもできます。お使いのアカウントが管理アカウントとして設定されていない場合、または現在のアカウントのみの設定を作成した場合は、ターゲットの組織単位 (OU) は更新できません。リージョンまたは OU を削除すると、それらのリージョンまたは OU から関連付けが削除されます。

定期的に、Quick Setup は設定の新しいバージョンをリリースします。設定を最新バージョンにアップグレードするために、**[設定をアップグレード]** オプションを選択できます。

設定を選択した上で、**[Actions]** (アクション)、**[Delete configuration]** (設定の削除) の順にクリックすると、Quick Setup からその設定を削除できます。または、[**Configuration details**] (設定の詳細) ページにある [**Actions**] (アクション) ドロップダウンで、[**Delete configuration**] (設定の削除) を選択して設定を削除することも可能です。その後 Quick Setup により、[**Remove all OUs and Regions**] (すべての OU とリージョンを削除する) よう求められます。この処理は完了するまで時間がかかる場合があります。設定を削除すると、関連する関連付けもすべて削除されます。この 2 段階削除プロセスでは、すべてのアカウントとリージョンからデプロイされたすべてのリソースを削除した上で、設定を削除します。

## 設定コンプライアンス
<a name="quick-setup-compliance"></a>

インスタンスが、設定によって作成された関連付けに準拠しているかどうかは、Explorer または Compliance のいずれか (どちらも AWS Systems Manager に含まれるツール) により確認できます。コンプライアンスの詳細については、「[コンプライアンスの詳細について](compliance-about.md)」を参照してください。Explorer でのコンプライアンスの表示については、「[AWS Systems Manager Explorer](Explorer.md)」を参照してください。

# Quick Setup API を使用した設定とデプロイの管理
<a name="quick-setup-api"></a>

AWS CLI または任意の SDK を用いて設定とデプロイを作成および管理するには、Quick Setup 提供の API を使用できます。CloudFormation を使用して、設定をデプロイする設定マネージャーリソースを作成することも可能です。API を使用して、設定定義をデプロイする設定マネージャーを作成します。設定定義には、特定の設定タイプをデプロイするために必要な情報のすべてが含まれています。Quick Setup API の詳細については、「[Quick Setup API Reference](https://docs.aws.amazon.com/quick-setup/latest/APIReference/)」を参照してください。

以下の例は、AWS CLI と CloudFormation を使用して設定マネージャーを作成する方法を示しています。

------
#### [ AWS CLI ]

```
aws ssm-quicksetup create-configuration-manager \
--name configuration manager name \
--description Description of your configuration manager
--configuration-definitions JSON string containing configuration defintion
```

以下は、パッチポリシーの設定定義が含まれる JSON 文字列の例です。

```
'{"Type":"AWSQuickSetupType-PatchPolicy","LocalDeploymentAdministrationRoleArn":"arn:aws:iam::123456789012:role/AWS-QuickSetup-StackSet-Local-AdministrationRole","LocalDeploymentExecutionRoleName":"AWS-QuickSetup-StackSet-Local-ExecutionRole","Parameters":{"ConfigurationOptionsInstallNextInterval":"true","ConfigurationOptionsInstallValue":"cron(0 2 ? * SAT#1 *)","ConfigurationOptionsPatchOperation":"ScanAndInstall","ConfigurationOptionsScanNextInterval":"false","ConfigurationOptionsScanValue":"cron(0 1 * * ? *)","HasDeletedBaseline":"false","IsPolicyAttachAllowed":"true","OutputBucketRegion":"","OutputLogEnableS3":"false","OutputS3BucketName":"","OutputS3KeyPrefix":"","PatchBaselineRegion":"us-east-1","PatchBaselineUseDefault":"custom","PatchPolicyName":"dev-patch-policy","RateControlConcurrency":"5","RateControlErrorThreshold":"0%","RebootOption":"RebootIfNeeded","ResourceGroupName":"","SelectedPatchBaselines":"{\"ALMA_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0cb0c4966f86b059b\",\"label\":\"AWS-AlmaLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Alma Linux Provided by AWS.\",\"disabled\":false},\"AMAZON_LINUX_2\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0be8c61cde3be63f3\",\"label\":\"AWS-AmazonLinux2DefaultPatchBaseline\",\"description\":\"Baseline containing all Security and Bugfix updates approved for Amazon Linux 2 instances\",\"disabled\":false},\"AMAZON_LINUX_2023\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-05c9c9bf778d4c4d0\",\"label\":\"AWS-AmazonLinux2023DefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Amazon Linux 2023 Provided by AWS.\",\"disabled\":false},\"DEBIAN\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-09a5f8eb62bde80b1\",\"label\":\"AWS-DebianDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Debian Provided by AWS.\",\"disabled\":false},\"MACOS\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0ee4f94581368c0d4\",\"label\":\"AWS-MacOSDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for MacOS Provided by AWS.\",\"disabled\":false},\"ORACLE_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-06bff38e95fe85c02\",\"label\":\"AWS-OracleLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Oracle Linux Server Provided by AWS.\",\"disabled\":false},\"REDHAT_ENTERPRISE_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0cbb3a633de00f07c\",\"label\":\"AWS-RedHatDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Redhat Enterprise Linux Provided by AWS.\",\"disabled\":false},\"ROCKY_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-03ec98bc512aa3ac0\",\"label\":\"AWS-RockyLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Rocky Linux Provided by AWS.\",\"disabled\":false},\"UBUNTU\":{\"value\":\"pb-06e3563bd35503f2b\",\"label\":\"custom-UbuntuServer-Blog-Baseline\",\"description\":\"Default Patch Baseline for Ubuntu Provided by AWS.\",\"disabled\":false},\"WINDOWS\":{\"value\":\"pb-016889927b2bb8542\",\"label\":\"custom-WindowsServer-Blog-Baseline\",\"disabled\":false}}","TargetInstances":"","TargetOrganizationalUnits":"ou-9utf-example","TargetRegions":"us-east-1,us-east-2","TargetTagKey":"Patch","TargetTagValue":"true","TargetType":"Tags"}}' \
```

------
#### [ CloudFormation ]

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
SSMQuickSetupTestConfigurationManager:
Type: "AWS::SSMQuickSetup::ConfigurationManager"
Properties:
    Name: "MyQuickSetup"
    Description: "Test configuration manager"
    ConfigurationDefinitions:
    - Type: "AWSQuickSetupType-CFGRecording"
      Parameters:
        TargetAccounts:
            Ref: AWS::AccountId
        TargetRegions:
            Ref: AWS::Region
        LocalDeploymentAdministrationRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/AWS-QuickSetup-StackSet-ContractTest-AdministrationRole"
        LocalDeploymentExecutionRoleName: "AWS-QuickSetup-StackSet-ContractTest-ExecutionRole"
    Tags:
        foo1: "bar1"
```

------

# サポートされている Quick Setup 設定タイプ
<a name="quick-setup-config-types"></a>

**サポートされている設定タイプ**  
Quick Setup では、多数の Systems Manager とその他の AWS のサービス の運用上のベストプラクティスを設定し、それらの設定を自動的にデプロイすることができます。Quick Setup のダッシュボードには、構成デプロイのステータスがリアルタイムで表示されます。

Quick Setup は、個々の AWS アカウント で使用するか、AWS Organizations と統合することによって複数の AWS アカウント とリージョンにまたがって使用することができます。複数のアカウントで Quick Setup を使用すると、組織は一貫した構成を維持できます。

Quick Setup は以下の設定タイプにサポートを提供します。
+ [Quick Setup を使用して Amazon EC2 ホスト管理を設定する](quick-setup-host-management.md)
+ [Quick Setup を使用して組織のために Default Host Management Configuration を設定する](quick-setup-default-host-management-configuration.md)
+ [Quick Setup を使用して AWS Config 設定レコーダーを作成する](quick-setup-config.md)
+ [Quick Setup を使用して AWS Config 適合パックをデプロイする](quick-setup-cpack.md)
+ [Quick Setup パッチポリシーを使用して組織内のインスタンスのためにパッチ適用を設定する](quick-setup-patch-manager.md)
+ [Change Manager 組織設定](change-manager-organization-setup.md)
+ [Quick Setup を使用して DevOps Guru をセットアップする](quick-setup-devops.md)
+ [Quick Setup を使用して Distributor パッケージをデプロイする](quick-setup-distributor.md)
+ [Quick Setup を使用してスケジュールに従って EC2 インスタンスを自動的に停止および起動する](quick-setup-scheduler.md)
+ [OpsCenter 組織設定](OpsCenter-quick-setup-cross-account.md)
+ [Quick Setup を使用して AWS Resource Explorer を設定する](Resource-explorer-quick-setup.md)

# Quick Setup を使用して Amazon EC2 ホスト管理を設定する
<a name="quick-setup-host-management"></a>

AWS Systems Manager のツールである Quick Setup を利用することで、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで必要なセキュリティロールと一般的に使用される Systems Manager ツールをすばやく設定できます。AWS Organizations と統合することで、個々のアカウントで、または複数のアカウントと AWS リージョン にまたがって Quick Setup を使用できます。これらのツールは、使用を開始するために必要な最小限のアクセス許可を提供しながら、インスタンスの正常性を管理およびモニタリングするのに役立ちます。

Systems Manager のサービスと機能に慣れていない場合は、Quick Setup の設定を作成する前に *AWS Systems Manager ユーザーガイド*を確認するようお勧めします。Systems Manager の詳細については、「[AWS Systems Manager とは](what-is-systems-manager.md)」を参照してください。

**重要**  
次のいずれかに当てはまる場合、Quick Setup は EC2 管理には適切なツールではない可能性があります。  
初めて EC2 インスタンスを作成して、AWS 機能を試してみようとしている。
EC2 インスタンス管理にまだ慣れていない。
次の内容から始めることをお勧めします。  
[Amazon EC2 の開始方法](https://aws.amazon.com/ec2/getting-started)
「Amazon EC2 ユーザーガイド」の「[新しいインスタンス起動ウィザードを使用してインスタンスを起動する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)」
「Amazon EC2 ユーザーガイド」の「[チュートリアル: Amazon EC2 Linux インスタンスの開始方法](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)」
すでに EC2 インスタンス管理に慣れていて、複数の EC2 インスタンスの設定と管理を効率化したい場合は、Quick Setup を使用してください。組織の EC2 インスタンスが数十、数千、数百万のいずれであっても、次の Quick Setup 手順を使用して、複数のオプションを一度に設定してください。

**注記**  
この設定タイプでは、AWS Organizations で定義されている組織全体、一部の組織アカウントとリージョンのみ、または単一のアカウントに複数のオプションを設定できます。これらのオプションの 1 つは、2 週間ごとに SSM Agent への更新を確認して適用することです。組織管理者の場合は、デフォルトのホスト管理設定タイプを使用して、2 週間ごとに組織内のすべての** EC2 インスタンスをエージェントアップデートで更新するように選択することもできます。詳細については、「[Quick Setup を使用して組織のために Default Host Management Configuration を設定する](quick-setup-default-host-management-configuration.md)」を参照してください。

## EC2 インスタンスのホスト管理オプションの設定
<a name="host-management-configuration"></a>

ホスト管理を設定するには、AWS Systems Manager Quick Setup コンソールで次のタスクを実行します。

**ホスト管理設定ページを開くには**

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

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

1. **[ホスト管理]** カードで、**[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

**Systems Manager のホスト管理オプションを設定するには**
+ Systems Manager 機能を設定するには、**[設定オプション]** セクションで、設定で有効にする **Systems Manager** グループの次のオプションを選択します。

     
**Systems Manager (SSM) エージェントを 2 週間ごとに更新する**  
エージェントの新しいバージョンがあるかどうか Systems Manager が 2 週間ごとに確認できるようにします。新しいバージョンがある場合、Systems Manager はマネージドノード上のエージェントを最新のリリースバージョンに自動的に更新します。Quick Setup は、エージェントがまだ存在しないインスタンスにエージェントをインストールすることはありません。どの AMIs に SSM Agent がプリインストールされているかについては、「[SSM Agent がプリインストールされている AMIs を見つける](ami-preinstalled-agent.md)」を参照してください。  
ノードが常に最新バージョンの SSM Agent を実行できるように、このオプションを選択することをお勧めします。エージェントを手動でインストールする方法など SSM Agent の詳細については、「[「SSM Agent」 の使用](ssm-agent.md)」を参照してください。  
**30 分ごとにインスタンスからインベントリを収集する**  
次のタイプのメタデータの収集を Quick Setup が設定できるようにします。  
  + **AWS コンポーネント** – EC2 ドライバー、エージェント、バージョンなど。
  + **アプリケーション** – アプリケーション名、発行元、バージョンなど。
  + **ノードの詳細** – システム名、オペレーティングシステム (OS) 名、OS バージョン、最終起動、DNS、ドメイン、ワークグループ、OS アーキテクチャなど。
  + **ネットワーク設定** – IP アドレス、MAC アドレス、DNS、ゲートウェイ、サブネットマスクなど。
  + **サービス** – 名前、表示名、ステータス、依存サービス、サービスタイプ、スタートタイプなど (Windows Server ノードのみ)。
  + **Windows ロール** – 名前、表示名、パス、特徴タイプ、インストールされている状態など (Windows Server ノードのみ)。
  + **Windows 更新** – Hotfix ID、インストール者、インストール日など (Windows Server ノードのみ)。
AWS Systems Manager のツールである Inventory の詳細については、「[AWS Systems Manager インベントリ](systems-manager-inventory.md)」を参照してください。  
**[Inventory collection]** (インベントリ収集) オプションは、数個のノードのみを選択した場合でも、完了までに最大 10 分かかることがあります。  
**欠落しているパッチを毎日スキャンする**  
Systems Manager のツールである Patch Manager によって、ノードを毎日スキャンし、**[コンプライアンス]** ページでレポートを生成できるようにします。このレポートには、*デフォルトのパッチベースライン*に従って、パッチに準拠しているノードの数が表示されます。このレポートには、各ノードとそのコンプライアンス ステータスのリストが含まれます。  
パッチ適用オペレーションとパッチベースラインについては、「[AWS Systems Manager Patch Manager](patch-manager.md)」を参照してください。  
パッチコンプライアンスについては、Systems Manager の [[Compliance]](https://console.aws.amazon.com/systems-manager/compliance) (コンプライアンス) ページを参照してください。  
1 つの設定で複数のアカウントとリージョンのマネージドノードにパッチを適用する方法については、「[Quick Setup でのパッチポリシー設定](patch-manager-policies.md)」と「[Quick Setup パッチポリシーを使用して組織内のインスタンスのためにパッチ適用を設定する](quick-setup-patch-manager.md)」を参照してください。  
Systems Manager では、パッチコンプライアンスに関してマネージドノードをスキャンするいくつかの方法がサポートされています。これらの方法を一度に複数実施した場合、表示されるパッチコンプライアンス情報は常に最新のスキャンの結果です。以前のスキャンの結果は上書きされます。スキャン方法によって異なるパッチベースラインと異なる承認ルールが使用されている場合、パッチコンプライアンス情報が予期せず変化する可能性があります。詳細については、「[パッチコンプライアンスデータを作成した実行の特定](patch-manager-compliance-data-overwrites.md)」を参照してください。

**Amazon CloudWatch ホスト管理オプションを設定するには**
+ CloudWatch 機能を設定するには、**[設定オプション]** セクションで、設定で有効にする **Amazon CloudWatch** グループの次のオプションを選択します。

     
**CloudWatch エージェントをインストールして設定する**  
統合 CloudWatch エージェントの基本的な設定が、Amazon EC2 インスタンスにインストールされます。エージェントは、Amazon CloudWatch のインスタンスからメトリクススとログファイルを収集します。この情報は統合されているため、インスタンスの正常性をすばやく判断できます。CloudWatch エージェントのベーシック 設定の詳細については、[[CloudWatch agent predefined metric sets]](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html#cloudwatch-agent-preset-metrics) (CloudWatch エージェントの定義済みメトリクス セット) を参照してください。追加コストが発生する場合があります。詳細については、「[Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing/)」を参照してください。  
**CloudWatch エージェントを 30 日に 1 回更新する**  
CloudWatch エージェントの新しいバージョンがあるかどうか Systems Manager が 30 日ごとに確認できるようにします。新しいバージョンがある場合、Systems Manager はインスタンスのエージェントを更新します。インスタンスで常に最新バージョンの CloudWatch エージェントが実行されるように、このオプションを選択することをお勧めします。

**Amazon EC2 起動エージェントのホスト管理オプションを設定するには**
+ Amazon EC2 起動エージェント機能を設定するには、**[設定オプション]** セクションで、設定で有効にする **Amazon EC2 起動エージェント**グループの次のオプションを選択します。

     
**EC2 起動エージェントを 30 日に 1 回更新する**  
インスタンスにインストールされている起動エージェントの新しいバージョンを Systems Manager が 30 日ごとに確認できるようにします。新しいバージョンが利用可能である場合、Systems Manager はインスタンスのエージェントを更新します。インスタンスで常に最新バージョンの適切な起動エージェントが実行されるように、このオプションを選択することをお勧めします。Amazon EC2 Windows インスタンスの場合、このオプションは EC2Launch、EC2Launch v2、および EC2Config をサポートします。Amazon EC2 Linux インスタンスの場合、このオプションは `cloud-init` をサポートします。Amazon EC2 Mac インスタンスの場合、このオプションは `ec2-macos-init` をサポートします。Quick Setup は、起動エージェントによってサポートされていないオペレーティングシステムまたは AL2023 にインストールされている起動エージェントの更新をサポートしていません。  
これらの初期化エージェントの詳細については、次のトピックを参照してください。  
  +  [EC2Launch v2 を使用した Windows インスタンスの設定](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch-v2.html) 
  +  [EC2Launch を使用した Windows インスタンスの設定](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html) 
  +  [EC2Config サービスを使用した Windows インスタンスの設定](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2config-service.html) 
  +  [cloud-init ドキュメント](https://cloudinit.readthedocs.io/en/22.2.2/index.html) 
  +  [ec2-macos-init](https://github.com/aws/ec2-macos-init) 

**ホスト管理設定によって更新する EC2 インスタンスを選択するには**
+ **[ターゲット]** セクションで、設定をデプロイするアカウントとリージョンを決定する方法を選択します。
**注記**  
同じ AWS リージョン を対象に複数の Quick Setup ホスト管理設定を作成することはできません。

------
#### [ Entire organization ]

  設定は組織内のすべての組織単位 (OU) と AWS リージョン にデプロイされます。

**注記**  
[**Entire organization** (組織全体)] オプションは、組織の管理アカウントからホスト管理を設定する場合にのみ使用できます。

------
#### [ Custom ]

  1. **[ターゲット OU]** セクションで、このホスト管理設定をデプロイする OU を選択します。

  1. **[ターゲットリージョン]** セクションで、このホスト管理設定をデプロイするリージョンを選択します。

------
#### [ Current account ]

  リージョンオプションのいずれかを選択し、そのオプションの手順に従います。

   

**現在のリージョン**  
現在のリージョンのみの中で、インスタンスをターゲットにする方法を以下のいずれかから選択します。  
  + **すべてのインスタンス** – ホスト管理設定は、現在のリージョンのすべての EC2 を自動的にターゲットにします。
  + **タグ** – **[追加]** を選択し、ターゲットにするインスタンスに追加したキーとオプションの値を入力します。
  + **リソースグループ** – **[リソースグループ]** で、ターゲットにする EC2 インスタンスを含む既存のリソースグループを選択します。
  + **手動** – **[インスタンス]** セクションで、ターゲットにする各 EC2 インスタンスのチェックボックスを選択します。

**リージョンを選択する**  
以下のいずれかを選択して、指定したリージョンのインスタンスをターゲットにする方法を選択します。  
  + **すべてのインスタンス** – 指定したリージョンのすべてのインスタンスがターゲットになります。
  + **タグ** – **[追加]** を選択し、ターゲットにするインスタンスに追加したキーとオプションの値を入力します。
**[ターゲットリージョン]** セクションで、このホスト管理設定をデプロイするリージョンを選択します。

------

**インスタンスプロファイルオプションを指定するには**
+ **[組織全体]** と **[カスタム]** ターゲットのみ。

  **[インスタンスプロファイルのオプション]** セクションで、インスタンスにアタッチされた既存のインスタンスプロファイルに必要な IAM ポリシーを追加するか、選択した設定に必要なアクセス許可を持つ IAM ポリシーとインスタンスプロファイルを Quick Setup で作成できるようにするか選択します。

設定の選択肢をすべて指定したら、**[作成]** を選択します。

# Quick Setup を使用して組織のために Default Host Management Configuration を設定する
<a name="quick-setup-default-host-management-configuration"></a>

Quick Setup で AWS Systems Manager のツールを使用すると、AWS Organizations で組織に追加されたすべてのアカウントとリージョンのデフォルトのホスト管理設定を有効化できます。これにより、組織内のすべての Amazon Elastic Compute Cloud (EC2) インスタンスで SSM Agent が最新の状態に保たれ、Systems Manager に接続できます。

**[開始する前に]**  
この設定を有効にする前に、以下の要件が満たされるようにしてください。
+ 組織の管理対象となるすべての EC2 インスタンスに、SSM Agent の最新バージョンがすでにインストールされている。
+ 管理対象となる EC2 インスタンスが、インスタンスメタデータサービスのバージョン 2 (IMDSv2) を使用している。
+ AWS Organizations で指定されているように、管理者権限を持つ AWS Identity and Access Management (IAM) ID (ユーザー、ロール、またはグループ) を使用して、組織の管理アカウントにサインインしている。

**デフォルトの EC2 インスタンス管理ロールを使用する**  
デフォルトのホスト管理設定は、Systems Manager の `default-ec2-instance-management-role` サービス設定を利用します。これは、インスタンスとクラウド内の Systems Manager サービス上の SSM Agent 間の通信を可能にするために、組織内のすべてのアカウントで利用できるようにしたいアクセス許可を持つロールです。

[https://docs.aws.amazon.com/cli/latest/reference/ssm/update-service-setting.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-service-setting.html) CLI コマンドを使用してこのロールをすでに設定している場合、デフォルトのホスト管理設定ではそのロールが使用されます。このロールをまだ設定していない場合は、Quick Setup は自動的にロールを作成して適用します。

このロールが組織ですでに指定されているかどうかを確認するには、[https://docs.aws.amazon.com/cli/latest/reference/ssm/get-service-setting.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-service-setting.html) コマンドを使用します。

## 2 週間ごとに SSM Agent の自動更新を有効にする
<a name="dhmc-enable-automatic-updates"></a>

以下の手順に従って、AWS Organizations 組織全体でデフォルトのホスト管理設定オプションを有効にします。

**2 週間ごとに SSM Agent の自動更新を有効にするには**

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

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

1. **[デフォルトのホスト管理設定]** カードで、**[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **[設定オプション]** セクションで、**[2 週間ごとに SSM Agent の自動更新を有効にする]** を選択します。

1. **作成**を選択します。

# Quick Setup を使用して AWS Config 設定レコーダーを作成する
<a name="quick-setup-config"></a>

AWS Systems Manager のツールである Quick Setup を使用すると、AWS Config による設定レコーダーをすばやく作成できます。設定レコーダーを使用してリソースの設定変更を検出し、これらの変更を設定項目として取り込みます。AWS Config に慣れていない場合は、Quick Setup を使用して設定を作成する前に、 *AWS Config デベロッパーガイド*の内容を確認して、サービスの詳細を確認するようお勧めします。AWS Config の詳細については、*AWS Config デベロッパーガイド*の「[AWS Config とは](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)」を参照してください。

デフォルトでは、設定レコーダーは AWS Config が実行されている AWS リージョン のすべてのサポートされているリソースを記録します。指定したリソースタイプのみが記録されるように、設定をカスタマイズできます。詳細については、*AWS Config デベロッパーガイド*の「[AWS Config が記録するリソースを選択する](https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html)」を参照してください。

AWS Config で設定の記録が開始されると、サービスの利用料金が発生します。料金については、[AWS Config の料金](https://aws.amazon.com/config/pricing/)をご参照ください。

**注記**  
設定レコーダーを既に作成している場合は、Quick Setup は記録を停止したり、既に記録しているリソースタイプを変更したりしません。Quick Setup を使用して追加のリソースタイプを記録することを選択した場合、サービスはそれらを既存のレコーダーグループに追加します。Quick Setup **Config 記録**設定タイプを削除しても、設定レコーダーは停止しません。変更は引き続き記録され、設定レコーダーを停止するまでサービス利用料がかかります。設定レコーダーの管理の詳細については、*AWS Configデベロッパーガイド*の「[設定レコーダーの管理](https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html)」を参照してください。

AWS Config の記録を設定するには、AWS Systems Manager コンソールで次のタスクを実行します。

**Quick Setup を使用して AWS Config の記録をセットアップするには**

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

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

1. **[Config Recording]**カードで、**[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **[設定オプション]** セクションで、次を実行します:

   1. **[記録する AWS リソースタイプを選択]** で、サポートされているすべてのリソースを記録するか、選択したリソースタイプのみを記録するかを指定します。

   1. **[配信設定] では、新しい Amazon Simple Storage Service (Amazon S3) バケットを作成するか、または設定スナップショットを送信する既存のバケットを選択するかを指定します。**

   1. **[通知オプション]** で、希望する通知オプションを選択します。AWS Config は、Amazon Simple Notiﬁcation Service (Amazon SNS) を使用して、リソースに関連する重要な AWS Config イベントについて通知します。[**既存の SNS トピックの使用**] オプションを選択した場合は、使用するアカウントの既存の Amazon SNS トピックの AWS アカウント ID と名前を指定する必要があります。複数の AWS リージョン をターゲットにする場合、トピック名は各リージョンで同一である必要があります。

1. [**Schedule** (スケジュール)] セクションで、設定とは異なるリソースに加えられた変更を Quick Setup で修正する頻度を選択します。[**Default** (デフォルト)] オプションは 1 回実行されます。設定と異なるリソースに加えられた変更を Quick Setup で修正しない場合は、[**Custom** (カスタム)] で [**Disable remediation** (修復を無効にする)] を選択します。

1. **[ターゲット]** セクションで、次のいずれかを選択して、記録のためにアカウントとリージョンを識別します。
**注記**  
1 つのアカウントで作業している場合、組織や組織単位 (OU) を使用するオプションは利用できません。この設定をアカウント内のすべての AWS リージョン に適用するか、選択したリージョンのみに適用するかを選択できます。
   + **[Entire organization]** (組織全体) – 組織内のすべてのアカウントとリージョン。
   + **[Custom]** (カスタム) – 指定した OU とリージョンのみ。
     + **[ターゲット OU]** セクションで、記録を許可する OU を選択します。
     + **[ターゲットリージョン]** セクションで、記録を許可するリージョンを選択します。
   + **[Current account]** (現在のアカウント) – 現在サインインしているアカウント内の指定したリージョンのみがターゲットになります。次のいずれかを選択します。
     + **[Current Region]** (現在のリージョン) – コンソールで選択したリージョン内のマネージドノードのみがターゲットになります。
     + **[リージョンを選択]** – 記録設定を適用する個々のリージョンを選択します。

1. **[Create]** (作成) を選択します。

# Quick Setup を使用して AWS Config 適合パックをデプロイする
<a name="quick-setup-cpack"></a>

コンフォーマンスパックは、AWS Config ルールと是正アクションのコレクションです。Quick Setupでは、アカウントと AWS リージョン で単一のエンティティとして、または AWS Organizations の組織全体でコンフォーマンスパックをデプロイできます。これは、共通のフレームワークとパッケージ化モデルを使用して、ポリシー定義から監査および集約レポートまで大規模に AWS リソースの設定コンプライアンスを管理する際に役立ちます。

コンフォーマンスパックをデプロイするには、AWS Systems Manager Quick Setup コンソールで以下のタスクを実行します。

**注記**  
この設定をデプロイする前に、AWS Config 記録を有効にする必要があります。詳細については、*AWS Config デベロッパーガイド*の「[コンフォーマンスパック](https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html)」を参照してください。

**Quick Setup でコンフォーマンスパックをデプロイするには**

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

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

1. **[コンフォーマンスパック]** カードで、**[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **[コンフォーマンスパックを選択]** セクションで、デプロイするコンフォーマンスパックを選択します。

1. [**Schedule** (スケジュール)] セクションで、設定とは異なるリソースに加えられた変更を Quick Setup で修正する頻度を選択します。[**Default** (デフォルト)] オプションは 1 回実行されます。設定と異なるリソースに加えられた変更を Quick Setup で修正しない場合は、[**Custom** (カスタム)] で [**Disabled** (無効にする)] を選択します。

1. [**Targets** (ターゲット)] セクションで、コンフォーマンスパックを組織全体、一部の AWS リージョン、または現在ログインしているアカウントにデプロイするのか選択します。

   [**組織全体**] を選択した場合は、ステップ 8 に進みます。

   [**カスタム**] を選択した場合は、ステップ 7 に進みます。

1. [**Target Regions** (ターゲットリージョン)] セクションで、 コンフォーマンスパックのデプロイ先リージョンのチェックボックスを選択します。

1. **[Create]** (作成) を選択します。

# Quick Setup パッチポリシーを使用して組織内のインスタンスのためにパッチ適用を設定する
<a name="quick-setup-patch-manager"></a>

AWS Systems Manager のツールである Quick Setup を使用すると、Patch Manager を利用したパッチポリシーを作成できます。パッチポリシーは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスなどのマネージドノードに自動的にパッチを適用するときに使用するスケジュールとベースラインを定義します。単一のパッチポリシー設定を使用して、組織内の複数の AWS リージョン のすべてのアカウントにパッチを定義するか、選択したアカウントとリージョンのみに適用するか、単一のアカウントとリージョンのペアに適用するかを定義できます。パッチポリシーの詳細については、「[Quick Setup でのパッチポリシー設定](patch-manager-policies.md)」を参照してください。

**前提条件**  
Quick Setup を使用してノードのパッチポリシーを定義するには、そのノードがマネージドノードである必要があります。ノードの管理方法の詳細については、「[組織用の Systems Manager 統合コンソールのセットアップ](systems-manager-setting-up-organizations.md)」を参照してください。

**重要**  
**パッチコンプライアンスのスキャン方法** – Systems Manager では、パッチコンプライアンスに関してマネージドノードをスキャンするいくつかの方法がサポートされています。これらの方法を一度に複数実施した場合、表示されるパッチコンプライアンス情報は常に最新のスキャンの結果です。以前のスキャンの結果は上書きされます。スキャン方法によって異なるパッチベースラインと異なる承認ルールが使用されている場合、パッチコンプライアンス情報が予期せず変化する可能性があります。詳細については、「[パッチコンプライアンスデータを作成した実行の特定](patch-manager-compliance-data-overwrites.md)」を参照してください。  
**関連付けコンプライアンスステータスとパッチポリシー** – Quick Setup パッチポリシーの下にあるマネージドノードのパッチステータスは、そのノードの State Manager 関連付け実行ステータスと一致します。関連付け実行ステータスが `Compliant` の場合、マネージドノードのパッチステータスも `Compliant` とマークされます。関連付け実行ステータスが `Non-Compliant` の場合、マネージドノードのパッチステータスも `Non-Compliant` とマークされます。

## パッチポリシー設定がサポートされているリージョン
<a name="patch-policies-supported-regions"></a>

Quick Setup でのパッチポリシー設定は、現在、次のリージョンでサポートされています。
+ 米国東部 (オハイオ) (us-east-2)
+ 米国東部 (バージニア北部) (us-east-1)
+ 米国西部 (北カリフォルニア) (us-west-1)
+ 米国西部 (オレゴン) (us-west-2)
+ アジアパシフィック (ムンバイ) (ap-south-1)
+ アジアパシフィック (ソウル) (ap-northeast-2)
+ アジアパシフィック (シンガポール) (ap-southeast-1)
+ アジアパシフィック (シドニー) (ap-southeast-2)
+ アジアパシフィック (東京) (ap-northeast-1)
+ カナダ (中部) (ca-central-1)
+ ヨーロッパ (フランクフルト) (eu-central-1)
+ 欧州 (アイルランド) (eu-west-1)
+ ヨーロッパ (ロンドン) (eu-west-2)
+ 欧州 (パリ) (eu-west-3)
+ 欧州 (ストックホルム) (eu-north-1)
+ 南米 (サンパウロ) (sa-east-1)

## パッチポリシー S3 バケットの許可
<a name="patch-policy-s3-bucket-permissions"></a>

パッチポリシーを作成すると、Quick Setup は `baseline_overrides.json` という名前のファイルを含む Amazon S3 バケットを作成します。このファイルには、パッチポリシー用に指定したパッチベースラインに関する情報が保存されます。

S3 バケットの名前は、`aws-quicksetup-patchpolicy-account-id-quick-setup-configuration-id` の形式で付けられます。

例: `aws-quicksetup-patchpolicy-123456789012-abcde`

組織のパッチポリシーを作成している場合、バケットは組織の管理アカウントに作成されます。

AWS Identity and Access Management (IAM) ポリシーを使用して、この S3 バケットにアクセスするための許可を他の AWS リソースに提供する必要がある場合は、次の 2 つのユースケースが参考になります。
+ [ケース 1: マネージドノードで、Quick Setup によって提供されるインスタンスプロファイルまたはサービスロールではなく、独自のインスタンスプロファイルまたはサービスロールを使用する](#patch-policy-instance-profile-service-role)
+ [ケース 2: VPC エンドポイントを使用して Systems Manager に接続する](#patch-policy-vpc)

いずれの場合でも必要な許可ポリシーは、以下のセクション「[Quick Setup S3 バケットのポリシー許可](#patch-policy-bucket-permissions)」にあります。

### ケース 1: マネージドノードで、Quick Setup によって提供されるインスタンスプロファイルまたはサービスロールではなく、独自のインスタンスプロファイルまたはサービスロールを使用する
<a name="patch-policy-instance-profile-service-role"></a>

パッチポリシー設定には、**[インスタンスにアタッチされている既存のインスタンスプロファイルに必要な IAM ポリシーを追加]** オプションが含まれています。

このオプションを選択せずに、このパッチポリシーを使用してマネージドノードにパッチを Quick Setup に適用する場合は、次が実装されていることを確認する必要があります。
+ IAM 管理ポリシー `AmazonSSMManagedInstanceCore` は、マネージドノードに Systems Manager 許可を付与するために使用される [IAM インスタンスプロファイル](setup-instance-permissions.md)または [IAM サービスロール](hybrid-multicloud-service-role.md)にアタッチする必要があります。
+ パッチポリシーバケットにアクセスするための許可を、インラインポリシーとして IAM インスタンスプロファイルまたは IAM サービスロールに追加する必要があります。前掲のコードサンプルで示されているとおり、すべての `aws-quicksetup-patchpolicy` バケット、または組織もしくはアカウント用に作成された特定のバケットのみに対するワイルドカードアクセスを提供できます。
+ IAM インスタンスプロファイルまたは IAM サービスロールは次に示すキーと値のペアを使用してタグ付けする必要があります。

  `Key: QSConfigId-quick-setup-configuration-id, Value: quick-setup-configuration-id`

  *quick-setup-configuration-id* は、パッチポリシー設定の作成に使用される AWS CloudFormation スタックに適用されるパラメータの値を表します。この ID を取得するには、次の手順を実行します。

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

  1. パッチポリシーの作成に使用されるスタックの名前を選択します。名前は `StackSet-AWS-QuickSetup-PatchPolicy-LA-q4bkg-52cd2f06-d0f9-499e-9818-d887cEXAMPLE` などの形式です。

  1. **[パラメータ]** タブを選択します。

  1. **[パラメータ]** リストの **[キー]** 列で、**[QSConfigurationId]** を探します。その行の **[値]** の列で、`abcde` のような設定 ID を探します。

     この例では、タグをインスタンスプロファイルまたはサービスロールに適用する場合、キーは `QSConfigId-abcde`、値は `abcde` です。

IAM ロールにタグを追加する方法の詳細については、「*IAM ユーザーガイド*」の「[IAM ロールのタグ付け](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_roles.html#id_tags_roles_procs-console)」および「[インスタンスプロファイルのタグ管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_instance-profiles.html#id_tags_instance-profile_procs-cli-api)」(AWS CLI または AWS API) を参照してください。

### ケース 2: VPC エンドポイントを使用して Systems Manager に接続する
<a name="patch-policy-vpc"></a>

VPC エンドポイントを使用して Systems Manager に接続する場合は、S3 の VPC エンドポイントポリシーで Quick Setup パッチポリシー S3 バケットに対するアクセスを許可する必要があります。

S3 の VPC エンドポイントポリシーに対するアクセス許可の追加の詳細については、「*Amazon S3 ユーザーガイド*」の「[バケットポリシーを使用した VPC エンドポイントからのアクセス制御](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)」を参照してください。

### Quick Setup S3 バケットのポリシー許可
<a name="patch-policy-bucket-permissions"></a>

すべての `aws-quicksetup-patchpolicy` バケット、または組織もしくはアカウント用に作成された特定のバケットのみに対するワイルドカードアクセスを提供できます。以下で説明する 2 つのケースのために必要な許可を付与するには、いずれかの形式を使用します。

------
#### [ All patch policy buckets ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToAllPatchPolicyRelatedBuckets",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::aws-quicksetup-patchpolicy-*"
    }
  ]
}
```

------

------
#### [ Specific patch policy bucket ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToMyPatchPolicyRelatedBucket",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::aws-quicksetup-patchpolicy-111122223333-quick-setup-configuration-id"
    }
  ]
}
```

------

**注記**  
パッチポリシー設定が作成されたら、S3 コンソールでバケットの完全な名前を確認できます。例: `aws-quicksetup-patchpolicy-123456789012-abcde`

------

## パッチポリシー操作におけるランダムパッチベースライン ID
<a name="qs-patch-baselines-and-compliance"></a>

パッチポリシーのパッチ適用操作では `AWS-RunPatchBaseline` SSM Command ドキュメントの `BaselineOverride` パラメータを使用します。

パッチポリシー**以外のパッチ適用に `AWS-RunPatchBaseline` を使用する場合、`BaselineOverride` を使用して、操作中に使用するパッチベースラインのうち、指定したデフォルトとは異なるリストを指定できます。このリストは `baseline_overrides.json` という名前のファイルに作成し、所有している Amazon S3 バケットに手動で追加します (「[BaselineOverride パラメータの使用](patch-manager-baselineoverride-parameter.md)」を参照)。

ただし、パッチポリシーに基づくパッチ操作の場合、Systems Manager は自動的に S3 バケットを作成し、そこに `baseline_overrides.json` ファイルを追加します。その後、(Run Command ツールを使用して) Quick Setup がパッチ適用操作機能を実行するたびに、システムはパッチベースラインごとにランダム ID を生成します。この ID はパッチポリシーのパッチ適用操作ごとに異なり、この ID の示すパッチベースラインが、アカウントに保存されたりアクセスされたりすることはありません。

そのため、設定で選択したパッチベースラインの ID はパッチ適用ログに表示されません。これは、AWS のマネージドパッチベースラインと選択したカスタムパッチベースラインの両方に当てはまります。代わりに、ログに記録されるベースライン ID は、その特定のパッチ適用操作で生成されたベースライン ID です。

さらに、ランダム ID で生成されたパッチベースラインについて、Patch Manager に詳細を表示しようとすると、システムはそのパッチベースラインが存在しないと通知します。この動作は正常であり、無視してもかまいません。

## パッチポリシーの作成
<a name="create-patch-policy"></a>

パッチポリシーを作成するには、Systems Manager コンソールで次のタスクを実行します。

**Quick Setup でパッチポリシーを作成するには**

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

   組織に対してパッチ適用をセットアップする場合は、その組織の管理アカウントにサインインしていることを確認してください。委任管理者アカウントまたはメンバーアカウントを使用してポリシーをセットアップすることはできません。

1. ナビゲーションペインで、**Quick Setup** を選択します。

1. **[Patch Manager]** (パッチマネージャー) で、**[Create]** (作成) を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **[Configuration name]** (設定名) に、パッチポリシーを識別するための名前を入力します。

1. **[スキャンとインストール]** セクションの **[パッチオペレーション]** で、パッチポリシーが指定したターゲットを **[スキャン]** するか、指定したターゲットにパッチを **[スキャンとインストール]** するかを選択します。

1. **[Scanning schedule]** (スキャンのスケジュール) で、**[Use recommended defaults]** (推奨される既定値を使用) または **[Custom scan schedule]** (カスタムスキャンスケジュール) を選択します。デフォルトのスキャンスケジュールでは、毎日 UTC 午前 1:00 にターゲットをスキャンします。
   + **[Custom scan schedule]** (カスタムスキャンスケジュール) を選択した場合は、**[Scanning frequency]** (スキャンの頻度) を選択します。
   + **[Daily]** (毎日) を選択した場合は、ターゲットをスキャンする時刻を UTC で入力します。
   + **[Custom CRON Expression]** (カスタム CRON 式) を選択した場合は、スケジュールを **[CRON expression]** (CRON 式) として入力します。Systems Manager 用の CRON 式の形式については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

     また、**[Wait to scan targets until first CRON interval]** (最初の CRON 間隔が経過してからターゲットをスキャンする) を選択します。デフォルトでは、Patch Manager はノードがターゲットになるとすぐにスキャンします。

1. **[Scan and install]** (スキャンとインストール) を選択した場合は、指定したターゲットにパッチをインストールするときに使用する **[Installation schedule]** (インストールスケジュール) を選択します。**[Use recommended defaults]** (推奨される既定値を使用) を選択すると、Patch Manager では毎週日曜日の午前 2 時 (UTC) にパッチがインストールされます。
   + **[Custom install schedule]** (カスタムインストールスケジュール) を選択した場合は、**[Installation Frequency]** (インストールの頻度) を選択します。
   + **[Daily]** (毎日) を選択した場合は、ターゲットに更新をインストールする時刻を UTC で入力します。
   + **[Custom CRON expression]** (カスタム CRON 式) を選択した場合は、スケジュールを **[CRON expression]** (CRON 式) として入力します。Systems Manager 用の CRON 式の形式については、「[リファレンス: Systems Manager の cron 式および rate 式](reference-cron-and-rate-expressions.md)」を参照してください。

     また、**[Wait to install updates until first CRON interval]** (最初の CRON 間隔が経過してから更新をインストールする) をオフにすると、ノードがターゲットになったらすぐに更新がインストールされます。デフォルトでは、Patch Manager は最初の CRON 間隔が経過してから更新をインストールします。
   + **[Reboot if needed]** (必要に応じて再起動) を選択すると、パッチのインストール後にノードが再起動されます。インストール後に再起動することをお勧めしますが、その間使用できなくなることが問題になる可能性があります。

1. **[Patch baseline]** (パッチベースライン) セクションで、ターゲットをスキャンして更新するときに使用するパッチベースラインを選択します。

   デフォルトでは、Patch Manager は定義済みのパッチベースラインを使用します。詳細については、「[事前定義されたベースライン](patch-manager-predefined-and-custom-patch-baselines.md#patch-manager-baselines-pre-defined)」を参照してください。

   **[Custom patch baseline]** (カスタムパッチベースライン) を選択した場合は、事前定義された AWS パッチベースラインを使用したくないオペレーティングシステム用に選択したパッチベースラインを変更します。
**注記**  
VPC エンドポイントを使用して Systems Manager に接続する場合は、S3 の VPC エンドポイントポリシーでこの S3 バケットへのアクセスが許可されていることを確認してください。詳細については、「[パッチポリシー S3 バケットの許可](#patch-policy-s3-bucket-permissions)」を参照してください。
**重要**  
Quick Setup で[パッチポリシー設定](patch-manager-policies.md)を使用している場合、カスタムパッチベースラインに加えた更新は 1 時間に 1 回 Quick Setup と同期されます。  
パッチポリシーで参照されていたカスタムパッチベースラインを削除すると、Quick Setup のそのパッチポリシーについての **[Configuration details]** (設定の詳細) ページにバナーが表示されます。バナーには、パッチポリシーが既に存在しないパッチベースラインを参照していること、およびそれ以降のパッチ適用オペレーションができないことが示されます。この場合は、Quick Setup の **[Configurations]** (設定) ページに戻り、Patch Manager 設定を選択し、**[Actions]** (アクション)、**[Edit configuration]** (設定を編集) を選択します。削除されたパッチベースライン名が強調表示されます。影響を受けるオペレーティングシステム用の新しいパッチベースラインを選択する必要があります。

1. (オプション) **[Patching log storage]** (ログストレージにパッチ適用) セクションで、**[Write output to S3 bucket]** (出力を S3 バケットに書き込む) を選択し、パッチ適用オペレーションログを Amazon S3 バケットに保存します。
**注記**  
組織のパッチポリシーを設定する場合、組織の管理アカウントには、少なくともこのバケットに対する読み取り専用アクセス許可が必要です。ポリシーに含まれるすべての組織ユニットには、バケットへの書き込みアクセス権が必要です。別のアカウントにアクセス権をバケットに付与する方法の詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。

1. **[S3 を参照]** をクリックして、パッチログ出力を保存するバケットを選択します。管理アカウントには、このバケットへの読み取りアクセス権が必要です。**[Targets]** (ターゲット) セクションで設定された管理アカウント以外のアカウントとターゲットはすべて、ログ記録用に指定された S3 バケットへの書き込みアクセス権を持っている必要があります。

1. **[Targets]** (ターゲット) セクションで、次のいずれかを選択して、このパッチポリシーオペレーションのアカウントとリージョンを指定します。
**注記**  
1 つのアカウントで作業している場合、組織や組織単位 (OU) を使用するオプションは利用できません。この設定をアカウント内のすべての AWS リージョン に適用するか、選択したリージョンのみに適用するかを選択できます。  
以前にアカウントにホームリージョンを指定していて、新しい Quick Setup コンソールエクスペリエンスにまだオンボードしていない場合、そのリージョンを**ターゲット**設定から除外することはできません。
   + **[Entire organization]** (組織全体) – 組織内のすべてのアカウントとリージョン。
   + **[Custom]** (カスタム) – 指定した OU とリージョンのみ。
     + **[Target OUs]** (ターゲット OU) セクションで、パッチポリシーをセットアップする OU を選択します。
     + **[Target Regions]** (ターゲットリージョン) セクションで、パッチポリシーを適用するリージョンを選択します。
   + **[Current account]** (現在のアカウント) – 現在サインインしているアカウント内の指定したリージョンのみがターゲットになります。次のいずれかを選択します。
     + **[Current Region]** (現在のリージョン) – コンソールで選択したリージョン内のマネージドノードのみがターゲットになります。
     + **[Choose Regions]** (リージョンを選択) – パッチポリシーを適用する個々のリージョンを選択します。

1. **[Choose how you want to target instances]** (インスタンスをどのようにターゲットにするかを選択) で、次のいずれかを選択して、パッチを適用するノードを指定します。
   + **[All managed nodes]** (すべての管理対象ノード) – 選択した OU とリージョンのすべてのマネージドノード。
   + **[Specify the resource group]** (リソースグループを指定) – 関連するリソースをターゲットにするリソースグループの名前をリストから選択します。
**注記**  
現在、リソースグループの選択は、単一アカウント構成でのみサポートされています。複数のアカウントのリソースにパッチを適用するには、別のターゲットオプションを選択します。
   + **[Specify a node tag]** (ノードタグを指定) – 指定したキーと値のペアでタグ付けされたノードのみに、ターゲットにしたすべてのアカウントとリージョンでパッチが適用されます。
   + **[Manual]** (手動) – 指定されたすべてのアカウントとリージョンのマネージドノードをリストから手動で選択します。
**注記**  
現在、このオプションは Amazon EC2 インスタンスのみをサポートしています。パッチポリシー設定では、最大 25 個のインスタンスを手動で追加できます。

1. **[Rate control]** (レート制御) セクションで、以下を行います。
   + **[Concurrency]** (同時実行数) に、パッチポリシーを同時に実行するノードの数または割合を入力します。
   + **[Error threshold]** (エラーのしきい値) を入力します。エラーが発生したノードの数または割合がこの値を超えると、パッチポリシーはエラーになります。

1. (オプション) **[インスタンスにアタッチされている既存のインスタンスプロファイルに必要な IAM ポリシーを追加する]** チェックボックスを選択します。

   この選択により、この Quick Setup 設定で作成された IAM ポリシーを、既にインスタンスプロファイルがアタッチされているノード (EC2 インスタンス) またはサービスロールがアタッチされているノード (ハイブリッドアクティベーションノード) に適用します。このオプションは、マネージドノードに既にインスタンスプロファイルまたはサービスロールがアタッチされているが、Systems Manager の操作に必要なすべての許可が含まれていない場合にこの選択をお勧めします。

   ここで選択した内容は、このパッチポリシー設定が適用されるアカウントとリージョンに後で作成されるマネージドノードに適用されます。
**重要**  
このチェックボックスをオフにして、このパッチポリシーを使用してマネージドノードにパッチを Quick Setup に適用する場合は、次を実行する必要があります。  
パッチポリシー用に作成された S3 バケットにアクセスするための許可を [IAM インスタンスプロファイル](setup-instance-permissions.md)または [IAM サービスロール](hybrid-multicloud-service-role.md)に追加する  
IAM インスタンスプロファイルまたは IAM サービスロールに特定の key-value ペアをタグ付けします。  
詳細については、「[ケース 1: マネージドノードで、Quick Setup によって提供されるインスタンスプロファイルまたはサービスロールではなく、独自のインスタンスプロファイルまたはサービスロールを使用する](#patch-policy-instance-profile-service-role)」を参照してください。

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

   パッチポリシーの作成後にパッチ適用ステータスを確認するには、[https://console.aws.amazon.com/systems-manager/quick-setup](https://console.aws.amazon.com/systems-manager/quick-setup) ページから設定にアクセスします。

# Quick Setup を使用して DevOps Guru をセットアップする
<a name="quick-setup-devops"></a>

Quick Setup を使用すると、DevOps Guru オプションをすばやく設定できます。Amazon DevOps Guru は、アプリケーションの運用パフォーマンスと可用性を簡単に向上させる、Machine Learning (ML) 対応のサービスです。DevOps Guru は、通常の運用パターンとは異なる動作を検出し、顧客に影響を及ぼす前に運用上の問題を特定できるようにします。DevOps Guru は、運用データをAWS アプリケーションから取り込み、運用データの問題を視覚化するための単一のダッシュボードを提供します。DevOps Guru の使用を開始すると、手動セットアップや機械学習の専門知識が不要で、アプリケーションの可用性と信頼性を向上させることができます。

Configuring DevOps Guru with Quick Setup は以下の AWS リージョン があります。
+ 米国東部 (バージニア北部)
+ 米国東部 (オハイオ)
+ 米国西部 (オレゴン）
+ 欧州 (フランクフルト)
+ 欧州 (アイルランド)
+ 欧州 (ストックホルム)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (シドニー)
+ アジアパシフィック (東京)

料金情報については、「[Amazon DevOps Guru の料金](https://aws.amazon.com/devops-guru/pricing/)」を参照してください。

DevOps Guru を設定するには、AWS Systems Manager Quick Setup コンソールで次のタスクを実行します。

**Quick Setup で DevOps Guru を設定するには**

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

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

1. **[DevOps Guru]** カードで **[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず次の設定を選択してください。**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **設定オプション**セクションで、AWS 分析するリソースタイプと通知プリファレンスを選択します。

   [**組織内のすべてのアカウントの AWS リソースをすべて分析**] オプションを選択しない場合、AWS リソースを選択すれば、後で DevOps Guru コンソールで分析できます。DevOps Guru は、さまざまな AWS リソースタイプ (Amazon Simple Storage Service (Amazon S3) バケット、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスなど) を分析します。これは、2 つの料金グループに分類されます。アクティブな各リソースについては、分析された AWS リソース時間に対して料金を支払います。リソースは、メトリック、イベント、またはログエントリが 1 時間以内に生成される場合にのみアクティブになります。特定の AWS リソースタイプに対して請求される料金は、価格グループによって異なります。

   [**Enable SNS notifications** (SNS 通知を有効にする)] オプションを選択した場合、Amazon Simple Notification Service (Amazon SNS) トピックは、設定でターゲットとする組織ユニット (OU) の各 AWS アカウント に作成されます。DevOps Guru トピックを使用して、新しいインサイトの作成など、重要な DevOps Guru イベントを通知します。このオプションを有効にしない場合は、後で DevOps Guru コンソールでトピックを追加できます。

   **AWS Systems Manager OpsItems**オプションを選択すると、関連する Amazon EventBridge イベントと Amazon CloudWatch アラームに対して運用作業項目（OpsItems）が作成されます。

1. [**Schedule** (スケジュール)] セクションで、設定とは異なるリソースに加えられた変更を Quick Setup で修正する頻度を選択します。[**Default** (デフォルト)] オプションは 1 回実行されます。設定と異なるリソースに加えられた変更を Quick Setup で修正しない場合は、[**Custom** (カスタム)] で [**Disabled** (無効にする)] を選択します。

1. **ターゲット**セクションで、DevOps Guru に分析を許可する対象を一部の組織単位 (OU) のリソース、または現在ログインしているアカウントから選択します。

   [**Custom**] (カスタム) を選択した場合は、ステップ 8 に進みます。

   [**現在のアカウント**] を選択した場合は、ステップ 9 に進みます。

1. [**Target OUs** (ターゲット OU)] セクションと [**Target Regions** (ターゲットリージョン)] セクションで、DevOps Guru を使用する OU とリージョンのチェックボックスを選択します。

1. 現在のアカウントで DevOps Guru を使用するリージョンを選択します。

1. [**Create**] (作成) を選択します。

# Quick Setup を使用して Distributor パッケージをデプロイする
<a name="quick-setup-distributor"></a>

Distributor は AWS Systems Manager のツールです。Distributor パッケージは、インストール可能なソフトウェアやアセットのコレクションで、単一のエンティティとしてデプロイできます。Quick Setup では、Distributor パッケージを AWS アカウント と AWS リージョン、または AWS Organizations の組織全体でデプロイできます。現在、Quick Setup では、EC2Launch v2 エージェント、Amazon Elastic File System (Amazon EFS) ユーティリティパッケージと Amazon CloudWatch エージェントのみをデプロイできます。の詳細については、「Distributor」を参照してください。[AWS Systems Manager Distributor](distributor.md)

Distributor パッケージをデプロイするには、AWS Systems Manager Quick Setup コンソール]で次のタスクを実行します。

**Quick Setup で Distributor をデプロイするには**

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

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

1. **[ディストリビューター]** カードで **[作成]** を選択します。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. [**Configuration options** (設定オプション)] セクションで、デプロイするパッケージを選択します。

1. [**Targets** (ターゲット)] セクションで、デプロイ先のパッケージを組織全体、組織単位 (OU) の一部、または現在ログインしているアカウントから選択します。

   [**組織全体**] を選択した場合は、ステップ 8 に進みます。

   [**カスタム**] を選択した場合は、ステップ 7 に進みます。

1. [**ターゲット OU**] セクションで、 パッケージのデプロイ先 OU とリージョンのチェックボックスを選択します。

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

# Quick Setup を使用してスケジュールに従って EC2 インスタンスを自動的に停止および起動する
<a name="quick-setup-scheduler"></a>

AWS Systems Manager のツールである Quick Setup を使用すると、Resource Scheduler を設定して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの起動と停止を自動化できます。

この Quick Setup 設定は、指定したスケジュールに従ってインスタンスを起動および停止することで、運用コストを削減するのに役立ちます。このツールにより、必要のないときにインスタンスを実行することで不必要なコストが発生するのを防ぐことができます。

例えば、1 日 10 時間、週 5 日しか使用されていない場合でも、現状、インスタンスを常時稼働させているかもしれません。そうではなく、営業時間後に毎日インスタンスを停止するようにスケジュールできます。その結果、実行時間が 168 時間から 50 時間に短縮されるため、これらのインスタンスでは 70% の節約になります。Quick Setup の使用にコストはかかりません。ただし、セットアップしたリソースと使用制限に基づいて費用が発生する可能性があり、設定のセットアップに使用したサービスには料金はかかりません。

Resource Scheduler を使うことで、指定したスケジュールに従って、複数の AWS リージョンと AWS アカウントにまたがってインスタンスを自動的に停止および起動することもできます。Quick Setup 設定は、指定したタグのキーと値を使用して Amazon EC2 インスタンスをターゲットにします。設定で指定した値と一致するタグを持つインスタンスのみが Resource Scheduler によって停止または起動されます。インスタンスにアタッチされた Amazon EBS ボリュームが暗号化されている場合は、Resource Scheduler がインスタンスを起動するために AWS KMS キーの必要なアクセス許可を IAM ロールに追加する必要があります。

**設定あたりの最大インスタンス数**  
個々の設定でサポートされるのは、リージョン当たり 5,000 インスタンスまでのスケジュールです。特定のリージョンで 5,000 を超えるインスタンスをスケジュールする必要がある場合は、複数の設定を作成する必要があります。インスタンスに適切にタグを付けて、各設定で管理するインスタンスを 5,000 以下にします。Resource Scheduler の Quick Setup 設定を複数作成する場合、異なるタグキー値を指定する必要があります。例えば、ある設定ではタグキー `Environment` を `Production` の値で使用でき、別の設定では `Environment` と `Development` を使用できます。

**スケジュール設定の動作**  
以下のポイントでは、スケジュール設定の特定の動作について説明します。
+ Resource Scheduler では、タグ付けされたインスタンスが起動されるのはは `Stopped` 状態にある場合のみです。同様に、インスタンスが停止されるのは、`running` 状態にある場合のみです。Resource Scheduler はイベント駆動型モデルで動作し、指定した時刻にのみインスタンスを起動または停止します。例えば、午前 9 時にインスタンスを起動するスケジュールを作成します。Resource Scheduler は、指定したタグに関連付けられた、午前 9 時に `Stopped` 状態にあるすべてのインスタンスを起動します。後でインスタンスを手動で停止した場合、Resource Scheduler はインスタンスを再起動せず、`Running` 状態を維持します。同様に、スケジュールに従ってインスタンスが停止された後にインスタンスを手動で起動した場合、Resource Scheduler はインスタンスを再度停止しません。
+ 起動時刻が停止時刻より 24 時間遅いスケジュールを作成した場合、Resource Scheduler はインスタンスが翌日にまたがって実行されるものとみなします。例えば、インスタンスを午後 9 時に起動し、午前 7 時に停止するスケジュールを作成したとします。Resource Scheduler は、指定したタグに関連付けられた、午後 9 時に `Stopped` 状態にあるすべてのインスタンスを起動し、翌日の午前 7 時に停止します。翌日にまたがったスケジュールの場合、起動時刻はスケジュールで選択した日に適用されます。一方、停止時刻はスケジュールの翌日に適用されます。
+ スケジュール設定を作成すると、現在のインスタンスの状態が、スケジュールの要件に合わせて変更される場合があります。

  例えば、今日が水曜日で、マネージドインスタンスが火曜日と木曜日*のみ*午前 9 時に開始して午後 5 時に停止するよう、スケジュールを指定するとします。現在は、インスタンスを実行する時刻に該当しないため、設定の作成後にインスタンスは停止します。インスタンスは、次の設定時刻である木曜日の午前 9 時になるまで実行されません。

  インスタンスが現在 `Stopped` の状態で、現在の時刻に実行されるスケジュールを指定すると、Resource Scheduler は設定の作成後にインスタンスを起動します。

設定を削除すると、以前に定義されたスケジュールに従ったインスタンスの停止と起動は行われなくなります。まれに、API オペレーションが失敗してインスタンスが正常に停止または起動しないことがあります。

Amazon EC2 インスタンスのスケジュールをセットアップするには、AWS Systems Manager Quick Setup コンソールで次のタスクを実行します。

**Quick Setup でインスタンスのスケジュールを設定するには**

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

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

1. **[Resource Scheduler]** カードで **[作成]** をクリックします。
**ヒント**  
アカウントにすでに 1 つ以上の設定がある場合は、まず**[設定]** セクションで **[ライブラリ]** タブまたは **[作成]** ボタンを選択し、カードを表示します。

1. **[Instance tag]** (インスタンスタグ) セクションで、スケジュールに関連付けるインスタンスに適用されるタグのキーと値を指定します。

1. **[Schedule options]** (スケジュールオプション) セクションで、インスタンスを起動および停止するタイムゾーン、曜日、時刻を指定します。

1. **[Targets]** (ターゲット) セクションで、スケジュール設定の対象を、組織単位 (OU) の **[Custom]** (カスタム) グループにするか、ログインしている **[Current account]** (現在のアカウント) にするかを次のように選択します。
   + **[Custom]** (カスタム) – **[Target OUs]** (ターゲット OU) セクションで、スケジュールをセットアップする OU を選択します。**[Target Regions]** (ターゲットリージョン) セクションで、スケジュールをセットアップするリージョンを選択します。
   + **現在のアカウント** – [**Current Region** (現在のリージョン)] または [**Choose Regions** (リージョンの選択)] を選択します。**[Choose Regions]** (リージョンを選択) を選択した場合は、スケジュールをセットアップする **[Target Regions]** (ターゲットリージョン) を選択します。

1. **[Summary]** (概要) セクションのスケジュール情報を確認します。

1. **[Create]** (作成) を選択します。

# Quick Setup を使用して AWS Resource Explorer を設定する
<a name="Resource-explorer-quick-setup"></a>

AWS Systems Manager のツールである Quick Setup を使用すると、AWS アカウントまたは AWS 組織全体のリソースを検索して検出するように AWS Resource Explorer をすばやく設定できます。名前、タグ、ID などのメタデータを使用してリソースを検索できます。AWS Resource Explorer は、インデックスを使用して、検索クエリに迅速に応答します。Resource Explorer は、さまざまなデータソースを使用してインデックスを作成および維持し、AWS アカウント 内のリソースに関する情報を収集します。

Quick Setup for Resource Explorer はインデックス設定プロセスを自動化します。AWS Resource Explorer の詳細については、「AWS Resource Explorer ユーザーガイド」の「[AWS Resource Explorer とは](https://docs.aws.amazon.com/resource-explorer/latest/userguide/welcome.html)」を参照してください。

Quick Setup の際に、Resource Explorer は次の処理を行います。
+ AWS アカウント 内のすべての AWS リージョン にインデックスを作成します。
+ 指定したリージョンのインデックスをアカウントのアグリゲーターインデックスとして更新します。
+ アグリゲーターインデックスのリージョンにデフォルトビューを作成します。このビューにはフィルターがないため、インデックスで見つかったすべてのリソースを検索結果として返します。

**最小限必要なアクセス権限**

以下の手順のステップを実行するには、次のアクセス許可が必要です。
+ **アクション**：`resource-explorer-2:*` — **リソース**：特定のリソースなし (`*`)
+ **アクション**：`iam:CreateServiceLinkedRole` — **リソース**：特定のリソースなし (`*`)

**Resource Explorer を設定するには**

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

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

1. **[Resource Explorer]** カードで **[作成]** をクリックします。

1. **[アグリゲーターインデックスリージョン]** セクションで、**アグリゲーターインデックス**を含めたいリージョンを選択します。ユーザーの地理的位置に適したリージョンを選択する必要があります。

1. (オプション) **[上で選択したリージョン以外のリージョンの既存のアグリゲーターインデックスを置き換える]** チェックボックスを選択します。

1. **[ターゲット]** セクションで、検出したいリソースを含むターゲット**組織**または特定の**組織単位 (OU)** を選択します。

1. **[リージョン]** セクションで、設定に含める**リージョン**を選択します。

1. 設定の要約を確認し、**[作成]** を選択します。

**[Resource Explorer]** ページでは、設定ステータスをモニタリングできます。

# Quick Setup の結果のトラブルシューティング
<a name="quick-setup-results-troubleshooting"></a>

AWS Systems Manager のツールである Quick Setup を使用したトラブルシューティングでは、以下の情報を使用します。このトピックには、Quick Setup の問題のタイプに基づいて問題を解決するための特定のタスクが含まれています。

**問題: デプロイの失敗**  
CloudFormation スタックセットの作成が失敗した場合、デプロイは失敗します。デプロイの失敗を調査するには、以下のステップを使用します。

1. [AWS CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に移動します。

1. Quick Setup 設定で作成されたスタックを選択します。**[Stack name]** (スタックの名前) には、`QuickSetup` と、それに続き選択した設定のタイプ (例えば `SSMHostMgmt`) が含まれます。
**注記**  
CloudFormation は、失敗したスタックのデプロイを削除することがあります。スタックが **[Stacks]** (スタック) テーブルに表示されない場合は、フィルターリストから **[Deleted]** (削除済み) を選択します。

1. **[Status]** (ステータス) と **[Status reason]** (ステータス理由) を表示します。スタックのステータスの詳細については、「*AWS CloudFormationユーザーガイド*」の「[スタックステータスコード](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html#cfn-console-view-stack-data-resources-status-codes)」を参照してください。

1. 失敗したステップを正確に把握するには、**[Events]** (イベント) タブを開き、各イベントの **[Status]** (ステータス) を確認します。

1. 「*AWS CloudFormationユーザーガイド*」の「[トラブルシューティング](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)」を確認してください。

1. CloudFormation のトラブルシューティングに関するステップによりデプロイの失敗を解決できない場合は、設定を削除した上で再設定を行います。

**問題: 失敗した関連付け**  
セットアップ中にいずれかの関連付けが失敗した場合、[**Configuration details**] (設定の詳細) ページの [**Configuration details**] (設定の詳細) テーブルには、[**Configuration status**] (設定ステータス) として [**Failed**] (失敗) が表示されます。失敗した関連付けのトラブルシューティングを行うには、次のステップを実行します。

1. **[Configuration details]** (設定の詳細) テーブルで、失敗した設定を選択し、**[View Details]** (詳細を表示) をクリックします。

1. **[Association name]** (関連付け名) をコピーします。

1. **State Manager** に移動し、その関連付け名を検索フィールドに貼り付けます。

1. 関連付けを選択した上で、**[Execution history]** (実行履歴) タブを開きます。

1. [**Execution ID** (実行 ID)] で、失敗した関連付けの実行を選択します。

1. **[Association execution targets]** (関連付け実行ターゲット) ページには、関連付けが実行されたすべてのノードが一覧表示されます。実行に失敗した実行の [**Output** (出力)] ボタンを選択します。

1. [**Output** (出力)] ページで、[**Step - Output** (ステップ - 出力)] を選択して、コマンド実行のステップのエラーメッセージを表示します。各ステップで異なるエラーメッセージを表示できます。すべてのステップのエラーメッセージを確認して、問題のトラブルシューティングに役立ててください。
ステップ出力を表示しても問題を解決しない場合は、関連付けを再作成できます。関連付けを再作成するには、まず、State Manager で失敗した関連付けを削除します。関連付けを削除したら、設定を編集して削除したオプションを指定し直し、その後、**[Update]** (更新) をクリックします。  
**[Organization]** (組織) に対して **[Failed]** (失敗) した関連付けを調査するには、先述のとおり、失敗した関連付けを持つアカウントにサインインし、以下の手順を行う必要があります。管理アカウントからの結果を表示する場合、[**関連付け ID**] はターゲットアカウントへのハイパーリンクではありません。

**問題: ドリフトステータス**  
設定の詳細ページを開くと、各デプロイのドリフトステータスを表示できます。設定のドリフトは、Quick Setup で行った選択と競合するサービスまたは機能に対し、ユーザーが変更を加えるたびに発生します。初期設定後に関連付けが変更された場合、ドリフトした項目の数を示す警告アイコンがテーブルに表示されます。アイコンの上にカーソルを置くと、ドリフトの原因を見ることができます。
State Manager で関連付けが削除されると、関連するデプロイにはドリフトに関する警告が表示されます。これを修正するには、設定を編集し、関連付けとともに削除されたオプションを選択します。**[Update]** (更新) をクリックし、デプロイが完了するのを待ちます。