mintak21 / line-bot

Repo For LINEBot

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LineBotのバックエンド3選

1. Heroku

Heroku上にサーバーを立てる。 Procfileを用意して、直接プロセスを実行する方法と、コンテナをビルド&デプロイする方法がある。 ここでは後者のコンテナデプロイの方法をとる。 IntegrationでGithub<->Heroku CD設定はカンタンに可能。ただし、ここでは逐一コマンド実行によって設定・デプロイを実行することとする。

Limitations

docker buildを実行する際のcontextの設定位置は、heroku側でDockerfileの配置されているディレクトリに固定されてしまうため、 それを加味したDockerfile記述、またはディレクトリ構成とする必要がある。

Directory

├── example/
│  └── python/
│     ├── config.py
│     ├── requirements.txt
│     └── server.py
├── heroku.yml
└── herokuDockerfile

Login Heroku CLI

heroku login # login via Web UI

Create Application

heroku create ${APP_NAME}

SetUp Container Stack

heroku stack:set container --app ${APP_NAME}

Setup Config Variables

heroku config:set ${ENV_NAME}=${ENV_VAR} --app ${APP_NAME}

Deploy specific branches

git push heroku ${BRANCH_NAME}:master

Utils

# Display Applications
heroku apps

# Display Logs
heroku logs --app ${APP_NAME}

# Restart Service
heroku ps:scale web=0 --app ${APP_NAME}
heroku ps:scale web=1 --app ${APP_NAME}

# Maintenance Mode
heroku maintenance:on --app ${APP_NAME}

Reference

2. GCP Cloud Functions

Tips

  • CloudRunとの使い分けはざっくり以下
    • KNative上でStatelessContainerを動かしたい場合はCloudRun
    • Pub/SubFirebaseをトリガーとしたい場合はCloudFunctions
    • そもそもCloudFunctionsで用意されていないランタイムで動かしたい場合は自動的にCloudRun

Reference

3. GCP Cloud Run

masterブランチへのpushを契機にGithubActionsのワークフローから、 CloudBuildでイメージビルド・レジストリpush・CloudRunデプロイを実施する。

リソースはTerraformで作成する。

Build and Deploy

# DeployはCloudBuildから行うため、yml内で定義
gcloud builds submit --config cloudbuild.yml --substitutions _DOCKER_IMAGE_TAG=${TAG}

Tips

Limitations

  • CloudBuildAPIを有効にした時点で、CloudBuildが使用するサービスアカウントは[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com固定で作成される。 しかし、このアカウントをTerraformで扱うことはできない(Issueが上がっている)ので、CloudRun権限追加は手動で行う必要がある。

Reference

About

Repo For LINEBot


Languages

Language:HCL 63.7%Language:Python 19.4%Language:Go 8.8%Language:Dockerfile 4.5%Language:Shell 2.6%Language:Makefile 0.9%