Amazon S3 からのスクリプトの実行 - AWS Systems Manager

Amazon S3 からのスクリプトの実行

このセクションでは、Amazon Simple Storage Service (Amazon S3) からスクリプトをダウンロードして実行する方法について説明します。Ansible Playbooks、Python、Ruby、Shell、PowerShell など、さまざまな種類のスクリプトを実行できます。

複数のスクリプトを含むディレクトリをダウンロードすることもできます。ディレクトリ内でプライマリスクリプトを実行すると、AWS Systems Manager はディレクトリに含まれている参照されるスクリプトも実行します。

Amazon S3 からのスクリプトの実行に関する以下の重要な詳細をメモします。

  • Systems Manager は、スクリプトがノードで実行できるかどうかを検証しません。スクリプトをダウンロードして実行する前に、必要なソフトウェアがノードにインストールされていることを確認してください。または、AWS Systems Manager の機能である Run Command または State Manager のいずれかを使用してソフトウェアをインストールした複合ドキュメントを作成し、スクリプトをダウンロードして実行することもできます。

  • ユーザー、ロール、またはグループに、S3 バケットからの読み取りに必要な AWS Identity and Access Management (IAM) アクセス許可が付与されていることを確認します。

  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンス上のインスタンスプロファイルに、s3:ListBucket および s3:GetObject アクセス許可があることを確認します。インスタンスプロファイルにこれらのアクセス許可がない場合、システムは S3 バケットからのスクリプトのダウンロードに失敗します。詳細については、IAM ユーザーガイドの「インスタンスプロファイルの使用」を参照してください。

Amazon S3 からシェルスクリプトを実行する

以下に、AWS Systems Manager コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、Amazon Simple Storage Service (Amazon S3) からスクリプトを実行するための手順について説明します。例ではシェルスクリプトを使用していますが、他のタイプのスクリプトに置き換えることができます。

Amazon S3 からシェルスクリプトを実行する (コンソール)

Amazon S3 からシェルスクリプトを実行する
  1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

  2. ナビゲーションペインで、[Run Command] を選択します。

    -または-

    AWS Systems Manager ホームページを最初に開く場合は、メニューアイコン ( 
    The menu icon
  ) を選択してナビゲーションペインを開き、[Run Command] を選択します。

  3. [Run command (コマンドの実行)] を選択します。

  4. [Command document (コマンドのドキュメント)] リストで、[AWS-RunRemoteScript] を選択します。

  5. [Command parameters] で、以下の作業を行います。

    • [Source Type (ソースタイプ)] で、[S3] を選択します。

    • [Source Info (ソース情報)] テキストボックスに、ソースにアクセスするために必要な情報を次の形式で入力します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

      注記

      https://s3.aws-api-domain をバケットの URL に置き換えます。Amazon S3 のバケット URL は [Objects] (オブジェクト) タブでコピーできます。

      {"path":"https://s3.aws-api-domain/path to script"}

      次に例を示します。

      {"path":"https://mytestbucket.s3.us-west-2.amazonaws.com/scripts/shell/helloWorld.sh"}
    • [Command Line] フィールドに、スクリプトの実行に必要なパラメータを入力します。以下はその例です。

      helloWorld.sh argument-1 argument-2
    • (オプション) [Working Directory] (作業ディレクトリ) に、スクリプトをダウンロードして実行する先の、ノードのディレクトリの名前を入力します。

    • (オプション) [Execution Timeout] に、スクリプトコマンドの実行を失敗とするまでにシステムが待機する秒数を指定します。

  6. [Targets] (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。

    注記

    表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「マネージドノードの可用性のトラブルシューティング」を参照してください。

  7. [その他のパラメータ] で、以下の操作を行います。

    • [コメント] に、このコマンドに関する情報を入力します。

    • [タイムアウト (秒)] に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

  8. [レート制御] の場合:

    • [Concurrency] (同時実行数) の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。

      注記

      マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。

    • [Error threshold] (エラーのしきい値) で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、Systems Manager はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

  9. (オプション) コマンド出力をファイルに保存する場合は、[Output options] の [Write command output to an S3 bucket] ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。

    注記

    S3 バケットにデータを書き込む機能を許可する S3 アクセス許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (オンプレミスマシン) のものです。詳細については、「Systems Manager にインスタンスのアクセス許可を設定する」または「ハイブリッド環境に IAM サービスロールを作成する」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

  10. [SNS Notifications (SNS 通知)] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[Enable SNS notifications (SNS 通知を有効にする)] チェックボックスをオンにします。

    Run Command 用の Amazon SNS 通知の設定の詳細については、「Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング」を参照してください。

  11. [Run (実行)] を選択します。

Amazon S3 からシェルスクリプトを実行する (コマンドライン)

  1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

    詳細については、「AWS CLI の最新バージョンをインストールまたは更新します。」を参照してください。

  2. 以下のコマンドを実行します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

    注記

    https://s3.aws-api-domain をバケットの URL に置き換えます。Amazon S3 のバケット URL は [Objects] (オブジェクト) タブでコピーできます。

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-RunRemoteScript" \ --output-s3-bucket-name "bucket name" \ --output-s3-key-prefix "key prefix" \ --targets "Key=InstanceIds,Values=instance ID" \ --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/script path\"}"],"commandLine":["script name and arguments"]}'
    Windows
    aws ssm send-command ^ --document-name "AWS-RunRemoteScript" ^ --output-s3-bucket-name "bucket name" ^ --output-s3-key-prefix "key prefix" ^ --targets "Key=InstanceIds,Values=instance ID" ^ --parameters "sourceType"="S3",sourceInfo='{\"path\":\"https://s3.aws-api-domain/script path\"}',"commandLine"="script name and arguments"
    PowerShell
    Send-SSMCommand ` -DocumentName "AWS-RunRemoteScript" ` -OutputS3BucketName "bucket name" ` -OutputS3KeyPrefix "key prefix" ` -Targets "Key=InstanceIds,Values=instance ID" -Parameter @{ sourceType="S3";sourceInfo='{"path": "https://s3.aws-api-domain/script path"}',; "commandLine"="script name and arguments"}