カスタムブートストラップアクション - AWS ParallelCluster

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタムブートストラップアクション

AWS ParallelCluster は、クラスターの作成時にメインブートストラップアクションの前 (インストール前) または後 (インストール後) に任意のコードを実行できます。ほとんどの場合、このコードは Amazon Simple Storage Service (Amazon S3) に保存され、HTTPS接続を介してアクセスされます。コードは root として実行され、クラスターのオペレーティングシステムでサポートされている任意のスクリプト言語で実行できます。多くの場合、コードは BashPython で書かれています。

インストール前アクションは、、Amazon Elastic Block Store (Amazon EBS)、スケジューラの設定などNAT、クラスターデプロイブートストラップアクションを開始する前に呼び出されます。一般的なインストール前のアクションには、ストレージの変更、追加のユーザーやパッケージの追加などがあります。

ポストインストールのアクションは、クラスターのブートストラッププロセスが完了した後に呼び出されます。ポストインストールのアクションは、インスタンスが完全に構成され、完了する前に呼び出される最後のアクションです。一般的なポストインストールのアクションには、スケジューラ設定の変更、ストレージやパッケージの変更などがあります。

設定時に引数を指定することで、スクリプトに引数を渡すことができます。これを実行するには、プレインストールおよびポストインストールのアクションに引数を二重引用符で囲んで渡します。

プレインストールまたはポストインストールのアクションに失敗すると、インスタンスのブートストラップも失敗します。成功すると、終了コード 0 で通知されます。それ以外の終了コードは、インスタンスのブートストラップが失敗したことを示します。

ランニングヘッドとコンピューティングノードを区別することができます。/etc/parallelcluster/cfnconfig ファイルをソースとし、ヘッドノードとコンピューティングノードにそれぞれ「MasterServer」と「ComputeFleet」という値を持つ cfn_node_type 環境変数を評価します。

#!/bin/bash . "/etc/parallelcluster/cfnconfig" case "${cfn_node_type}" in MasterServer) echo "I am the head node" >> /tmp/head.txt ;; ComputeFleet) echo "I am a compute node" >> /tmp/compute.txt ;; *) ;; esac

構成

次の設定は、プレインストールおよびポストインストールのアクションと引数を定義するために使用されます。

# URL to a preinstall script. This is run before any of the boot_as_* scripts are run # (no default) pre_install = https://<bucket-name>.s3.amazonaws.com/my-pre-install-script.sh # Arguments to be passed to preinstall script # (no default) pre_install_args = argument-1 argument-2 # URL to a postinstall script. This is run after any of the boot_as_* scripts are run # (no default) post_install = https://<bucket-name>.s3.amazonaws.com/my-post-install-script.sh # Arguments to be passed to postinstall script # (no default) post_install_args = argument-3 argument-4

引数

最初の 2 つの引数 $0$1 はスクリプト名と URL 用に予約されています。

$0 => the script name $1 => s3 url $n => args set by pre/post_install_args

以下のステップでは、R パッケージをクラスターにインストールする簡単なポストインストールスクリプトを作成します。

  1. [Create a script].(スクリプトを作成します)。

    #!/bin/bash echo "post-install script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:2}"
  2. Amazon S3 に正しいアクセス許可でスクリプトをアップロードしてください。パブリック読み取り権限が適切でない場合は、s3_read_resource または s3_read_write_resource パラメータのいずれかを使用してアクセスを許可してください。詳細については、「Amazon S3 の操作」を参照してください。

    $ aws s3 cp --acl public-read /path/to/myscript.sh s3://<bucket-name>/myscript.sh
    重要

    スクリプトが Windows で編集された場合、スクリプトCRLFが Amazon S3 にアップロードされる前に、行の末尾を から LF に変更する必要があります。

  3. 新しいインストール後アクションを含めるように AWS ParallelCluster 設定を更新します。

    [cluster default] ... post_install = https://<bucket-name>.s3.amazonaws.com/myscript.sh post_install_args = 'R curl wget'

    バケットにパブリック読み取りアクセス許可がない場合は、 をURLプロトコルs3として使用します。

    [cluster default] ... post_install = s3://<bucket-name>/myscript.sh post_install_args = 'R curl wget'
  4. クラスターを起動します。

    $ pcluster create mycluster
  5. 出力の検証

    $ less /var/log/cfn-init.log 2019-04-11 10:43:54,588 [DEBUG] Command runpostinstall output: post-install script has 4 arguments arg: s3://<bucket-name>/test.sh arg: R arg: curl arg: wget Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version Nothing to do