State Manager を使用したトリガーによるオートメーションの実行 - AWS Systems Manager

State Manager を使用したトリガーによるオートメーションの実行

ランブックと 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 にパッチを適用します。

次の手順により、State Manager コンソールおよび AWS Systems Manager (AWS Command Line Interface) を使用してオートメーションを実行する AWS CLI 関連付けを作成します。

開始する前に

State Manager を使用してオートメーションを実行する前に、以下の重要な詳細に注意してください。

  • ランブックを使用する関連付けを作成する前に、 の一機能であるオートメーションに必要なアクセス許可を設定したことを確認してくださいAWS Systems Manager 詳細については、「オートメーションの設定」を参照してください。

  • ランブックを使用する State Manager 関連付けは、 AWS アカウント で同時に実行されるオートメーションの最大数に反映されます。同時に最大 100 のオートメーションを実行できます。詳細については、アマゾン ウェブ サービス全般リファレンスの「Systems Manager サービスクォータ」を参照してください。

  • 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」を参照してください。

オートメーションを実行する関連付けを作成する (コンソール)

次の手順では、Systems Manager コンソールを使用して、オートメーションを実行する State Manager の関連付けを作成する方法について説明します。

オートメーションを実行する State Manager 関連付けを作成するには

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

  2. ナビゲーションペインで、[State Manager] を選択し、[Create association (関連付けの作成)] を選択します。

  3. [Name (名前)] フィールドで名前を指定します。これはオプションですが推奨されます。

  4. [Document (ドキュメント)] リストで、ランブックを選択します。検索バーを使用して [Document type : Equal : Automation] ランブックでフィルタリングします。検索バーの右側にある数字を使用して、さらに多くのランブックを表示できます。

    注記

    ランブックの名前を選択すると、ランブックに関する情報を表示できます。

  5. ターゲットのリソース ID を指定して 1 つ以上のターゲットで自動化を実行するには、[Simple execution (シンプルな実行)] を選択します。タグや AWS などのターゲット設定のオプションを指定して AWS Resource Groups リソースのフリート全体で自動化を実行するには、[Rate control (レート制御)]を選択します。同時実行とエラーのしきい値を指定することによって、リソース全体でオートメーションの操作を制御することもできます。

    [Rate control (レート制御)] を選択した場合は [Targets (ターゲット)] セクションが表示されます。

  6. [Targets (ターゲット)] セクションで、リソースをターゲットとするメソッドを選択します。

    1. (必須) [Parameter (パラメータ)] リストでパラメータを選択します。[Parameter (パラメータ)] リストの項目は、この手順の開始時に選択したランブックのパラメータによって決まります。パラメータを選択することで、オートメーションが実行されるリソースのタイプを定義します。

    2. (必須) [Targets (ターゲット)] リストで、リソースをターゲットとするメソッドを選択します。

      • [Resource Group (リソースグループ)]: [Resource Group (リソースグループ)] リストからのグループの名前を選択します。ランブックでの AWS Resource Groups のターゲット設定の詳細については、「AWS Resource Groups をターゲットにする」を参照してください。

      • [Tags (タグ)]: 表示されたフィールドにタグキーと (オプションで) タグ値を入力します。[Add] (追加) をクリックします。ランブックでのタグのターゲット設定の詳細については、「タグをターゲットにする」を参照してください。

      • [Parameter Values (パラメータ値)]: [Input parameters (入力パラメータ)] セクションに値を入力します。複数の値を指定すると、Systems Manager は指定された各値に対して子オートメーションを実行します。

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

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

    タグまたはリソースグループを使用してターゲットリソースを選択した場合は、[Input parameters (入力パラメータ)] セクションでオプションを選択する必要はありません。例えば、AWS-RestartEC2Instance ランブックを選択し、タグを使用してインスタンスのターゲットを選択した場合、[Input parameters (入力パラメータ)] セクションでインスタンス ID を指定または選択する必要はありません。オートメーションでは、指定したタグを使用してインスタンスを再起動します。

    重要

    [AutomationAssumeRole] フィールドでロール ARN を指定する必要があります。State Manager は、継承されたロールを使用しランブックで指定されている AWS のサービスを呼び出し、お客様に代わってオートメーション関連付けを実行します。詳細については、「IAM サービスロールを使用して、オートメーションを実行する」を参照してください。

  8. 定期的に関連付けを実行する場合は、[Specify schedule (スケジュールを指定)] セクションで [On Schedule (スケジュール通り)] を選択します。このオプションを選択した場合は、提供されているオプションを使用して、Cron 式または Rate 式を使用してスケジュールを作成します。State Manager 用のCron 式と Rate 式の詳細については、関連付のための cron および rate 式 を参照してください。

    注記

    Rate 式は、ランブックを使用する State Manager 関連付けに適したスケジューリングメカニズムです。Rate 式を使用すると、オートメーションの同時実行の最大数に達した場合に、関連付けを実行する際の柔軟性が高まります。Rate スケジュールを使用すると、Systems Manager は、同時オートメーションが最大に達してスロットルされたという通知を受け取った後で、オートメーションを再試行できます。

    関連付けを 1 回だけ実行する場合は、[No schedule (スケジュールなし)] を選択します。

  9. (オプション) [Rate Control (レート制御)] セクションで、[Concurrency (同時実行)] および [Error threshold (エラーのしきい値)] オプションを選択して、AWS リソース全体でオートメーションのデプロイを制御できます。

    1. [Concurrency (同時実行数)] セクションでオプションを選択します。

      • [targets (ターゲット)] を選択して、オートメーションを同時に実行できるターゲットの絶対数を入力します。

      • [percentage (パーセント値)] を選択して、オートメーションを同時に実行できるターゲットセットのパーセント値を入力します。

    2. [Error threshold (エラーのしきい値)] セクションでオプションを選択します。

      • [errors (エラー)] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーの絶対数を入力します。

      • [percentage (パーセント値)] を選択して、オートメーションが他のリソースへのオートメーションの送信を停止するまでに許容されるエラーのパーセント値を入力します。

    オートメーションでターゲットとレート制御を使用する方法の詳細については、「ターゲットとレート制御を使用するオートメーションの実行」を参照してください。

  10. [関連付けの作成] を選択します。

    重要

    関連付けを作成すると、関連付けはただちに指定されたターゲットに対して実行されます。その後、選択された Cron 式または Rate 式に基づいて関連付けが実行されます。[No schedule (スケジュールなし)] を選択した場合、関連付けは再び実行されません。

