翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PCS AWS でノードライフサイクルアクションを設定する
コンピューティングノードグループ設定でノードライフサイクルアクションを定義します。このトピックでは、スクリプトの定義、再起動時に再実行されるかどうかの制御、スクリプトの保存、引数の受け渡し、失敗の処理、キャッシュ、整合性の検証、ログの読み取りを行う方法について説明します。
エージェントバージョンの要件
ノードライフサイクルアクションには AWS 、PCS エージェントバージョン 1.5.0-1 以降が必要です。コンピューティングノードが古いエージェントバージョンでカスタム AMI を使用している場合は、ライフサイクルアクションを設定する前にエージェントを更新します。詳細については、「AWS PCS エージェントバージョン」を参照してください。
スクリプトを定義する方法
各スクリプトにはname、、scriptSource、オプションの arguments、 onErrorポリシー、および があります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。
再起動動作の制御
スクリプトexecutionPolicyごとに設定して、再起動時に再実行するかどうかを制御します。
値 |
Behavior |
どのようなときに使うか |
|---|---|---|
|
ノードの最初の起動時にスクリプトを 1 回実行します。それ以降の再起動のたびにスキップします。 |
パッケージのインストール、ドメインへの参加、ストレージの初期化などの 1 回限りのセットアップ。これらのスクリプトをべき等にする必要はありません。 |
|
スクリプトは、初回起動時と再起動時に実行します。 |
エフェメラルファイルシステムの再マウントやノード状態の再アサートなど、再起動後に再適用する必要がある設定。 |
一度FIRST_BOOT_ONLY実行されるように設定されたスクリプトは、再起動時にスキップされます。起動ごとにEVERY_BOOT実行されるように設定されたスクリプトはべき等である必要があります (同じ結果で複数回実行しても安全です)。
スクリプトストレージの場所
スクリプトは Amazon S3 に保存することも、HTTPS 経由で提供することもできます。API を介してスクリプトをインラインでアップロードすることはできません。各スクリプトは 2 MiB 以下にする必要があります。エージェントはこのサイズを超えるスクリプトを拒否します。
-
Amazon S3 (
s3://) — インスタンス IAM プロファイルは オブジェクトbucket/keys3:GetObjectに を持っている必要があります。S3 ゲートウェイ VPC エンドポイントを使用すると、プライベートサブネットのノードは VPC エンドポイントを介してスクリプトを取得できます。特定のバージョンを で固定しますscriptSource.s3VersionId(S3 ロケーションのみ)。 -
HTTPS (
https://) — ホストはパブリックに読み取り可能 (認証なし) でなければならず、ノードにはアウトバウンドインターネットアクセス (インターネットゲートウェイ、NAT ゲートウェイ、または HTTP プロキシ) が必要です。これは、GitHub または他のパブリックリポジトリでホストされているスクリプトに便利です。hostname/path
外部ストレージは、バージョン管理、監査可能性、チーム間の再利用を提供します。インラインスクリプトまたはアップロードされたスクリプトはサポートされていません。
スクリプトに引数を渡す
引数を順序付けられた配列として渡します。これらは、位置コマンドラインパラメータとしてスクリプトに到達します。
arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)
エージェントは環境変数をすべてのスクリプトにエクスポートします。これらの変数には、クラスターとノードのメタデータが含まれます。
変数 |
説明 |
|---|---|
|
クラスター識別子/名前 |
|
コンピューティングノードグループの識別子/名前 |
|
ノード識別子 |
|
|
#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"
エラー処理
各スクリプトには、スクリプトがゼロ以外の状態で終了したとき、またはシグナルによって強制終了されたときに何が起こるかを制御する onErrorフィールドがあります。
値 |
Behavior |
どのようなときに使うか |
|---|---|---|
|
ノードを失敗としてマークし、終了します。 |
重要なセットアップ (ストレージマウント、Active Directory 結合)。ノードの破損に対する支払いを防止します。 |
|
ステージ内の残りのスクリプトを停止し、ノードを実行したままにします。 |
デバッグ — 障害発生後にインスタンスを検査します。 |
|
エラーをログに記録し、次のスクリプトを実行します。 |
オプションまたはベストエフォートタスク。 |
スクリプトがゼロ以外の状態で終了した場合、またはシグナル ( など) によって強制終了された場合、スクリプトは失敗します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 を使用する」を参照してください。