aws:executeScript – スクリプトを実行する - AWS Systems Manager

aws:executeScript – スクリプトを実行する

指定されたランタイムとハンドラを使用して、提供された Python または PowerShell スクリプトを実行します。各 aws:executeScript アクションは、最大 600 秒 (10 分) 実行できます。timeoutSeconds ステップで aws:executeScript パラメータを指定して、タイムアウトを制限または延長することができます。

関数でリターンステートメントを使用して、出力ペイロードに出力を追加します。aws:executeScript アクションの出力の定義例については、「例 2: スクリプト化されたランブック」を参照してください。ランブック内にある aws:executeScript アクションからの出力は、指定した Amazon CloudWatch Logs ロググループに送信することもできます。詳しくは、「CloudWatch Logs を使用した自動アクション出力のログ記録」を参照してください。

aws:executeScript アクションからの出力を CloudWatch Logs に送信する場合、または aws:executeScript アクションに指定するスクリプトが AWS API オペレーションを呼び出す場合、ランブックを実行するには AWS Identity and Access Management (IAM) サービスロール (または引き受けロール) が常に必要です。

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 bucketname
  • Amazon EC2 コマンドレット。

    Install-Module AWS.Tools.EC2 -Force Get-EC2InstanceStatus -InstanceId instanceId
  • 共通またはサービスに依存しない 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 コマンドレットの使用例については、「ランブック作成のためのドキュメントビルダーの使用」を参照してください 。

入力

スクリプトを実行するために必要な情報を入力します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

注記

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 は Python 3.7 (python3.7)、Python 3.8 (python3.8)、PowerShell Core 6.0 (dotnetcore2.1)、PowerShell 7.0 (dotnetcore3.1) スクリプトをサポートしています。

サポートされる値:python3.7 | python3.8 | PowerShell Core 6.0 | PowerShell 7.0

型: 文字列

必須: はい

Handler

関数の名前。ハンドラで定義された関数に、eventscontext の 2 つのパラメータがあることを確認する必要があります。PowerShell ランタイムはこのパラメータをサポートしていません。

型: 文字列

必須: はい (Python) | サポートされていません (PowerShell)

InputPayload

ハンドラの最初のパラメータに渡される JSON または YAML オブジェクト。これは、スクリプトに入力データを渡すために使用できます。

型: 文字列

必須: いいえ

Python
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.8" 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": "Example" } ec2.create_tags( Resources=[instanceId], Tags=[tag] )
PowerShell
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: PowerShell 7.0 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 = "Example" New-EC2Tag -Resource $input.instanceId -Tag $tag
Script

オートメーションで実行する埋め込みスクリプト。

タイプ: 文字列

必須: いいえ (Python) | はい (PowerShell)

Attachment

アクションによって呼び出すことができるスタンドアロンスクリプトファイルまたは .zip ファイルの名前。Attachments のリクエストパラメータで指定したドキュメント添付ファイルの Name と同じ値を指定します。詳細については、「AWS Systems Manager API リファレンス」の「Attachments」(アタッチメント) を参照してください。アタッチメントを使用してスクリプトを提供する場合は、ランブックのトップレベル要素にある files セクションも定義する必要があります。詳しくは、「スキーマバージョン 0.3」を参照してください。

Python 用のファイルを呼び出すには、filename.method_nameHandler 形式を使用します。

注記

Python スクリプトの添付ファイルは、.py ファイルでも、スクリプトを含む .zip ファイルでもかまいません。PowerShell スクリプトは .zip ファイルに保存する必要があります。

添付ファイルに Python ライブラリを含める場合は、各モジュールディレクトリに空の __init__.py ファイルを追加することをお勧めします。これにより、スクリプトコンテンツ内の添付ファイルのライブラリからモジュールをインポートできます。例: from library import module

型: 文字列

必須: いいえ

出力
ペイロード

関数によって返されるオブジェクトの JSON 形式です。最大 100KB が返されます。リストを出力する場合、最大 100 個の項目が返されます。