GreengrassのDocker application deployment connectorを使ってコアデバイスにコンテナをデプロイしてみた
CX事業本部@大阪の岩田です。Greengrass Core1.10から利用可能になったDockerアプリケーションのデプロイコネクタを試してみました。
環境
今回利用した環境です
- OS: Amazon Linux2 (ami-011facbea5ec0363b)
- Greengrass Core: 1.10
- Docker: 18.09.9-ce
Docker application deployment connectorとは?
GreengrassのコアデバイスにDockerベースのアプリケーションをデプロイするための機能です。S3に配置したDocker Composeファイルを利用してコアデバイスにDockerコンテナをデプロイすることができます。コンテナのリポジトリにはDocker Hub以外にもECR等のプライベートリポジトリを使用することも可能です。
やってみる
実際にDocker application deployment connectorを使ってみましょう。今回はコアデバイスにPostgresqlのコンテナをデプロイしてみます。
コアデバイスのセットアップ
今回はEC2をコアデバイスとして利用します。こちらのブログを参考にセットアップを行います。
一通りセットアップできたらDocker application deployment connectorを利用するための追加セットアップを行います。まずPython3.7とDockerをインストールします。
sudo yum install python3 docker
Dockerがインストールできたら、Docker application deployment connectorを実行するためのユーザーをdockerグループに追加します。今回は手抜きをしてGreengrass Core用のユーザーggc_userをそのままDocker application deployment connector用のユーザーとして利用します。本番利用の際はきちんと別ユーザーを作成しましょう。
sudo usermod -aG docker ggc_user
Dockerの自動起動を有効化し、サービスを起動します
sudo systemctl enable docker.service sudo systemctl start docker.service
Docker Composeもインストールします
sudo pip3 install docker-compose
後ほどデプロイを実行した際にS3からDocker ComposeファイルをDLし、コアデバイスのローカルに保存する必要があります。適当なディレクトリを用意し、Docker application deployment connector用のユーザー(今回はggc_user)がアクセスできるように権限を付与します。
sudo mkdir /greengrass/ggc/data/ sudo chown ggc_user:ggc_group /greengrass/ggc/data/
Docker Composeファイルの準備
続いてDocker Composeファイルを作成します。
version: '3' services: db: image: postgres:latest ports: - "5432:5432"
作成したDocker Composeファイルはどこか適当なS3バケットにアップしておきます。
aws s3 cp docker-compose.yml s3://<適当なS3バケット>
Greengrassロールの準備
GG Coreを実行するためのIAMロールを作成し、先程S3にアップしたDocker Composeファイルにアクセスできるように以下のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::<Docker ComposeファイルをUPしたS3バケット>/*" } ] }
準備ができたら作成したIAMロールをGreengrassグループに割り当てます。
コネクタの設定
一通り準備ができたので、Greengrassグループにコネクタを追加してデプロイしてみます。まずコネクタにDocker Application Deploymentを選択します。
続いて必要な設定値を入力します
- Docker Compose file in S3には先程アップしたDocker Coposeファイルを選択
- Directory path for local Compose fileには先程作成したディレクトリ
/greengrass/ggc/data/
を指定します
最低限必要な設定値はこれだけです。
設定完了です。Greengrassグループのデプロイを実行し、コネクタをデプロイします。
動作確認
デプロイが完了したらコアデバイスのEC2上でコンテナが稼働していることを確認してみましょう。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9dfd108bea81 postgres:latest "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:5432->5432/tcp greengrassdockerapplicationdeployment_db_1
動いてますね。試しにpsqlで接続してみましょう。
$ psql -h localhost -U postgres psql (9.2.24, server 12.1 (Debian 12.1-1.pgdg100+1)) WARNING: psql version 9.2, server version 12.0. Some psql features might not work. Type "help" for help. postgres=#
バッチリです!
まとめ
Docker application deployment connectorのご紹介でした。今回紹介したようにローカルLambdaから接続するためのDBをデプロイしたり、ローカルLambdaの代わりにエッジ側でビジネスロジックを実行するためのアプリケーションコンテナをデプロイしたり、、、といった感じで色々と構成の幅が広がりそうです。エッジ側でDocker Composeまで動かすのはスペック的にハードルが高そうな気もしますが、ラズパイ4などは十分なスペックを備えているので、今後はDockerベースのアプリをエッジ側に配置するという選択肢も頭に置いておきたいです。