

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

# カスタムブートストラップアクション
<a name="custom-bootstrap-actions-v3"></a>

/[`HeadNode`](HeadNode-v3.md)/ [`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)設定を定義すると、 はノードの起動直後に任意のコード AWS ParallelCluster を実行します。/[`HeadNode`](HeadNode-v3.md)/ [`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)[`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured)設定を定義すると、 はノード設定が正しく完了した後にコード AWS ParallelCluster を実行します。

 AWS ParallelCluster バージョン 3.4.0 以降では、// [`HeadNode`](HeadNode-v3.md) [`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)[`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)設定を定義すると、ヘッドノードの更新後にコードを実行できます。

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

**注記**  
 AWS ParallelCluster バージョン 3.7.0 以降、クラスター[`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)/[`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport)デフォルト設定は です`v2.0`。  
新しいクラスターを作成してバージョン 3.7.0 以降のバージョンにアップグレードする場合は、カスタムブートストラップアクションスクリプトを IMDSv2 と互換性があるように更新するか、クラスター設定ファイルで [`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)/[`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport) を `v1.0` に設定してください。

**警告**  
責任[共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)で説明されているように、カスタムスクリプトと引数を設定するのはお客様の責任です。カスタムブートストラップスクリプトと引数が、クラスターノードへのフルアクセス権があると信頼できるソースからのものであることを確認してください。

**警告**  
AWS ParallelCluster は、 `/etc/parallelcluster/cfnconfig` ファイルを通じて提供される内部変数の使用をサポートしていません。このファイルは将来のリリースの一部として削除される可能性があります。

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

**注記**  
クラスターに [`DirectoryService`](DirectoryService-v3.md)と [`HeadNode`](HeadNode-v3.md) // [`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions) [`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)スクリプトを設定すると、 は`OnNodeStart`スクリプトを実行する前に `sssd` AWS ParallelCluster を設定`DirectoryService`して再起動します。

`OnNodeConfigured` アクションは、ノードのブートストラップ・プロセスが完了した後に呼び出されます。`OnNodeConfigured` アクションは、インスタンスが完全に構成され、完了したとみなされる前の最後のアクションです。一般的な `OnNodeConfigured` のアクションには、スケジューラ設定の変更、ストレージやパッケージの変更などがあります。設定時に指定することで、スクリプトに引数を渡すことができます。

ヘッドノードの更新が完了し、スケジューラーと共有ストレージが最新のクラスター設定変更に対応するようになった後、`OnNodeUpdated` アクションが呼び出されます。

`OnNodeStart` または `OnNodeConfigured` カスタムアクションが成功すると、終了コード 0 で成功が示されます。それ以外の終了コードは、インスタンスのブートストラップが失敗したことを示します。

`OnNodeUpdated` カスタムアクションが成功すると、終了コード 0 で成功が通知されます。それ以外の終了コードは、失敗したことを示します。

**注記**  
[`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated) を設定した場合、更新が失敗したときに `OnNodeUpdated` アクションを以前の状態に手動で復元する必要があります。  
`OnNodeUpdated` カスタムアクションが失敗した場合、更新は以前の状態にロールバックします。ただし、`OnNodeUpdated` アクションは更新時にのみ実行され、スタックのロールバック時には実行されません。

/ および i / [`HeadNode`](HeadNode-v3.md) / [`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)設定セクションでは、ヘッドノード[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)とキューごとに異なるスクリプトを指定できます。 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) は [`Scheduling`](Scheduling-v3.md) `HeadNode`セクション[`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)でのみ設定できます。

**注記**  
 AWS ParallelCluster バージョン 3.0 以前は、ヘッドノードとコンピューティングノードに異なるスクリプトを指定できませんでした。「[AWS ParallelCluster 2.x から 3.x への移行](moving-from-v2-to-v3.md)」を参照してください。

