

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

# カスタムブートストラップアクション
<a name="pre_post_install"></a>

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

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

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

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

プレインストールまたはポストインストールのアクションに失敗すると、インスタンスのブートストラップも失敗します。成功すると、終了コード 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
```

## 設定
<a name="pre_post_install-configuration"></a>

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

```
# 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
```

## 引数
<a name="arguments"></a>

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

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

## 例
<a name="example"></a>

以下のステップでは、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}"
   ```

1. Amazon S3 に正しいアクセス許可でスクリプトをアップロードしてください。パブリック読み取り権限が適切でない場合は、[`s3_read_resource`](cluster-definition.md#s3-read-resource) または [`s3_read_write_resource`](cluster-definition.md#s3-read-write-resource) パラメータのいずれかを使用してアクセスを許可してください。詳細については、「[Amazon S3 の操作](s3_resources.md)」を参照してください。

   ```
   $ aws s3 cp --acl public-read {{/path/to/myscript.sh}} s3://{{bucket-name/myscript.sh}}
   ```
**重要**  
スクリプトが Windows で編集された場合、スクリプトを Amazon S3 にアップロードする前に、行末を CRLF から LF に変更する必要があります。

1. 新しいインストール後アクションを含めるように 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'
   ```

1. クラスターを起動します。

   ```
   $ pcluster create mycluster
   ```

1. 出力の検証

   ```
   $ 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
   ```