View a markdown version of this page

PCS AWS でノードライフサイクルアクションを設定する - AWS PCS

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

PCS AWS でノードライフサイクルアクションを設定する

コンピューティングノードグループ設定でノードライフサイクルアクションを定義します。このトピックでは、スクリプトの定義、再起動時に再実行されるかどうかの制御、スクリプトの保存、引数の受け渡し、失敗の処理、キャッシュ、整合性の検証、ログの読み取りを行う方法について説明します。

エージェントバージョンの要件

ノードライフサイクルアクションには AWS 、PCS エージェントバージョン 1.5.0-1 以降が必要です。コンピューティングノードが古いエージェントバージョンでカスタム AMI を使用している場合は、ライフサイクルアクションを設定する前にエージェントを更新します。詳細については、「AWS PCS エージェントバージョン」を参照してください。

スクリプトを定義する方法

各スクリプトにはname、、scriptSource、オプションの argumentsonErrorポリシー、および がありますexecutionPolicy。場所フィールドと整合性フィールドは、 の下にグループ化されますscriptSource

{ "name": "My script", "scriptSource": { "scriptLocation": "s3://my-bucket/my-script.sh", "s3VersionId": "optional, S3 only", "checksum": "optional 64-char SHA-256 hex" }, "arguments": ["arg1", "arg2"], "onError": "TERMINATE", "executionPolicy": "FIRST_BOOT_ONLY" }

コンピューティングノードグループにライフサイクルアクションを追加する

コンピューティングノードグループを作成または更新するときに、ライフサイクルアクションを追加できます。 AWS マネジメントコンソール または を使用します AWS CLI。

AWS マネジメントコンソール
コンソールを使用してライフサイクルアクションを追加するには
  1. AWS PCS コンソールを開きます。

  2. コンピューティングノードグループの作成または更新ページを開きます。

  3. ノードライフサイクルアクションセクションで、スクリプトの追加を選択します。

  4. スクリプトソースを選択します。

    1. PCS AWS スクリプトライブラリから を追加する – AWSが管理するスクリプトを参照します。詳細については、「PCS AWSのノードライフサイクルアクションにメンテナンスされたスクリプト AWS を使用する」を参照してください。

    2. S3 経由で追加 – Amazon S3 URI でスクリプトを参照します。

    3. HTTPS 経由で追加 – HTTPS URL でスクリプトを参照します。

  5. ノードステージを選択します。

  6. S3 または HTTPS 経由で追加するスクリプトの場合は、次の設定を指定します。

    1. スクリプトの場所 – スクリプトの S3 URI または HTTPS URL を入力します。

    2. 名前 – スクリプトの名前を入力します。

    3. (オプション) チェックサム – SHA-256 チェックサムを入力して、スクリプトの整合性を検証します。詳細については、「スクリプトの整合性 (チェックサム)」を参照してください。

    4. (オプション) S3 経由で追加するスクリプトの場合は、オブジェクトの特定のバージョンを参照するバージョンを入力します。

  7. すべてのスクリプトソースで、以下の設定を指定します。

    1. エラー処理の動作TERMINATESTOP_SEQUENCE、または を選択しますCONTINUE

    2. 実行ポリシーFIRST_BOOT_ONLYまたは を選択しますEVERY_BOOT

    3. (オプション) 引数 – スクリプトに渡す引数を追加します。

  8. さらにスクリプトを追加するには、以下の手順を繰り返します。

  9. スクリプトはステージ内で上から下に実行されます。実行順序を変更するには、スクリプトのアクションを選択し、上に移動するまたは下に移動するを選択します。

  10. キャッシュポリシーで、 CACHE_ONCEまたは を選択しますREFRESH_ON_REBOOT。キャッシュポリシーはすべてのスクリプトに適用されます。詳細については、「スクリプトのキャッシュと更新」を参照してください。

AWS CLI

create-compute-node-group または update-compute-node-group コマンドで --node-lifecycle-actionsパラメータを使用します。パラメータ構造については、AWS PCS API リファレンスNodeLifecycleActionsRequest」を参照してください。コマンドの例については、「」を参照してくださいPCS AWS のノードライフサイクルアクションの例

再起動動作の制御

スクリプトexecutionPolicyごとに設定して、再起動時に再実行するかどうかを制御します。

Behavior

どのようなときに使うか

FIRST_BOOT_ONLY (デフォルト)

ノードの最初の起動時にスクリプトを 1 回実行します。それ以降の再起動のたびにスキップします。

パッケージのインストール、ドメインへの参加、ストレージの初期化などの 1 回限りのセットアップ。これらのスクリプトをべき等にする必要はありません。

EVERY_BOOT

スクリプトは、初回起動時再起動時に実行します。

エフェメラルファイルシステムの再マウントやノード状態の再アサートなど、再起動後に再適用する必要がある設定。

一度FIRST_BOOT_ONLY実行されるように設定されたスクリプトは、再起動時にスキップされます。起動ごとにEVERY_BOOT実行されるように設定されたスクリプトはべき等である必要があります (同じ結果で複数回実行しても安全です)。

スクリプトストレージの場所

