コンテンツにスキップ

スクリプト開発 / システムパッチ

8.0.11 バージョンで追加

システムパッチは, DataFlux Func のバージョンに応じて実行ファイルを置き換える仕組みです. パッチファイルと設定を現在のバージョンに対応するディレクトリに配置すると, Server, Worker, Beat はそれぞれの起動時にパッチファイルを指定された場所にコピーします.

システムパッチは, 一時的にイメージを交換できない場合に確認済みの修正ファイルを適用するのに適していますが, 通常のコード拡張やリソースデプロイ方法としては適していません. システム依存関係や Python パッケージをインストールする必要がある場合は, スクリプト開発 / 事前実行スクリプトなどの対応する仕組みを使用してください.

システムパッチは DataFlux Func の実行ファイルを上書きします

パッチを適用する前に, パッチの出所, 適用バージョン, ターゲットパスを確認し, 置き換えられるファイルをバックアップしてください. 誤ったパッチにより, Server, Worker, Beat が正常に動作できなくなる可能性があります.

1. システムパッチの準備

1.1 現在のバージョンの確認

「管理 / バージョン情報」で現在の DataFlux Func バージョンを確認します. システムは, 現在のバージョン名と完全に一致するパッチディレクトリのみを読み取り, 他のバージョンのパッチは読み取りません.

システムパッチのディレクトリは次のとおりです:

環境 場所
コンテナ内 /data/resources/system-patches/{現在のバージョン}/
ホスト内 {インストールディレクトリ}/data/resources/system-patches/{現在のバージョン}/

例えば, 現在のバージョンが 8.0.19 の場合, ホスト内のパッチディレクトリは次のとおりです:

Text Only
1
{インストールディレクトリ}/data/resources/system-patches/8.0.19/

1.2 パッチファイルの準備

各バージョンのパッチディレクトリには patch.yaml が含まれている必要があります. パッチファイルは現在のバージョンのディレクトリに直接配置でき, 実際のターゲット位置は patch.yaml で正しく指定するだけで済みます. 例:

Text Only
1
2
3
4
5
system-patches/
└── 8.0.19/
    ├── patch.yaml
    ├── example.json
    └── example.py

ここで, patch.yamlfiles 設定は, 「パッチファイル名からターゲットパスへのマッピング」です:

patch.yaml
1
2
3
files:
  example.py  : '@/worker/utils/example.py'
  example.json: /data/resources/example.json

設定内のパス規則は次のとおりです:

  • files のキーは, 現在のバージョンのパッチディレクトリ内のファイル名です. ファイルは現在のバージョンのディレクトリに存在している必要があります.
  • @/ で始まるターゲットパスは, DataFlux Func アプリケーションのルートディレクトリを基準とします. 例えば, @/worker/utils/example.py は, アプリケーションディレクトリ配下の worker/utils/example.py を表します.
  • @/ で始まらないターゲットパスには, 実行ディレクトリの違いによる曖昧さを避けるため, 絶対パスの使用を推奨します.
  • ターゲットディレクトリが存在しない場合は自動的に作成されます. ターゲットファイルがすでに存在する場合は直接上書きされ, 自動バックアップは行われません.

同じ files 設定は Server, Worker, Beat によってそれぞれ適用され, サービスごとにパッチを絞り込むことはできません. パッチを準備する際は, すべてのターゲットパスがこれらのサービスの実行コンテナに適用可能であることを確認してください.

1.3 パッチのアップロード

ホストへのアクセス権限がある場合は, patch.yaml とパッチファイルを, 現在のバージョンに対応するホストディレクトリに直接配置できます.

「ファイル管理」を使用してアップロードすることもできます:

  1. 「管理 / 実験的機能」でファイルマネージャーモジュールを有効にします.
  2. 「管理 / ファイル管理 / system-patches」に移動します.
  3. 【現在のバージョン (x.y.z) のパッチディレクトリを作成】をクリックし, 作成されたバージョンディレクトリに移動します.
  4. patch.yaml とパッチファイルを現在のバージョンのディレクトリに直接アップロードし, files 内のファイル名とターゲットパスが正しいことを確認します.

2. システムパッチの適用と確認

2.1 DataFlux Func の再起動

準備が完了したら, システムメンテナンス / アップグレードと再起動に従って DataFlux Func を再起動し, Server, Worker, Beat を再作成してパッチを適用させてください.

各サービスは起動時に, 次の処理を順に実行します:

  1. 現在の DataFlux Func バージョンを読み取ります.
  2. system-patches/{現在のバージョン}/patch.yaml を検索します.
  3. files 設定に従って各パッチファイルをコピーします.
  4. 現在のホスト, サービス, バージョン, 適用時刻, および各ファイルの適用結果を記録します.

現在のバージョンのディレクトリまたは patch.yaml が存在しない場合, サービスはシステムパッチをスキップします. patch.yaml が有効な YAML マッピングでない場合, または有効な files マッピングがない場合, パッチ処理はエラーを報告し, 対応するサービスの起動を中断します.

個々のパッチファイルが存在しない, パスが無効である, またはコピーに失敗した場合, システムはそのファイルを失敗として記録し, 他のファイルの処理を続行した後, サービスの起動を続行します. したがって, サービスが正常に起動したからといって, すべてのパッチが正常に適用されたとは限りません.

2.2 適用結果の確認

「管理 / バージョン情報 / システムツール」に移動し, 【システムパッチログの表示】をクリックします.

ログは, バージョンと近い適用時刻ごとにグループ化され, 次の情報が表示されます:

  • サービスとホスト名
  • DataFlux Func バージョン
  • 適用時刻
  • パッチの総数, 成功数, 失敗数
  • 各パッチファイル, ターゲットパス, 適用結果, エラー情報

各 Server, Worker, Beat ノードに対応する記録があり, すべてのパッチファイルが成功と表示されることを確認してください. コンテナログには, [SYSTEM PATCH] で始まる各ファイルの適用結果も出力されます.

3. システムパッチの更新または削除

システムは, サービス起動のたびに現在のバージョンのパッチを再適用します. したがって, パッチファイルまたは patch.yaml を変更した後は, DataFlux Func を再度再起動して初めて有効になります.

パッチ設定を削除しても, 現在実行中のコンテナ内で上書きされたファイルはすぐには元に戻りません. @/ ターゲットパスの場合は, 対応する設定を削除し, 関連サービスを再作成して, 元のイメージファイルから起動させてください. 永続化ディレクトリ内の絶対ターゲットパスの場合は, 操作前のバックアップを使用してファイルを復元する必要もあります.

DataFlux Func をアップグレードした後, 旧バージョンのディレクトリ内のパッチは新しいバージョンには適用されません. 新しいバージョンのコードに基づいて, パッチが依然として必要で互換性があるかを再確認し, 新しいバージョンに適用できるパッチを入手した場合にのみ, 新しいバージョンのディレクトリを作成してください. 旧バージョンのパッチを新しいバージョンのディレクトリに直接コピーしないでください.