GitHub から Ansible プレイブックを実行する - AWS Systems Manager

GitHub から Ansible プレイブックを実行する

このセクションでは、コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、GitHub から Ansible プレイブックを実行する手順を説明します。

開始する前に

プライベート GitHub リポジトリに保存されているスクリプトを実行する場合は、GitHub セキュリティアクセストークンの AWS Systems Manager SecureString パラメータを作成します。SSH 経由でトークンを手動で渡すことで、プライベート GitHub リポジトリのスクリプトにアクセスすることはできません。アクセストークンは、Systems Manager SecureString パラメータとして渡す必要があります。SecureString パラメータの作成の詳細については、「Systems Manager パラメータを作成する」を参照してください。

GitHub から Ansible プレイブックを実行する (コンソール)

GitHub から Ansible プレイブックを実行する
  1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

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

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

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

  5. [コマンドパラメータ] で、以下の作業を行います。

    • [ソースタイプ] で、[GitHub] を選択します。

    • [ソース情報] ボックスに、ソースにアクセスするために必要な情報を次の形式で入力します。

      { "owner": "owner_name", "repository": "repository_name", "getOptions": "branch:branch_name", "path": "path_to_scripts_or_directory", "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}" }

      この例では、webserver.yml という名前のファイルがダウンロードされます。

      { "owner": "TestUser1", "repository": "GitHubPrivateTest", "getOptions": "branch:myBranch", "path": "scripts/webserver.yml", "tokenInfo": "{{ssm-secure:mySecureStringParameter}}" }
      注記

      "branch" は、SSM ドキュメントが 以外のブランチに保存されている場合にのみ必要です。master

      リポジトリ内の特定のコミットにあるバージョンのスクリプトを使用するには、commitID ではなく、getOptions を指定して branch を使用します。以下に例を示します。

      "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",

    • [コマンドライン] フィールドに、スクリプトの実行に必要なパラメータを入力します。以下はその例です。

      ansible-playbook -i “localhost,” --check -c local webserver.yml

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

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

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

    ヒント

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

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

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

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

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

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

      注記

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

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

  9. (オプション) コマンド出力をファイルに保存する場合は、[出力オプション][S3 バケットにコマンド出力を書き込む] ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。

    注記

    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 (実行)] を選択します。

AWS CLI を使用して、GitHub から Ansible プレイブックを実行する

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

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

  2. GitHub からスクリプトをダウンロードして実行するには、次のコマンドを実行します。

    aws ssm send-command \ --document-name "AWS-RunRemoteScript" \ --instance-ids "instance-IDs"\ --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"repository_name\", \"path\": \"path_to_file_or_directory\", \"tokenInfo\":\"{{ssm-secure:name_of_your_SecureString_parameter}}\" }"],"commandLine":["commands_to_run"]}'

    ローカル Linux マシン上で実行するコマンドの例を次に示します。

    aws ssm send-command \ --document-name "AWS-RunRemoteScript" \ --instance-ids "i-02573cafcfEXAMPLE" \ --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\": \"GitHubPrivateTest\", \"path\": \"scripts/webserver.yml\", \"tokenInfo\":\"{{ssm-secure:mySecureStringParameter}}\" }"],"commandLine":["ansible-playbook -i “localhost,” --check -c local webserver.yml"]}'