アイレポGateway をDockerを使いAWS AppRunnerにデプロイしてみた

みなさんこんにちは。
自称アイレポエバンジェリストのmnrです。
ユーザー会でいつもお世話になっています。

ConMas i-Reporterアイレポを活用していますか?
一般的な機能でもたくさんの機能があるアイレポですが、カスタマイズや連携をする際にはアイレポのAPI を使う他にPythonでAIやビックデータやIOTなど様々な恩恵が得ることができるConMas Gatewayを使う方法があるかと思います。

ConMas Gateway はすごく良い。という噂は聞くけど、、。
どうやってるやるの?
気軽に出来ないの?
など展開の仕方に悩みがある方がいるかと思います。そんな方向けの記事です。

アイレポ Gatewayを活用するには

  • 情シスへのサーバーインストール依頼の敷居が高い
  • Python、Node.js のインストールの敷居が高い 

など活用する以前の壁があるかもしれません。

ConMas Gateway は Windows の他 Linux でも活用出来ると謳われております。
サポートサイトに ConMas Gateway のインストール方法がありますが Windows のインストールのみですので、もっと手軽に展開する方法として Docker を使い本番サーバーへの展開方法として最近リリースされ話題の AWS の AppRunner へのデプロイを試してみました。

今回の記事は Docker を活用してローカルで開発を行ない、その Docker をそのままの形で活用出来る AWS の AppRunner を使ってみます。

注意事項
この記事をもとに作られた仕組みで不利益を被っても一切責任は持てません
株式会社シムトップスとしてサポートをしている内容ではございません

まずは下記の記事等を参考に Docker のインストールを済ませましょう。

※Docker インストール方法

まずサポートサイトから Gateway 一式をダウンロードし、一番上の gateway というフォルダをルートディレクトリとしてVisualStudioCode で開きます。
gatewayというフォルダをドラッグアンドドロップでVisualStudioCodeでルートディレクトリとして開くことも出来ます。

さて Gateway はサポートサイトからダウンロードしますとこのようなフォルダ構成になっておりDockerfileとrequirements.txtは今回の記事用に生成しています。

├── 📂actions
├── 📂config
├── 📂ex
├── 📂logs
├── 📂modules
├── 📂node_modules
├── 📂scripts
├── 📂sql
├── 📂uploads
├── Dockerfile
├── index.js
├── package-lock.json
├── package.json
└── requirements.txt

Gateway は Node.js と Python の双方の実行環境を必要とします。
本来は自分のパソコンで使用するには Node.js と Python というプログラミング言語をインストールする必要があります。
しかし、今回は Docker という仕組みを使用してパソコン内にコンテナというものを作成しその中で Node.js と Python を操ります。
このようにすることで自分のパソコンの環境を汚さず色々なプログラミング言語やプログラムを試すことが出来るというメリットがDockerにはあります。

まずrequirements.txtというファイル名を VSCODE で作ります。

これは Python のパッケージ(ライブラリ)をpipで管理している場合、設定ファイルrequirements.txtを使って指定のパッケージを指定のバージョンで一括インストールすることができる便利なファイルです。
その際プロジェクトのルートフォルダにファイルを置くことが注意点です。

matplotlib
qrcode
Image
python-barcode
pandas
xlrd
requests
Japanera
psycopg2
opencv-contrib-python-headless

次にDockerfileというファイル名を VSCODE で作り下部のコードを貼り付けます。
先程と同じくプロジェクトのルートフォルダにファイルを置くことが注意点です。

FROM nikolaik/python-nodejs
WORKDIR /usr/src/app
COPY package*.json ./
COPY requirements.txt ./
RUN pip install -r requirements.txt
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]

1 行目のFROM nikolaik/python-nodejsは、Node.js と Python 両方使える Docker コンテナイメージを使うよ。ということです。
今回はDockerfileがスッキリするためスターの数や他の記事を参考に、こちらのイメージを使用することにしました。

実際にはプロジェクトにあった設定を行いましょう。
今回は理解を優先するため簡易的なものです。

新しいターミナルを開きコマンドを叩きます。今回はVSCODE上でターミナルを開きます。

docker build -t gateway .

このコマンドはdockerというコマンドを使用し先程のDockerfileというファイルを使用してコンテナイメージを作る(ビルド)ということです。
※もしdockerというコマンドが使用できない場合Google等で検索することで解決はできるかと思います。

  • -t でgatewayという名前の docker のコンテナイメージを作るという意味です。
  • docker build -t gateway . このドットが先程のDockerfileを使うという意味です。

今までの作業(ビルド)を行うと以下のように DockerDesktop 上に gateway というコンテナイメージが作成されます。

docker image ls

でも同様の結果が得られます。

続いて以下のコマンドをターミナルで叩きます。

docker run -d --name gateway --rm -p 3000:3000 gateway
docker container ls

でも同様の結果が得られます。

これは先程作成したgatewayという名前の docker コンテナイメージからgatewayという名前の docker コンテナを作成するという意味です。

  • –rmオプションはコンテナ停止時にコンテナを削除するという意味です。
  • -pオプションはローカル上とdocker上のポートを3000番にあわせています。

