Closed3
[Python] Cloud Run Jobsで実行時に引数を渡したい

実行コマンドをDockerファイルのENTRYPOINT
に設定する。
ENTRYPOINT ["python", "main.py"]
ジョブ実行時に--args
で指定した引数をENTRYPOINT
に渡すことができる。複数渡したい場合はカンマ区切りでOK。
$ gcloud run jobs execute sample-job \
--region $DEFAULT_COMPUTE_REGION \
--args="--size=10,--seed=43"
上記の場合は、
$ python main.py --size=10 --seed=43
が実行される。

Python側ではコマンドライン引数の受け取りを実装する。
ここではtyper
を使ってみる。宣言的で書きやすい。
main.py
import os
from typing import Optional
import typer
TASK_INDEX = os.getenv("CLOUD_RUN_TASK_INDEX", 0)
TASK_ATTEMPT = os.getenv("CLOUD_RUN_TASK_ATTEMPT", 0)
# Typerアプリケーションの作成
app = typer.Typer(help="サンプルプログラム")
@app.command()
def main(
size: Optional[int] = typer.Option(
100,
"--size",
help="サイズパラメータ",
min=1,
show_default=True,
),
seed: Optional[int] = typer.Option(
42,
"--seed",
help="乱数シード",
show_default=True,
),
) -> None:
...
if __name__ == "__main__":
app()

原理的には--args
で渡した引数によってDockerfileのCMD
が上書きされている。下記のように記載することで、デフォルト値を設定することも可能。
ENTRYPOINT ["python", "main.py"]
CMD ["--size=10", "--seed=43"]
ENTRYPOINT
とCMD
の違いや併用時の挙動は以下が分かりやすい。
このスクラップは2024/12/30にクローズされました