**Topics**
+ [アクションと引数を定義するための構成設定](custom-bootstrap-actions-config-v3.md)
+ [引数](custom-bootstrap-actions-args-v3.md)
+ [カスタムブートストラップアクションを使用したクラスターの例](custom-bootstrap-actions-example-cluster-v3.md)
+ [IMDSv2 のカスタムブートストラップスクリプトを更新する方法の例](custom-bootstrap-actions-example-imdsv2-v3.md)
+ [IMDSv1 の設定を更新する方法の例](custom-bootstrap-actions-example-imdsv1-v3.md)

# アクションと引数を定義するための構成設定
<a name="custom-bootstrap-actions-config-v3"></a>

次の設定は、[`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart) & [`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured) & [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated) および [`Scheduling`](Scheduling-v3.md)/[`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)/[`OnNodeStart`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeStart) & [`OnNodeConfigured`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeConfigured) アクションと引数を定義するために使用されます。

```
HeadNode:
  [...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-start.sh
      Args:
        - arg1
    OnNodeConfigured:
      # Script URL. This is run after all the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
      Args:
        - arg1
    OnNodeUpdated:
      # Script URL. This is run after the head node update is completed.
      Script: s3://amzn-s3-demo-bucket/on-node-updated.sh
      Args:
        - arg1
  # Bucket permissions
  Iam:
    S3Access:
      - BucketName: bucket_name
        EnableWriteAccess: false
Scheduling:
  Scheduler: slurm
   [...]
  SlurmQueues:
    - Name: queue1
      [...]
      CustomActions:
        OnNodeStart:
          Script: s3://amzn-s3-demo-bucket/on-node-start.sh
          Args:
            - arg1
        OnNodeConfigured:
          Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
          Args:
            - arg1
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

`Sequence` 設定の使用 ( AWS ParallelCluster バージョン 3.6.0 で追加):

```
HeadNode:
  [...]
  CustomActions:
    OnNodeStart:
      # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
          Args:
            - arg1
        [...]
    OnNodeConfigured:
      # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-configured1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-configured2.sh
          Args:
            - arg1
        [...]
    OnNodeUpdated:
      # Script URLs. The scripts are run in the same order as listed in the configuration, after the head node update is completed.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-updated1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-updated2.sh
          Args:
            - arg1
        [...]
  # Bucket permissions
  Iam:
    S3Access:
      - BucketName: bucket_name
        EnableWriteAccess: false
Scheduling:
  Scheduler: slurm
   [...]
  SlurmQueues:
    - Name: queue1
      [...]
      CustomActions:
        OnNodeStart:
          # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run
          Sequence:
            - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
              Args:
                - arg1
            [...]
        OnNodeConfigured:
          # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run
          Sequence:
            - Script: s3://amzn-s3-demo-bucket/on-node-configured1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/on-node-configured2.sh
              Args:
                - arg1
            [...]
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

`Sequence` 設定は AWS ParallelCluster バージョン 3.6.0 から追加されます。`Sequence` を指定すると、カスタムアクション用の複数のスクリプトを一覧表示できます。`Sequence` を追加しなくても、 AWS ParallelCluster は 1 つのスクリプトによるカスタムアクションの設定を引き続きサポートします。

AWS ParallelCluster は、同じカスタムアクション`Sequence`に 1 つのスクリプトと の両方を含めることをサポートしていません。たとえば、次の設定を指定すると、 は AWS ParallelCluster 失敗します。

```
[...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-start.sh
          Args:
            - arg1
      # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
          Args:
            - arg1
[...]
```

# 引数
<a name="custom-bootstrap-actions-args-v3"></a>

In AWS ParallelCluster 2.x 引`$1`数は、カスタムスクリプトの URL を保存するために予約された引数でした。for AWS ParallelCluster 2.x with AWS ParallelCluster 3.x で作成されたカスタムブートストラップスクリプトを再利用する場合は、引数のシフトを考慮して調整する必要があります。「[AWS ParallelCluster 2.x から 3.x への移行](moving-from-v2-to-v3.md)」を参照してください。

# カスタムブートストラップアクションを使用したクラスターの例
<a name="custom-bootstrap-actions-example-cluster-v3"></a>

次の手順では、ノードの設定後に実行される簡単なスクリプトを作成し、クラスターのノードに `R,` `curl` および `wget` パッケージをインストールします。

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

   ```
   #!/bin/bash
     echo "The script has $# arguments"
     for arg in "$@"
     do
         echo "arg: ${arg}"
     done
     yum -y install "${@:1}"
   ```

1. Amazon S3 に正しいアクセス許可でスクリプトをアップロードしてください。パブリック読み取りアクセス許可が適切でない場合は、[`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access) および [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) の設定セクションを使用してください。詳細については、「[Amazon S3 での使用](s3_resources-v3.md)」を参照してください。

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

1. 新しい`OnNodeConfigured`アクションを含めるように AWS ParallelCluster 設定を更新します。

   ```
   CustomActions:
     OnNodeConfigured:
       Script: https://<amzn-s3-demo-bucket>.s3.<region>.amazonaws.com/myscript.sh
       Args:
         - "R"
         - "curl"
         - "wget"
   ```

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

   ```
   CustomActions:
     OnNodeConfigured:
       Script: s3://amzn-s3-demo-bucket/myscript.sh
       Args:
         - "R"
         - "curl"
         - "wget"
   ```

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

   ```
   $ pcluster create-cluster --cluster-name mycluster \
     --region <region> --cluster-configuration config-file.yaml
   ```

1. 出力の検証
   + `HeadNode` 設定にカスタムアクションを追加した場合は、ヘッドノードにログインし、次のコマンド`/var/log/cfn-init.log`を実行して にある `cfn-init.log` ファイルを確認します。

     ```
     $ less /var/log/cfn-init.log
       2021-09-03 10:43:54,588 [DEBUG] Command run
       postinstall output: The script has 3 arguments
       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
     ```
   + `SlurmQueues` 設定にカスタムアクションを追加した場合は、コンピューティングノードの `/var/log/cloud-init.log` にある `cloud-init.log` を確認します。CloudWatch を使用してこれらのログを表示します。

   Amazon CloudWatch コンソールでこれら両方のログを表示できます。詳細については、「[Amazon CloudWatch Logs との統合](cloudwatch-logs-v3.md)」を参照してください。

# IMDSv2 のカスタムブートストラップスクリプトを更新する方法の例
<a name="custom-bootstrap-actions-example-imdsv2-v3"></a>

次の例では、IMDSv1 で使用されていたカスタムブートストラップアクションスクリプトを IMDSv2 で使用できるように更新します。IMDSv1 スクリプトは Amazon EC2 インスタンスの AMI ID メタデータを取得します。

```
#!/bin/bash
AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id)
echo $AMI_ID >> /home/ami_id.txt
```

以下は、IMDSv2 と互換性があるように変更されたカスタムブートストラップアクションスクリプトを示しています。

```
#!/bin/bash
AMI_ID=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
         && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id)
echo $AMI_ID >> /home/ami_id.txt
```

詳細については、Linux [インスタンス用 Amazon EC2 ユーザーガイドのインスタンスメタデータの取得](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instancedata-meta-data-retrieval-examples)を参照してください。 *Amazon EC2 *

# IMDSv1 の設定を更新する方法の例
<a name="custom-bootstrap-actions-example-imdsv1-v3"></a>

以下は、 AWS ParallelCluster バージョン 3.7.0 以前を使用している場合に IMDSv1 をサポートするクラスター設定の例です。

```
Region: us-east-1
Imds:
  ImdsSupport: v1.0
Image:
  Os: alinux2
HeadNode:
  InstanceType: t2.micro
  Networking:
    SubnetId: subnet-abcdef01234567890
  Ssh:
    KeyName: key-name
  CustomActions:
    OnNodeConfigured:
      Script: Script-path
Scheduling:
  Scheduler: slurm
  SlurmQueues:
  - Name: queue1
    CustomActions:
      OnNodeConfigured:
        Script: Script-path
    ComputeResources:
    - Name: t2micro
      Instances:
      - InstanceType: t2.micro
      MinCount: 11
    Networking:
      SubnetIds:
      - subnet-abcdef01234567890
```