search-price@1.2.0ブラウザーToolとdaily-price-watch Flowが、オンプレミスのミラー、エアギャップ環境、またはウォームDRレプリカに、バイト単位で同一のまま届きます。複製はcontent-addressedなので、安全で、冪等で、増分的です。
Packをミラーリングする
1つのコマンドで、条件に一致するPackをソースRegistryから宛先へ移動します。--packsセレクターは名前パターンで一致します。そのため、"@acme/*"のようなglobは、@acme namespace内のすべてのPackを運びます。これには、daily-price-watchの背後にあるsearch-price@1.2.0 Toolを含む@acme/pricing Packも含まれます。各artifactはdigestで固定されているため、ミラーは宛先にまだ存在しないものだけを転送し、両側が一致した後に再実行しても何も起きません。
複製が移動するのは、Flowのエンジン側です。つまりPack、Flow、およびそれらのdigestです。これは任意のコントロールプレーンの一部であり、Flowの実行方法を変えることはありません(原則T6)。あるRegistry上のPackに対して検証されたFlowは、digestが同じであるため、ミラーされたコピーに対しても同一に再現されます。
モード
| モード | 方向 | 振る舞い |
|---|---|---|
| pull | remoteからlocalへ | 条件に一致するPackをremoteからlocal Registryへ取得します。 |
| push | localからremoteへ | localのPackをremoteへ公開します。 |
| sync | 双方向 | 新しいdigestが勝ち、conflictは表面化されます。同じname@versionの下に2つの異なるbodyがある場合はhard conflictであり、黙った上書きにはなりません。 |
| scheduled | 上記のいずれか | ウォームミラーまたはDRレプリカのために、pull、push、syncのいずれかをcronで実行します。 |
syncとhard-conflictルール
syncは両方のRegistryを突き合わせます。特定のPackについては新しいdigestが勝ち、不一致は推測で解決されるのではなく表面化されます。明確に拒否される唯一のケースは、同じname@versionを名乗る2つの異なるbodyです。これはhard conflictであり、黙った上書きではありません。semverとdigestの不変性がそれを禁止します。公開済みのversionは不変のartifactであるため、同じ@acme/pricing@2.3.0が正当に2つの異なるdigestを持つことはできません。
スケジュールされたミラー
ウォームミラーまたは災害復旧レプリカのために、任意のモードをスケジュール実行します。スタンドアロンエンジンでは、これは小さな組み込みschedulerです。service tierではコントロールプレーンのschedulerなので、スケジュールされた各ミラーはコンソールだけの設定ではなく、宣言的でdigestを認識するrecordです。スケジューリングの詳細はコントロールプレーンにあります。cron駆動のjobがどのように記録され、検査可能になるかは、Schedulingを参照してください。
到着時に検証する
すべてのartifactがdigestを持つため、複製は到着時に検証されます。主張されたdigestにhashされないPackは、resolveまたは実行される前に拒否されます。検証は、実際に到着したバイト列に対して宛先で行われます。転送中の破損、切り詰め、改ざんが、後でFlowによってresolveされる可能性のあるRegistryに入り込むことはありません。
これは、
daily-price-watchを環境間で再現可能にする保証と同じものです(原則T3)。ミラー上でresolveされるものは、ソースで公開されたものとまったく同じhashになります。
差し替え可能なtransport
バイト列がどのように移動するかは、それがどのように検証されるかとは独立しています。transportは差し替え可能であり、バイト列がどのように到着したかに関係なく、検証は同じです。| Transport | 用途 |
|---|---|
| HTTPS registry | 到達可能な2つのRegistry間で使う、デフォルトのネットワーク接続されたミラーです。 |
| OCI registry | 既存のcontainer registry infrastructureを再利用してPackをhostします。 |
| Object storage | S3、GCS、または互換性のあるblob storeを通じてミラーリングします。 |
| File bundle | エアギャップ向けの自己完結型でdigest検証済みのbundleです。接続ゼロの境界を越えて運ばれます。 |
シークレットは、複製されるどのartifactにも含まれて移動しません。
daily-price-watch Flowのwebhookはsecret.WEBHOOK_URL参照のままです。宛先環境は実行時に自身のシークレットプロバイダーから値を供給し、ミラーから供給することはありません。署名: 完全性の上に真正性を重ねる
digestは完全性を与えます。bodyが主張されたものと正確に同じである、ということです。署名は真正性を追加します。つまり、それを誰が公開したかの証明です。この2つは組み合わせられます。- publisherは
PackManifestに署名できます。 - Registryは、ミラーを受け入れる前に、信頼されたキーによる有効な署名を要求できます。
- 署名はdigestの上に置かれます。完全性はdigestから、真正性は署名から得られます。
関連
エアギャップデプロイ
Flowとそれに固定されたPackをネットワーク分離環境へ運び、接続ゼロで結果を再現します。
Pack
Packがどのようにversion付けされ、digest固定され、resolveされるかを説明します。これらは複製が移動するartifactです。
デプロイ
FlowのPackをRegistryへ公開し、その後、必要なLauncher上でFlowを公開します。
Registryを複製する
2つのRegistry間でPackをミラーリングする手順を順を追って説明します。