オートメーションワークフローを実行する関連付けを作成する (コマンドライン)

以下の手順では、AWS CLI (Linux または Windows) または AWS Tools for PowerShell を使用して、オートメーションを実行する State Manager 関連付けを作成する方法について説明します。

オートメーションを実行する関連付けを作成するには

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

    詳細については、「AWS コマンドラインツールのインストールまたはアップグレード」を参照してください。

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

    Linux & macOS
    aws ssm list-documents
    Windows
    aws ssm list-documents
    PowerShell
    Get-SSMDocumentList

    関連付けに使用するランブックの名前を記録します。

  3. 以下のコマンドを実行して、ランブックの詳細を表示します。

    Linux & macOS
    aws ssm describe-document \ --name runbook_name

    InstanceId オプションに使用するパラメータ名 (例: --automation-target-parameter-name) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

    Windows
    aws ssm describe-document ^ --name document_name

    InstanceId オプションに使用するパラメータ名 (例: --automation-target-parameter-name) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

    PowerShell
    Get-SSMDocumentDescription ` -Name document_name

    InstanceId オプションに使用するパラメータ名 (例: AutomationTargetParameterName) を書き留めます。このパラメータは、オートメーションが実行されるリソースのタイプを決定します。

  4. State Manager 関連付けを使用してオートメーションを実行するコマンドを作成します。便利なテンプレートコマンドを次に示します。

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

    Linux & macOS
    aws ssm create-association \ --association-name AssociationName \ --targets Key=tag:TagKey,Values=TagValue \ --name RunbookName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"
    注記

    AWS CLI を使用して関連付けを作成する場合は、--targets パラメータを使用して、インスタンスを関連付けのターゲットにします。--instance-id パラメータは使用しないでください。--instance-id パラメータはレガシーパラメータです。

    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=tag:TagKey,Values=TagValue ^ --name RunbookName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"
    注記

    AWS CLI を使用して関連付けを作成する場合は、--targets パラメータを使用して、インスタンスを関連付けのターゲットにします。--instance-id パラメータは使用しないでください。--instance-id パラメータはレガシーパラメータです。

    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag:TagKey" $Targets.Values = "TagValue" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "RunbookName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)" } ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"
    注記

    AWS Tools for PowerShell を使用して関連付けを作成する場合は、Target パラメータを使用して、インスタンスを関連付けのターゲットにします。InstanceId パラメータは使用しないでください。InstanceId パラメータはレガシーパラメータです。

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

    Linux & macOS
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ParameterValues,Values=value_1,value_2,value_3 \ --name RunbookName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"
    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=ParameterValues,Values=value_1,value_2,value_3 ^ --name RunbookName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ParameterValues" $Targets.Values = "value_1","value_2","value_3" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "RunbookName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)"} ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"

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

    Linux & macOS
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ResourceGroup,Values=Resource_Group_name \ --name RunbookName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"
    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=ResourceGroup,Values=Resource_Group_name ^ --name RunbookName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "Resource_Group_Name" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "RunbookName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)"} ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"

    複数のアカウントとリージョンをターゲットにする

    Linux & macOS
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ResourceGroup,Values=Resource_Group_name \ --name RunbookName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression" \ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=us-east-1,us-east-2
    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=ResourceGroup,Values=Resource_Group_name ^ --name RunbookName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression" ^ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=us-east-1,us-east-2
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "Resource_Group_Name" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "RunbookName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)"} ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression" ` -TargetLocations @{ "Accounts"=["111122223333,444455556666,444455556666"], "Regions"=["us-east-1,us-east-2"]

    このコマンドでは、次のような新しい関連付けの詳細が返されます。

    Linux & macOS
    {
        "AssociationDescription": {
            "ScheduleExpression": "cron(0 7 ? * MON *)",
            "Name": "AWS-StartEC2Instance",
            "Parameters": {
                "AutomationAssumeRole": [
                    "arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM"
                ]
            },
            "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/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM"
                ]
            },
            "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 オートメーションのトラブルシューティング

Systems Manager Automation は、リージョンごと、アカウントごとに 100 の同時オートメーションの制限、1,000 のキューに入れられたオートメーションの制限を適用します。ランブックを使用する State Manager 関連付けのステータスが [Failed (失敗)] で、詳細なステータスが [AutomationExecutionLimitExceeded] の場合、オートメーションは制限に達している可能性があります。その結果、Systems Manager はオートメーションを制限します。この問題を解決するには、以下の手順を実行します。

  • 別の Rate 式または Cron 式を使用して関連付けます。たとえば、関連付けが 30 分ごとに実行されるようにスケジュールされている場合は、1〜2 時間ごとに実行されるように式を変更します。

  • ステータスが [Pending (保留中)] の既存のオートメーションを削除します。これらのオートメーションを削除すると、現在のキューがクリアされます。