Google App Engineにサードパーティパッケージが必要なアプリのデプロイ
Google Cloud Platformに含まれていない言語・パッケージを使用するには、Dockerfileを使って定義したCustom Runtimes上で実行させる必要があります。
今回は、この記事で作ったDiscordのBotをApp Engineにデプロイするまでを記事にします。
Note:
このBotでは音声ファイルを扱うためサードパーティパッケージが必要
はじめる前に
事前に以下の作業が必要です。
詳細はここの「Before you begin」にあります。
- GCPプロジェクトの作成
- Google Cloud SDKのダウンロードとインストール
- App Engineアプリケーションの作成
app.yamlファイルを作成
Custom Runtimeを使用するにはapp.yaml
に以下の記述が必要です。
runtime: custom
env: flex
また、インスタンスの数を1つにするよう設定します。
manual_scaling:
instances: 1
Note:
インスタンスの数だけBotがコマンドに反応するので、複数インスタンスあるとカオス
全部あわせるとこんな感じに。
app.yaml
runtime: custom
env: flex
manual_scaling:
instances: 1
Dockerfileを作成
Dockerfile
はBotの作成記事で扱ったのでここでは詳細は割愛します。
Dockerfile
FROM ruby:2.3.3
WORKDIR /app
ADD . /app
RUN apt-get update
RUN apt-get install libopus-dev -y
RUN apt-get install libsodium-dev -y
RUN apt-get update && apt-get install -y \
wget \
xz-utils
RUN wget http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz \
&& tar Jxvf ./ffmpeg-release-64bit-static.tar.xz \
&& cp ./ffmpeg*64bit-static/ffmpeg /usr/local/bin/
RUN bundle install
CMD ["ruby", "team_bot.rb"]
Note:
Dockerfile
とapp.yaml
は同じディレクトリに配置する必要があります
App Engineにデプロイする
app.yaml
とDockerfile
の準備ができればあとは以下を実行すればデプロイできます。
$ gcloud app deploy
Future Work
GitLab CIからApp Engineに自動デプロイできるようにしようと考えてます。