オートメーションのターゲットのマッピング - AWS Systems Manager

オートメーションのターゲットのマッピング

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 オプションを使用すると、コマンドラインまたはファイルから複数のパラメータ値を指定できます。次のセクションでは、これらの各ターゲティングオプションについて詳しく説明します。

タグをターゲットにする

オートメーションのターゲットとして、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_System:Linux や Department:Finance などのキーと値のペアです。特定の名前をリソースに割り当てる場合は、「名前」という単語をキーとして使用し、リソースの名前を値として使用することもできます。

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

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

Systems Manager Automation のターゲットとしてタグを使用する

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 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 をターゲットにする

オートメーションのターゲットとして、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 リソースグループのターゲット設定

パラメータ値のターゲット設定

パラメータ値をターゲットにすることもできます。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 は有効なパラメータではありません。パラメータ値をターゲットにするオートメーションを実行するときは、この項目を選択しないでください。

パラメータ値マップをターゲットにする

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_Testing という名前のランブックを作成します。このランブックでは、instanceTypeimageId の 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 インスタンスをターゲットにする

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

ランブックのすべての Amazon EC2 インスタンスをターゲットにする

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