keenauth config promote による設定の移行
keenauth config promote は、ある環境の設定を別の環境にコピーします(例: staging から production へ)。ファイルに書き出すことなく、config export、config plan、config apply を手動で実行した場合と同じ手順を実行します:
- コピー元の
--from環境の設定ドキュメントをエクスポートします。 - そのドキュメントに基づくプランを
--to環境で作成します。 - 差分を表示します:
+件の作成、~件の更新、-件の削除。変更のないリソースは件数のみ数えられます。 - 確認後、プランを適用します。
2つの環境は異なるリージョンにあっても構いません。リージョン同士が直接通信することはありません。ドキュメントはお使いのマシンを経由し、メモリ上にのみ存在します。
開始する前に
このコマンドは両方の環境にアクセスする必要があるため、ダッシュボードのサインインを使用します。keenauth login でサインインしてください(keenauth login によるサインインを参照)。両方の環境で、コピー元の設定の読み取りとコピー先の設定の書き込みを許可するダッシュボードのロールが必要です。APIキーは 1 つの環境に属するため、KEENAUTH_API_KEY が設定されている間はコマンドの実行を拒否し、終了コード 2 で終了します。
使用方法
keenauth config promote --from env_01j9z3k4m5n6p7q8r9s0t1stg0 --to env_01j9z3k4m5n6p7q8r9s0t1prd0
| フラグ | 説明 |
|---|---|
--from |
コピー元の環境 ID(env_…)です。この環境の設定がエクスポートされます(必須)。 |
--to |
コピー先の環境 ID(env_…)です。プランの作成と適用はこの環境に対して行われます(必須)。 |
--kinds |
移行する種類です。カンマ区切りまたは繰り返し指定できます(config export と同様)。既定値: すべての種類。 |
--prune |
移行対象の種類のうち、コピー先にのみ存在するリソースも削除します。このフラグを指定しない場合、それらは保持されます。 |
--secrets-from-env |
プランに必要なクライアントシークレットを、ローカルの環境変数から読み取ります(下記を参照)。 |
--confirm-deletion |
保護された削除を <kind>/<key> として確認します(config apply と同様)。 |
--sp-host |
コピー先環境のサービスプロバイダーのホスト(例: login.example.com)。プランがコピー先でエンタープライズ接続の OIDC 情報を作成する場合にのみ必要です(下記を参照)。それ以外の場合は省略してください。 |
--yes、-y |
確認せずに適用します。標準入力がターミナルでない場合に必須です。 |
--output、-o |
table、json または yaml。フラグを指定しない場合、ターミナルでは表形式、それ以外では JSON で出力されます。 |
ターミナル(table)では、差分は標準出力に、確認の質問は標準エラー出力に表示されます。適用後には、プラン ID、ステータス、変更数を 1 行で表示します。json または yaml を指定すると、差分は標準エラー出力に出力され、標準出力には適用されたプランのみが出力されるため、スクリプトで読み取れます。コピー先がすでにコピー元と一致している場合、コマンドは nothing to promote と表示し、何も適用しません。
標準入力がターミナルではなく --yes が指定されていない場合、コマンドはリクエストを送信する前に終了コード 2 で終了します。
シークレットは移行されません
エクスポートされたドキュメントにシークレットの値が含まれることはありません。接続のクライアントシークレットは secret_ref プレースホルダー(例: KEENAUTH_CONNECTION_GOOGLE_CLIENT_SECRET)として記載されます。シークレットが必要なコピー先の変更は、[needs a client secret] とともに表示されます。
このようなプランは、ご自身でシークレットを指定しない限り適用されません。エラーに示された環境変数を設定し、--secrets-from-env を付けてコマンドを再実行してください。値はローカルの環境変数から読み取られ、適用リクエストのボディにのみ送信されます。表示されることもファイルに書き込まれることもなく、コピー元の環境から読み取られることもありません。
export KEENAUTH_CONNECTION_GOOGLE_CLIENT_SECRET=... # the production client secret
keenauth config promote --from env_01j9z3k4m5n6p7q8r9s0t1stg0 --to env_01j9z3k4m5n6p7q8r9s0t1prd0 --secrets-from-env
エンタープライズ OIDC とソーシャル接続
エンタープライズ接続の OIDC 設定(spec.oidc:発行者、クライアント ID、クライアント認証方式、プロバイダープロファイル)は、接続とともに移行されます。コピー先にこれらの設定がまだない場合、適用時にそれらが作成され、コールバック URL がコピー先のホストから設定されます。そのため、コピー先環境でユーザーがサインインするホストを --sp-host に指定してください。ホストは環境ごとに異なるため、ドキュメントには含まれません。
ソーシャル接続のクライアントシークレットは、現時点ではプランから適用できません。プランでこれが必要な場合、--secrets-from-env を指定していても適用は 501 not_implemented で拒否され、何も変更されません。他の種類は --kinds を使って移行するか、サポートされるまでコピー元からソーシャル接続を除外してください。
エラー
プランの有効期間は 1 時間です。プランの作成から適用までの間にコピー先のリソースが変更された場合、適用は 409 config_conflict で拒否され、何も変更されません。コマンドを再実行してください。その他の適用エラーは config apply の場合と同じです。
終了コード
| コード | 意味 |
|---|---|
0 |
プランが適用されたか、移行するものがありませんでした。 |
1 |
サーバーエラーが発生したか、確認を拒否しました(aborted)。 |
2 |
使用方法のエラー: 環境 ID が不正または同一、非対話型ターミナルで --yes がない、KEENAUTH_API_KEY が設定されている、またはプランに必要なシークレットがない。何も適用されません。 |
3 |
サインインしていないか、サーバーが 401 または 403 を返しました。 |
4 |
プランにその機能が含まれていません(403 と plan_feature_unavailable の組み合わせ)。 |