GAミント至上主義

Web Monomaniacal Developer.

Google Cloud Run Jobsをコピーする

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 

完了したらコンソールで環境変数やらいろいろできてるか確認したり、コマンドを書き換えるなど必要なのをポチポチして完成。