Closed3

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

shichishichi

実行コマンドを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

が実行される。

shichishichi

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()
shichishichi

原理的には--argsで渡した引数によってDockerfileのCMDが上書きされている。下記のように記載することで、デフォルト値を設定することも可能。

ENTRYPOINT ["python", "main.py"]
CMD ["--size=10", "--seed=43"]

ENTRYPOINTCMDの違いや併用時の挙動は以下が分かりやすい。
https://qiita.com/hihihiroro/items/d7ceaadc9340a4dbeb8f

このスクラップは2024/12/30にクローズされました