※Docker イメージとコンテナの違い

これでdockerによるgatewayの開発環境が構築が出来ました。思ったより簡単じゃないでしょうか?
では正しく作成出来ているかcurlというコマンドを使用しテストしてみます。

curl http://localhost:3000/api/v1/getvalue/test --header 'Authorization: Bearer nihuidoaanca88'

以下のような結果が返ってき来たら成功です。※jqというコマンドで見やすくしています。

{
  "result": {
    "code": 0,
    "description": "Success!!!"
  },
  "apply": [
    {
      "item": "text",
      "sheet": 1,
      "cluster": 0,
      "type": "string",
      "value": "ABC"
    }
  ]
}

i-Reporterで試す場合

アイレポで試す場合はDesigner上でGatewayのアクションクラスターを用意し上記のurlを設定することで1枚目のシートのクラスターindexの0番目の値がABCとgatewayから入力されます。


以下のコマンドで作成したコンテナを停止します。停止とともにコンテナ自体も削除されます。※イメージは残ります。

docker stop gateway   

さて、ここまででローカルでのgatewayの開発環境が構築することが出来ました。
実際のローカルの開発ではコードを変更したらdocker buildを行うことを繰り返します。

i-Reporterでウインドウズ端末と開発端末が同様の場合ローカルでlocalhost通信が届きますので。
Designer上でアクションクラスターでGateway設定をすればこれで十分なテストが出来るようになります。

でも、ローカルのままですと現場からの通信が届きません。
そこで今回は今作ったdockerコンテナイメージをAWSのAppRunnerというサービスを活用してみます。

まず今回作成したgatewayのオリジナルのDockerイメージをAWS用のリポジトリの登録先であるAmazonECRのページへ行きます。
マネージメントコンソールからECRと検索しAmazonECRのページへ行きます。

リポジトリを作成をクリックします。
※東京リージョンが望ましいです。

リポジトリ名をgatewayとしプライベートを選択後リポジトリを作成をクリックします。
その他の設定は今回は何も設定していません。

一覧に戻り画面上部に正常に作成されたという緑色のバーが現れます。

作成したgatewayリポジトリをチェックいれた状態でプッシュコマンドの表示をクリックします。

以下のようにローカルで実行する1から4までのコマンドが表示されます。
これ通りにコピーして使用するだけでAWS上にGatewayのDockerファイルが登録出来ます。
とっても簡単ですね!

AWS CLIをインストールとECRの認証方法

表示されたコマンドどおりにコマンドを叩きます。
ECRへのpushはしばらく時間がかかります。

アップロードが完了したら続いてはAppRunnerです。

その前に一覧上でURIをコピーしておきます。後ほど使用します。

※AWS APP RUNNER とは

マネージメントコンソールからAppRunnerと検索しAppRunnerへ行きサービスの作成をクリックします。

先程コピーしたコンテナイメージのURIを貼り付けます。コンテナレジストリを選択しデプロイ設定は楽をしたいため自動を選択しAppRunnerECRAccessRoleを選択し次へを押します。

サービス名をgatewayとしポートを3000番ポートにしました。

最終確認を行ない作成とデプロイを押します。

うまく行くとステータスがRunningとなります。
これだけで完成です!え??すごい。

デフォルトドメインで表示されたリンクをコピーしテストします。
※アドレスはそれぞれ違います。以下を修正してテストしましょう。

curl https://hogehoge.ap-northeast-1.awsapprunner.com/api/v1/getvalue/test --header 'Authorization: Bearer nihuidoaanca88'

ローカルと同様の以下のような結果が返ってき来たら成功です。※jqというコマンドで見やすくしています。

{
  "result": {
    "code": 0,
    "description": "Success!!!"
  },
  "apply": [
    {
      "item": "text",
      "sheet": 1,
      "cluster": 0,
      "type": "string",
      "value": "ABC"
    }
  ]
}

いかがでしたでしょうか?
AppRunnerを利用することでインフラ設定(ネットワーク、オートスケーリング、ロードバランシング、SSL、CI/CDなど)これらをまとめて(隠蔽して)出来てしまいます。
ローカルで変更したらpushすることで自動でコードが反映されます。。すごい。。

Dockerは慣れないかもしれませんが、
ローカルの環境がそのまま本番でも展開出来ることの雰囲気とメリットがなんとなくつかめましたでしょうか?

同じような内容で一つのdockerイメージがあれば
AzureでもGCPでもHerokuでも同じようなステップでデプロイが可能になります。
ベンダーロックインされない。
これがDockerの魅力でもあります。

GatewayとDockerは相性がとてもよいと思います。
次回はherokuのコンテナ方法を紹介します。お楽しみにしてください。
ではレッツ愛レポ!

こちらのi-Reporterで◯◯してみたシリーズも是非ご確認ください。
i-ReporterのWeb APIをGoogle Apps Script(GAS)から利用する方法

導入社数4,000社以上!
ペーパレスアプリでの
シェアNo.1

i-Reporter

(アイレポーター)

使い慣れたエクセル帳票から
そのまま移行できる
現場帳票の電子化システム

3分で分かる資料ダウンロード

現場帳票のデジタル化相談してみる