🚀
FastAPI × GitLab × GCPで自動デプロイ(CI/CD)を構築する
実装内容
ローカルで作成したAPIをGitlabにプッシュ・マージされたらCI/CDが走り、自動デプロイされる。
GCPのCloud Buildを経由してCloud Runにデプロイします。
前提条件
- FastAPI(Python)でAPIを実装している。
- Gitlabを使用している。
- GCPに登録している。
全体の流れ
- Dockerfileを作成する。
- cloudbuild.yamlを作成する。
- .gitlab-ci.ymlを作成する。
1. Dockerfileを作成する
まず初めにローカル環境のルートディレクトリ直下にDockerfileを作成し、中身を記述して行きます。
今回は以下のような内容を記載しました。
Dockerfile
FROM python:3.9
COPY ./requirements.txt .
RUN pip install fastapi uvicorn
EXPOSE 8080
RUN pip install -r requirements.txt
COPY ./app /app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]
2. cloudbuild.yamlを作成する
ルートディレクトリ直下にcloudbuild.yamlを作成します。内容は以下を記述しました。
参考記事
SERVICE_NAMEとPROJECT_IDとIMAGEはGCPにてご確認の上、ご入力ください。
cloudbuild.yaml
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
# Push the container image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
# Deploy container image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: gcloud
args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'asia-northeast1']
options:
pool:
name: 'projects/PROJECT_ID/locations/asia-northeast1/workerPools/api-ci-cd'
images:
- "gcr.io/PROJECT_ID/IMAGE"
3. .gitlab-ci.ymlを作成する
最後に.gitlab-ci.ymlを作成します。同じくルートディレクトリ直下でOKです。
ファイルを作成、中身を記述した後にGitlabに変数(GCP_SERVICE_KEYとGCP_PROJECT_ID)を登録します。
.gitlab-ci.yml
image: docker:latest
stages:
- deploy
deploy:
only:
refs:
- dev
stage: deploy
image: google/cloud-sdk
script:
- echo $GCP_SERVICE_KEY # Google Cloud service accounts
- cp $GCP_SERVICE_KEY gcloud-service-key.json
- gcloud auth activate-service-account --key-file gcloud-service-key.json
- gcloud projects list
- gcloud config set project $GCP_PROJECT_ID
- gcloud builds submit . --config=cloudbuild.yaml
after_script:
- rm gcloud-service-key.json
Gitlabに変数を登録します。
$GCP_PROJECT_IDは、GCPのダッシュボードで確認できるプロジェクトIDのことです。
$GCP_SERVICE_KEYはGCPのIAMと管理>サービスアカウントの項目にてサービスアカウントを作成します。
そして作成したサービスアカウントに対するJSONキーを作成し、GitlabにJSONキーの中身をコピペします。
GCP_SERVICE_KEYの作成の参考
以上の作業が終了したら、Gitlabにプッシュ・マージします。
CI/CDが成功したら以下の画面が確認できます。
念の為、GCPのCloud Buildのビルド履歴を確認、さらにCloud Runが正常に動作しているかを確認しておきましょう。
お疲れ様でした。
Discussion