初回CloudRunJob起動確認

This commit is contained in:
ry.yamafuji 2025-12-05 10:49:58 +09:00
parent 27c1c461e8
commit 6cb9f550f7
6 changed files with 163 additions and 18 deletions

19
Dockerfile Normal file
View File

@ -0,0 +1,19 @@
FROM python:3.12-slim
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
curl
# pythonパッケージのインストール
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# 作業ディレクトリを設定
WORKDIR /app
# アプリケーションコードをコピー
COPY ./src /app
# コンテナ起動時に実行されるコマンドを指定
CMD ["python", "main.py"]

View File

@ -0,0 +1,61 @@
# エージェントへの目的
`terraform`フォルダを確認して`readme/components_design`フォルダに
.drawioファイル(XML形式)で作成してください
## 役割
あなたはシステム構成を考える専門家です。
## 規約
【要件】
* 出力ファイルは`system_components.drawio`としてください。
* リクエストに指定がない場合は環境変数は`_dev.tfvars`を優先してください。
* サービスアカウントやロールなどは記載しなくて良い。
* **重要**terraformに存在しないコンポーネントは使用しないこと
* ユーザーが利用するコンポーネント図と、開発者が利用するコンポーネント図は分離してください
【レイアウト要件】
- Region、VPCを大きな枠で表現
- Region: 最も外側の枠として配置
- VPC: Regionの内側に配置
- 接続線が重ならないよう、コンポーネントを階段状に配置
- 各コンポーネント間の間隔を100px以上確保
- ユーザーはVPCの外側に配置インターネット経由でアクセスする想定
- コンポーネントは左から右に向かってデータフローを表現User → Frontend → Backend → Database
【スタイル要件】
**枠のスタイル:**
- VPC: `fillColor=#D5E8D4;strokeColor=#82b366;dashed=1;verticalAlign=top;fontStyle=1;fontSize=14`
- Region: `fillColor=#E1F5FE;strokeColor=#01579B;dashed=1;verticalAlign=top;fontStyle=1;fontSize=14`
- 枠のラベルは左上に配置(`align=left;spacingLeft=10;spacingTop=5`
**接続線:**
- 双方向通信: `endArrow=classic;startArrow=classic;strokeWidth=2`
- 単方向通信: `endArrow=classic;strokeWidth=2`
- HTTPSアクセス: `strokeColor=#4285F4`(青)
- データベース接続: `strokeColor=#DB4437`(赤)
- ストレージアクセス: `strokeColor=#34A853`(緑)
- 接続線にラベルを付ける(例: "HTTPS", "API", "SQL"
【座標とサイズの目安】
- Region枠: 幅800-1000px、高さ500-700px
- VPC枠: Region内部で余白50px程度、幅700-900px、高さ400-600px
- コンポーネントアイコン: 78x78 または 80x80
- コンポーネント間の横間隔: 150-200px
- コンポーネント間の縦間隔: 100-150px
**アイコン:**
- ユーザー/クライアントアイコン
- `shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.user`(共通で使用可能)
- コンポーネントのアイコンについて以下のマップを参考にしてください
- 以下のアイコンを使用する場合、必ず対応する mxCell テンプレートを使用すること。
- id / x / y / width / height / parent などは適宜書き換えて構いません。

View File

@ -1,11 +1,76 @@
# デプロイの方法について
## インストール方法
MACの場合
```sh
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
# 確認
terraform -version
```
## 環境について
* terraform
* google cloud
* Cloud Run Job
## 実行する方法
```sh
# 初期化を実行する
cd terraform
# Terraformの初期化
terraform init
# アーティファクトやバケットについては先に生成する
terraform apply \
-var-file=_dev.tfvars \
-auto-approve \
-target="google_artifact_registry_repository.repo"
# DockerファイルをビルドしてGARにプッシュする場合
cd ../
# 1. Artifact Registryへの認証設定(初回のみ実行)
source deploy.env
gcloud auth configure-docker "${AR_REGION}-docker.pkg.dev"
# arm64
source deploy.env
gcloud builds submit --tag "${IMAGE_URI}" .
echo "${IMAGE_URI}"
# デプロイするコンポーネントを確認する
cd terraform
terraform plan \
-var-file=_dev.tfvars \
-var="hash_suffix=${HASH_SUFFIX}"
# デプロイを実行する
terraform apply \
-var-file=_dev.tfvars \
-var="hash_suffix=${HASH_SUFFIX}" \
-auto-approve
```
ローカルでビルドで試す場合
```sh
# デフォルトでビルドする場合
docker build -t cloud-run-job-base .
# arm64でビルドしたい場合
docker buildx build -platform linux/amd64,linux/arm64 -t cloud-run-job-base .
# Dockerを実行する(1回だけ実行してコンテナインスタンスを削除する場合)
docker run --rm cloud-run-job-base:latest
```
### CI/CDでデプロイを実行する場合
**Github(Gitea) Acrtionsで実行する場合**
**Cloud Buildで実行する場合**
### Big Quderyにデータが取得できた場合をトリガーにしてJOBを実行する方法

View File

@ -1,30 +1,29 @@
# Cloud Run Jobのリソース
resource "google_cloud_run_job" "job" {
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_job
resource "google_cloud_run_v2_job" "job" {
name = "${var.job_name}-${var.env_name}-job"
location = var.region
#
service_account = google_service_account.job_sa.email
template {
template {
containers {
image = var.container_image
#
service_account = google_service_account.job_sa.email
containers {
image = "${var.region}-docker.pkg.dev/${var.project_id}/cicd-repo-${var.env_name}/run-job-${var.job_name}-image:${var.hash_suffix}"
resources {
limits = {
cpu = var.cpu_limit
memory = var.memory_limit
}
}
# env {
#
# name = "ENV_VAR_NAME"
# }
}
timeout_seconds = var.timeout_seconds
timeout = var.timeout
}
}
}

View File

@ -7,4 +7,4 @@ job_name = "ジョブ名を指定してください"
cpu_limit = "1"
memory_limit = "512Mi"
timeout_seconds = 900
timeout = "1800s"

View File

@ -26,10 +26,11 @@ variable "job_name" {
}
# (CI/CDから渡される想定)
variable "container_image" {
# (CI/CDから渡される想定)
variable "hash_suffix" {
description = "The container image for the Cloud Run Job."
type = string
default = null
}
@ -46,8 +47,8 @@ variable "memory_limit" {
default = "512Mi"
}
variable "timeout_seconds" {
description = "The timeout for the Cloud Run Job."
type = number
default = 300
variable "timeout" {
description = "The task timeout in seconds for the Cloud Run Job."
type = string
default = "1800s"
}