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

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

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

/CustomActions/ OnNodeStart構成設定を定義するHeadNodeと、 はノードの起動直後に任意のコード AWS ParallelCluster を実行します。HeadNode /CustomActions/ OnNodeConfigured構成設定を定義すると、ノード構成が正しく完了した後に がコード AWS ParallelCluster を実行します。

AWS ParallelCluster バージョン 3.4.0 以降では、// HeadNode CustomActionsOnNodeUpdated構成設定を定義すると、ヘッドノードの更新後にコードを実行できます。

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

注記

AWS ParallelCluster バージョン 3.7.0 以降、クラスターImds/ImdsSupport設定のデフォルトは ですv2.0

新しいクラスターを作成してバージョン 3.7.0 以降のバージョンにアップグレードする場合は、カスタムブートストラップアクションスクリプトを IMDSv2 と互換性があるように更新するか、クラスター設定ファイルで Imds/ImdsSupportv1.0 に設定してください。

警告

責任共有モデルで説明されているように、カスタムスクリプトと引数を設定する必要があります。カスタムブートストラップスクリプトと引数が、クラスターノードへのフルアクセス権があると信頼できるソースからのものであることを確認してください。

警告

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

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

注記

クラスターに DirectoryServiceHeadNode // CustomActions OnNodeStartスクリプトを設定するDirectoryServiceと、 はOnNodeStartスクリプトを実行する前に sssd AWS ParallelCluster を設定して再起動します。

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

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

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

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

注記

OnNodeUpdated を設定した場合、更新が失敗したときに OnNodeUpdated アクションを以前の状態に手動で復元する必要があります。

OnNodeUpdated カスタムアクションが失敗した場合、更新は以前の状態にロールバックします。ただし、OnNodeUpdated アクションは更新時にのみ実行され、スタックのロールバック時には実行されません。

HeadNode/CustomActions および Scheduling/SlurmQueues/CustomActions の設定セクションでは、ヘッドノードとキューごとに異なるスクリプトを指定できます。OnNodeUpdated は、HeadNode セクションでのみ設定できます。

注記

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

構成

次の設定は、HeadNode/CustomActions/OnNodeStart & OnNodeConfigured & OnNodeUpdated および Scheduling/CustomActions/OnNodeStart & OnNodeConfigured アクションと引数を定義するために使用されます。

HeadNode: [...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 OnNodeUpdated: # Script URL. This is run after the head node update is completed. Script: s3://bucket-name/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://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: Script: s3://bucket-name/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://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/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://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/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://bucket-name/on-node-updated1.sh Args: - arg1 - Script: s3://bucket-name/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://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/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://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

AWS ParallelCluster バージョン 3.6.0 以降、 Sequence設定が追加されました。を指定するとSequence、カスタム action. AWS ParallelCluster continues の複数のスクリプトを一覧表示して、 を含めずに 1 つのスクリプトでカスタムアクションの設定をサポートできますSequence

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

[...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/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://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...]

引数

注記

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

カスタムブートストラップアクションを使用したクラスターの例

次の手順では、ノードの設定後に実行される簡単なスクリプトを作成し、クラスターのノードに 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}"
  2. Amazon S3 に正しいアクセス許可でスクリプトをアップロードしてください。パブリック読み取りアクセス許可が適切でない場合は、HeadNode/Iam/S3Access および Scheduling/SlurmQueues の設定セクションを使用してください。詳細については、「Amazon S3 での使用」を参照してください。

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

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

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

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

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

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. クラスターを起動します。

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. 出力の検証

    • 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 との統合」を参照してください。

IMDSv2 用のカスタムブートストラップスクリプトの更新例

次の例では、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 ユーザーガイド」の「インスタンスメタデータを取得する」を参照してください。

IMDSv1 の設定を更新する例

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