はじめに
最近Dockerで楽にアプリケーション運用できる技術があるかを探しているのですが、その一環で、Convoxというサービスを見つけました。
今回は、Convoxを使って、サンプルのRailsアプリケーションを動作させるところまで試してみようと思います。
Convoxについて
概要
ざっくり説明すると、ConvoxとはAWS上でDockerアプリケーションを稼働させるためのPaaSのようなサービスです。Container Partners - Amazon Web Services (AWS)にも登録されています。
Convoxは、Dockerで構築されたアプリケーションをAWS上で稼働させるために最低限必要なAWSリソース(ネットワークやALB、ECS、RDS、IAM、etc)などを「Rack」というまとまりでCloudFormation経由で構築してくれます。
Rack構築後は、開発者はCLIでconvox deploy
といったデプロイコマンドを実行するだけで、アプリケーションがデプロイ出来るようになります。
またGUIのダッシュボードも用意されていて、複数のアプリケーションを稼働させたときも管理しやすい形になっています。
Convoxの利用イメージはvimeoにアップされていますので併せてご確認ください。
Convox Developer Experience on Vimeo
Rackについて
ConboxにおけるRackとは、アプリケーションをデプロイするために必要なプラットフォームのことを指します。
上記ドキュメントに詳しく説明されていますが、内容について意訳してみます。
Convox Rack is an open source deployment platform that is installed into your AWS account. A Rack creates and manages all of the underlying infrastructure needed to run and monitor your applications. A Rack is the unit of network isolation – applications and services on a Rack can only communicate with other applications and services on the same Rack.
(意訳) Convox Rackとは、AWSアカウントにインストールされたオープンソースのデプロイプラットフォームです。Rackはアプリケーションの稼働・監視に必要な基礎となる全ての基盤を構築・管理します。Rackはネットワーク的に独立した - Rack上のアプリケーションやサービスは同じRack上にある別アプリケーションやサービスとのみ通信出来る - ユニットです。
オープンソースということで、Rackを構築する仕組みはGithub上に公開されています。
Rackの構成図もドキュメントに載っています。ConvoxのCLIからはAPI Gateway経由でRackと通信し、アプリケーションはELB経由でインターネットから公開される形になっているようです。
Image: https://convox.com/docs/rack/
Convoxの費用
監査ログ保持期間やサポート対応の厚さで費用が変わってくるようです。
- Developer: 無料(1ユーザーのみ)
- Basic: $59/user
- Pro: $129/user
- Enterprise: 要相談
検証の記録
前置きが長くなってしまいましたが、今回はConvoxにアカウント登録して、サンプルのRailsアプリケーションを動作させるところまで試してみようと思います。
検証の前提
以下の手順は、AWSアカウントがあることを前提にします。
またこちらの手順を一通りやると、CloudFormation経由でAWSのリソースを幾つか立ち上げることになるため、多少コストがかかると思います。
検証後すぐにStackを削除すれば数ドル程度になると思いますので、課金対応は忘れずにお願いします。
検証の進め方
下記ドキュメントに載っている手順に沿って検証を進めます。
検証の手順
1. Convoxアカウント登録
まず下記URLからアカウント登録します。登録したらConvoxのダッシュボードにアクセスします。
2. Create Organization
まずOrganizationを作成します。Organizationは複数のRackを包含する概念というイメージです。
[Create Organization]をクリックします。
Organization名を入力し、[Create]をクリックして作成します。
3. Connect an AWS account
次にConvoxとAWSアカウントを連携します。[Connect an AWS account]をクリックします。
[AWS Integration]画面に移ります。ここでいずれかの方法を用いて、ConvoxとAWSアカウント連携のためのIAMRoleを作成します。
- 1度だけ使うAccessKeyを登録し、IAMRoleを作成
- AWS CLI経由でIAMRoleを作成
AWS CLI経由で作成するほうがセキュアだと思いますが、ここでは手順簡略化のため、AccessKeyの方法を取りました。
※作成後、ここで利用したAWSのAccessKeyは利用不可ないしは削除しておくのを忘れないようにしましょう!!
作成されるIAMRoleで利用されるIAMポリシーを見てみるとこんな感じでした。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"iam:*"
],
"Resource": [
"arn:aws:iam::*:instance-profile/convox/*",
"arn:aws:iam::*:policy/convox/*",
"arn:aws:iam::*:role/convox/*",
"arn:aws:iam::*:user/convox/*"
]
},
{
"Effect": "Allow",
"Action": [
"iam:GetServerCertificate",
"iam:ListServerCertificates",
"iam:UploadServerCertificate"
],
"Resource": [
"*"
]
}
]
}
4. Launch a private PaaS
Dockerによるアプリケーションを稼働させるための基盤となる、Rackを作成します。
[Launch a private PaaS]をクリックします。
すると[Install New Rack]画面に移るので、フォームに必要な情報を入力していきます。
Nameを入力し、Regionを選択します。
また、「Advanced Network and Compute Options」をクリックすると詳細設定が開きますので、そちらでネットワークやEC2インスタンスタイプなど詳細な設定ができるようです。
ちなみにInstance Countがmin:3になっており、最低3台作成が必要のようです。3台以下にしたら下記のようなバリデーションエラーが表示されます。
今回は検証ですので、特に設定を変更せずに、[Install Convox]をクリックします。
インストールの進捗画面に移ります。
AWS側ではCloudFormationスタックが作成されているようです。
Rackの作成が完了したら、statusが緑色で[running]になります。
5. Connect the Convox CLI
Rackが作成できたら、CLIからConvoxを操作できるように、ConvoxのCLIをインストールします。
[Connect the Convox CLI]をクリックします。
遷移した画面で、[First, Install the Convox CLI]をクリックします。
クリックすると、下記リンクのConvox CLIのインストールのドキュメントに遷移します。Mac/Linux/Windowsどれも対応しているようです。
僕ばMacOSXのHomeBrewでパッケージ管理しているので、下記でインストールしました。
$ brew install convox
$ convox update
Convoxの画面に戻ると、AdministratorのAPI Keyが表示されています。(画像キャプチャではマスクしています)
こちらを控えておき、Convox CLIでログインします。成功すれば「Logged in successfully.」と表示されます。
$ convox login console.convox.com -p <API Key>
Logged in successfully.
その後、convox racks
コマンドで作成したRackを確認できます。今は前の手順で作成したRackが一つだけ表示されます。
$ convox racks
RACK STATUS
gotchane-org/production-sample running
6. Deploy an App
アプリのデプロイをしてみましょう。
[Deploy an App]をクリックします。
クリックするとこちらのリンクに遷移します。convoxのサンプルRailsアプリケーションをデプロイする例ですね。
Deploy to Convox - Getting Started
サンプルRailsアプリケーションをgitからクローンします。
$ git clone https://github.com/convox-examples/rails
$ cd rails
convoxのアプリケーションを作成します。
$ convox apps create
Creating app rails... CREATING
下記コマンドでアプリケーションの起動中であることが確認できます。
$ convox apps info
Name rails
Status running
Generation 2
Release
ConvoxのGUIからもアプリケーションの起動が確認できます。
この時点ではConvoxにアプリケーションの情報が登録された段階であり、デプロイはまだされていませんので、下記コマンドでアプリケーションをデプロイします。(標準出力のハッシュ値はマスクしています)
DockerFileのビルドが走り、AWSのElastic Container Registryにイメージをpushしている挙動が確認できます。
$ convox deploy
Deploying rails
Creating tarball... OK
Uploading: 949.64 KiB / 949.47 KiB [=====================] 100.02% 2s
Starting build... OK
Authenticating 000000000000.dkr.ecr.us-east-1.amazonaws.com: WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
building: .
running: docker build -t 0000000000000000000000000000000000000000 -f /tmp/000000000/Dockerfile /tmp/000000000
Sending build context to Docker daemon 645.6kB
Step 1/10 : FROM convox/rails:2.5.0
---> 000000000000
Step 2/10 : COPY Gemfile ./
---> Using cache
---> 000000000000
Step 3/10 : COPY Gemfile.lock .
---> Using cache
---> 000000000000
Step 4/10 : RUN bundle install
---> Using cache
---> 000000000000
Step 5/10 : COPY Rakefile /app/Rakefile
---> Using cache
---> 000000000000
Step 6/10 : COPY config /app/config
---> Using cache
---> 000000000000
Step 7/10 : COPY public/ .
---> Using cache
---> 000000000000
Step 8/10 : COPY ./app/assets/ /app/app/assets
---> Using cache
---> 000000000000
Step 9/10 : RUN rake assets:precompile
---> Using cache
---> 000000000000
Step 10/10 : COPY . .
---> Using cache
---> 000000000000
Successfully built 000000000000
Successfully tagged 0000000000000000000000000000000000000000:latest
running: docker tag 0000000000000000000000000000000000000000 convox/rails/web:00000000
running: docker tag convox/rails/web:00000000000 000000000000.dkr.ecr.us-east-1.amazonaws.com/produ-regis-xxxxxxxxxxxxx:web.XXXXXXXXXXX
pushing: 000000000000.dkr.ecr.us-east-1.amazonaws.com/produ-regis-xxxxxxxxxxxxx:web.XXXXXXXXXXX
Release: XXXXXXXXXXX
Promoting XXXXXXXXXXX... UPDATING
アプリケーションのステータスが「running」になっていることを確認します。
アプリケーションのエンドポイントは、アプリケーション名のリンクをクリックすると画面右側に[Endpoints]が表示されるので、HTTPS/HTTPいずれかでアクセスできるようになります。
Railsのサンプルアプリケーションの画面が表示されればOKです。
7. Uninstall Convox
検証が終わったら、下記ドキュメントを参考にRackを削除しましょう。
もし削除に失敗した場合は、Convoxに関連するCloudFormationスタックを手動削除しましょう。
Uninstalling Convox
触ってみた所感
- CLIをベースにdockerアプリケーションを簡単にデプロイできたので、CLIベースでDockerアプリケーションの開発・デプロイをするユースケースには合いそうな気がする
- CLI操作が主になるので、APIキーをローカルに保持するのがマストになる。APIキーの権限は、Administrator/Developer/Operator程度の色分けはつけられる模様(参考: Access Control - Convox)
- Rackの構築状況はConvoxのGUIからだとステータスしか確認できないので、うまくいかない場合は結局CloudFormationの作成状況を見に行く必要があった
- Convoxの他の機能を確認したい場合は、Convox Documentationを見に行くのが近道な気がする
終わりに
今回は初歩的な部分を触ってみましたが、便利だなと思うところもあれば、Herokuなどのようにアプリケーションレイヤ以下がマネージドでない分、注意して触る必要があるところもありました。
ただドキュメントを読むとGithubやSlackとの連携、CloudWatch経由の監視などもあり、他にも機能が色々あるみたいなので、機会があれば試してみようと思います。