翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムブートストラップアクション
AWS ParallelCluster は、クラスターの作成時にメインブートストラップアクションの前 (インストール前) または後 (インストール後) に任意のコードを実行できます。ほとんどの場合、このコードは Amazon Simple Storage Service (Amazon S3) に保存され、HTTPS接続を介してアクセスされます。コードは root として実行され、クラスターのオペレーティングシステムでサポートされている任意のスクリプト言語で実行できます。多くの場合、コードは Bash か Python で書かれています。
インストール前アクションは、、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 パッケージをクラスターにインストールする簡単なポストインストールスクリプトを作成します。
-
[Create a script].(スクリプトを作成します)。
#!/bin/bash echo "post-install script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@: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 に変更する必要があります。
-
新しいインストール後アクションを含めるように 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' -
クラスターを起動します。
$
pcluster create mycluster
-
出力の検証
$
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