GoogleのCloud Runでタスクを実行できるジョブ(Jobs)だけど、まだプレビュー版なせいか、Cloudコンソールでサービス側にあるコピーボタンがまだジョブ側にはない(2023年2月14日時点) ジョブの作成 | Cloud Run のドキュメント | Google Cloud
2023年9月26日更新:2023年9月時点でalpha無しに追加されてるのでalphaを消しました
サービス
ジョブ
シンプルなやつなら問題ないけど、環境変数が大量にあったり、シークレットを使ってると手作業でのコピーは非常につらいので、gcloudコマンドでなんとかやる方法をメモ。
ローカルのセットアップは面倒なのでCloud Shellで行う。
バージョン
$ gcloud version Google Cloud SDK 416.0.0 alpha 2023.01.30
1,コピー元となる既存のジョブ情報をyamlで書き出す
必要なdescribeコマンドがalphaにしかないのでalphaを使う
追記:2023年9月時点で追加されてるのでalpha不要
途中リージョンを聞かれたら指定したコピー元jobのものを指定する
そのまま>
でファイルに書き出す
$ gcloud run jobs describe --format=yaml your-from-job-name --region=your-region > your-from-job-name_20230214.yml
2, 新しいjobを作っておく
Cloudコンソールでも、コマンドでもいいので作っておく。
今回はCloudコンソールでイメージ、ジョブ名、リージョンだけ指定して作成。
後述のreplaceコマンドでもいっしょにできるかもしれない。
3, 新しいjob用yamlを作成
1で作ったファイルをわかりやすい名前にコピーする
cp your-from-job-name_20230214.yml your-new-job-name_20230214.yml
vimでいじる
vim your-new-job-name_20230214.yml
replaceで使えなさそうなmetadataのname以外とstatusを消して、apiVersion, kind, metadataのname, specだけにする。
4, 作ったyamlでreplaceする
yamlが使えるgcloud run jobs replace
を使う
--helpはこんな感じ
NAME gcloud run jobs replace - create or replace a job from a YAML job specification SYNOPSIS gcloud run jobs replace FILE [--async] [--region=REGION] [GCLOUD_WIDE_FLAG ...] DESCRIPTION Creates or replaces a job from a YAML job specification. EXAMPLES To replace the specification for a job defined in myjob.yaml $ gcloud run jobs replace myjob.yaml POSITIONAL ARGUMENTS FILE The absolute path to the YAML file with a Cloud Run job definition for the job to update or create. FLAGS --async Return immediately, without waiting for the operation in progress to complete. --region=REGION Region in which the resource can be found. Alternatively, set the property [run/region].
2のリージョン、3のyamlファイルを指定して実行する
gcloud run jobs replace --region=your-region your-new-job-name_20230214.yml
完了したらコンソールで環境変数やらいろいろできてるか確認したり、コマンドを書き換えるなど必要なのをポチポチして完成。