ステートマネージャー を使用したトリガーによるオートメーションの実行 - AWS Systems Manager

ステートマネージャー を使用したトリガーによるオートメーションの実行

オートメーションドキュメントとの ステートマネージャー 関連付けを作成することにより、オートメーションを開始できます。自動化ドキュメントを使用した ステートマネージャー 関連付けを作成することにより、異なるタイプの AWS リソースを対象にすることができます。たとえば、以下のような、AWS リソースに目的の状態を強制する関連付けを作成できます。

  • EC2 インスタンスに Systems Manager ロールをアタッチし、マネージドインスタンスにします。

  • セキュリティグループに Ingress ルールと Egress ルールを適用します。

  • Amazon DynamoDB (DynamoDB) バックアップを作成または削除します。

  • Amazon Elastic Block Store (Amazon EBS) スナップショットを作成または削除します。

  • Amazon Simple Storage Service (Amazon S3) バケットに対する読み取りおよび書き込み許可を無効にします。

  • マネージドインスタンスおよび Amazon Relational Database Service (Amazon RDS) インスタンスを起動、再起動、または停止します。

  • Windows および Linux AMI にパッチを適用します。

次の手順を使用して、ステートマネージャー コンソール、AWS Systems Manager (AWS Command Line Interface)、または AWS CLI を使用してオートメーションを実行する AWS Tools for Windows PowerShell 関連付けを作成します。

開始する前に

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

  • 自動化ドキュメントを実行する関連付けを作成する前に、Systems Manager に必要なアクセスの許可を設定したことを確認してください。詳細については、「オートメーションの設定」を参照してください。

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

  • Systems Manager は、サービスにリンクされたロールを自動的に作成し、ステートマネージャー が Systems Manager API アクションを呼び出す権限を持つようにします。必要に応じて AWS CLI または AWS Tools for PowerShell から次のコマンドを実行し、ユーザー自身がサービスにリンクされたロールを作成できます。

    Linux
    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 コンソールを使用して、オートメーションを実行する ステートマネージャー 関連付けを作成する方法について説明します。

オートメーションを実行する ステートマネージャー 関連付けを作成するには

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

  2. ナビゲーションペインで、[ステートマネージャー] を選択し、[Create association (関連付けの作成)] を選択します。

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

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

    注記

    ドキュメント名を選択すると、ドキュメントに関する情報を表示できます。

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

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

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

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

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

      • [Resource Group (リソースグループ)]: [Resource Group (リソースグループ)] リストからのグループの名前を選択します。自動化ドキュメント内の AWS リソースグループ のターゲット設定の詳細については、AWS リソースグループ をターゲットにする を参照してください。

      • [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 を指定する必要があります。ステートマネージャー は、継承されたロールを使用し自動化ドキュメントで指定されている AWS のサービスを呼び出し、お客様に代わって自動化関連付けを実行します。詳細については、IAM サービスロールを使用して、オートメーションを実行する を参照してください。

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

    注記

    Rate 式は、自動化ドキュメントを実行する ステートマネージャー 関連付けに適したスケジューリングメカニズムです。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 を使用して、オートメーションを実行する ステートマネージャー 関連付けを作成する方法について説明します。

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

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

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

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

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

    関連付けに使用する自動化ドキュメントの名前を記録します。

  3. 以下のコマンドを実行して、自動化ドキュメントの詳細を表示します。

    Linux
    aws ssm describe-document \ --name document_name

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

    Windows
    aws ssm describe-document ^ --name document_name

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

    PowerShell
    Get-SSMDocumentDescription ` -Name document_name

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

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

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

    Linux
    aws ssm create-association \ --association-name AssociationName \ --targets Key=tag:TagKey,Values=TagValue \ --name AutomationDocumentName \ --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 AutomationDocumentName ^ --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 "AutomationDocumentName" ` -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
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ParameterValues,Values=value_1,value_2,value_3 \ --name AutomationDocumentName \ --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 AutomationDocumentName ^ --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 "AutomationDocumentName" ` -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 リソースグループ を使用したターゲット設定

    Linux
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ResourceGroup,Values=Resource_Group_name \ --name AutomationDocumentName \ --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 AutomationDocumentName ^ --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 "AutomationDocumentName" ` -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
    {
        "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 つ以上のターゲットインスタンスで関連付けを作成した後インスタンスからタグを削除すると、そのインスタンスは関連付けを実行しなくなります。インスタンスは ステートマネージャー ドキュメントから関連付けを解除されます。

ステートマネージャー オートメーションのトラブルシューティング

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

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

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