Ruby
docker
AppEngine
discord

Google App Engineにサードパーティパッケージが必要なアプリのデプロイ

Google App Engineにサードパーティパッケージが必要なアプリのデプロイ

Google Cloud Platformに含まれていない言語・パッケージを使用するには、Dockerfileを使って定義したCustom Runtimes上で実行させる必要があります。

今回は、この記事で作ったDiscordのBotをApp Engineにデプロイするまでを記事にします。

Note:
このBotでは音声ファイルを扱うためサードパーティパッケージが必要

はじめる前に

事前に以下の作業が必要です。
詳細はここの「Before you begin」にあります。

  1. GCPプロジェクトの作成
  2. Google Cloud SDKのダウンロードとインストール
  3. 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を作成

DockerfileBotの作成記事で扱ったのでここでは詳細は割愛します。

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:
Dockerfileapp.yamlは同じディレクトリに配置する必要があります

App Engineにデプロイする

app.yamlDockerfileの準備ができればあとは以下を実行すればデプロイできます。

$ gcloud app deploy

Future Work

GitLab CIからApp Engineに自動デプロイできるようにしようと考えてます。