スクリプトは Amazon S3 に保存することも、HTTPS 経由で提供することもできます。API を介してスクリプトをインラインでアップロードすることはできません。各スクリプトは 2 MiB 以下にする必要があります。エージェントはこのサイズを超えるスクリプトを拒否します。

  • Amazon S3 (s3://bucket/key) — インスタンス IAM プロファイルは オブジェクトs3:GetObjectに を持っている必要があります。S3 ゲートウェイ VPC エンドポイントを使用すると、プライベートサブネットのノードは VPC エンドポイントを介してスクリプトを取得できます。特定のバージョンを で固定します scriptSource.s3VersionId (S3 ロケーションのみ)。

  • HTTPS (https://hostname/path) — ホストはパブリックに読み取り可能 (認証なし) でなければならず、ノードにはアウトバウンドインターネットアクセス (インターネットゲートウェイ、NAT ゲートウェイ、または HTTP プロキシ) が必要です。これは、GitHub または他のパブリックリポジトリでホストされているスクリプトに便利です。

外部ストレージは、バージョン管理、監査可能性、チーム間の再利用を提供します。インラインスクリプトまたはアップロードされたスクリプトはサポートされていません。

スクリプトに引数を渡す

引数を順序付けられた配列として渡します。これらは、位置コマンドラインパラメータとしてスクリプトに到達します。

arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)

エージェントは環境変数をすべてのスクリプトにエクスポートします。これらの変数には、クラスターとノードのメタデータが含まれます。

変数

説明

PCS_CLUSTER_ID / PCS_CLUSTER_NAME

クラスター識別子/名前

PCS_COMPUTE_NODE_GROUP_ID / PCS_COMPUTE_NODE_GROUP_NAME

コンピューティングノードグループの識別子/名前

PCS_NODE_ID

ノード識別子

PCS_IS_FIRST_BOOT

1 ノードの最初の起動時、それ以降の再起動0時。EVERY_BOOT スクリプトで動作を分岐するために使用します。

#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"

エラー処理

各スクリプトには、スクリプトがゼロ以外の状態で終了したとき、またはシグナルによって強制終了されたときに何が起こるかを制御する onErrorフィールドがあります。

Behavior

どのようなときに使うか

TERMINATE (デフォルト)

ノードを失敗としてマークし、終了します。

重要なセットアップ (ストレージマウント、Active Directory 結合)。ノードの破損に対する支払いを防止します。

STOP_SEQUENCE

ステージ内の残りのスクリプトを停止し、ノードを実行したままにします。

デバッグ — 障害発生後にインスタンスを検査します。

CONTINUE

エラーをログに記録し、次のスクリプトを実行します。

オプションまたはベストエフォートタスク。

スクリプトがゼロ以外の状態で終了した場合、またはシグナル ( など) によって強制終了された場合、スクリプトは失敗しますSIGSEGVスクリプトは再試行されません。オペレーションで一時的な障害が発生する可能性がある場合は、スクリプト内に再試行ロジックを追加します。ただし、スクリプトの取得 (ダウンロード) は、onError動作が適用される前に、エクスポネンシャルバックオフ (最大約 17 秒) で最大 3 回再試行されます。

スクリプトのキャッシュと更新

エージェントは、最初の起動時に各スクリプトをインスタンスにダウンロードし、ローカルに保存します。再起動時の動作を制御する 2 つのフィールド: scriptCachingPolicyコントロールの再ダウンロードとexecutionPolicyコントロールの再実行。

  • CACHE_ONCE (デフォルト) — 初回起動時に 1 回ダウンロードします。再フェッチしないでください。動作は再起動間で同じです。スクリプトコンテンツを更新するには、インスタンスの置き換えが必要です。

  • REFRESH_ON_REBOOT — 再起動のたびにキャッシュを上書きして再ダウンロードします。これにより、再起動によってスクリプトの修正を出荷できます。起動ごとにネットワークアクセスが必要です。更新が失敗した場合、ダウンロードは取得失敗として扱われ、スクリプトonErrorの動作が適用されます (キャッシュされたコピーにフォールバックはありません)。更新したスクリプトexecutionPolicyは、再起動時に の場合にのみ実際に再実行されますEVERY_BOOT

ライフサイクル設定 (実行されるスクリプト、引数、エラー処理、実行ポリシー) は、インスタンスごとに常に変更できません。これを で変更すると、新しいインスタンスにのみUpdateComputeNodeGroup影響し、ノードが置き換えられる前に実行中のジョブが終了するように DRAIN 戦略がトリガーされます。

スクリプトの整合性 (チェックサム)

必要に応じて、スクリプトの checksumに SHA-256 を scriptSource64 文字の 16 進文字列として指定します。エージェントはダウンロード時に検証します。不一致はダウンロード失敗として扱われ、 をトリガーしますonError。本番稼働用、特に共有ソースまたは外部ソースからのスクリプトにはチェックサムをお勧めします。

sha256sum mount-efs.sh # use the 64-char hex hash as the checksum value

ログ記録とデバッグ

各スクリプトは独自のログファイルに書き込み、エージェントは独自の運用ログを保持します。

# agent: download, caching, checksum, orchestration /var/log/amazon/pcs/lifecycle/actions/executor.log # each script's stdout/stderr /var/log/amazon/pcs/lifecycle/actions/<stage>/<script-name>.log

ログファイル名は、定義したスクリプト名を使用します。スペースは保持されます。たとえば、 という名前のスクリプトは にMount EFS home directory書き込みますMount EFS home directory.log。SSH または AWS Systems Manager Session Manager に接続してそれらを読みます。どちらもnodeBootstrappedステージで使用できます。で失敗したノードTERMINATEは置き換えられるため、終了後にデバッグのためにログをインスタンス外に転送します。ライフサイクルログディレクトリを Amazon CloudWatch Logs に配信するように Amazon CloudWatch エージェントを設定するノードブートストラップスクリプトを追加します。 AWSメンテナンスされたconfigure-cloudwatch-logs.shスクリプトはこれを行います。詳細については、「PCS AWSのノードライフサイクルアクションにメンテナンスされたスクリプト AWS を使用する」を参照してください。