LoginSignup
8
5

More than 5 years have passed since last update.

AWS上でPaaSっぽくDockerアプリケーションを動かせるConvoxというサービスを触ってみた

Last updated at Posted at 2018-05-06

はじめに

最近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.png

Image: https://convox.com/docs/rack/

Convoxの費用

監査ログ保持期間やサポート対応の厚さで費用が変わってくるようです。

  • Developer: 無料(1ユーザーのみ)
  • Basic: $59/user
  • Pro: $129/user
  • Enterprise: 要相談

参考:Convox Pricing

検証の記録

前置きが長くなってしまいましたが、今回はConvoxにアカウント登録して、サンプルのRailsアプリケーションを動作させるところまで試してみようと思います。

検証の前提

以下の手順は、AWSアカウントがあることを前提にします。

またこちらの手順を一通りやると、CloudFormation経由でAWSのリソースを幾つか立ち上げることになるため、多少コストがかかると思います。

検証後すぐにStackを削除すれば数ドル程度になると思いますので、課金対応は忘れずにお願いします。

検証の進め方

下記ドキュメントに載っている手順に沿って検証を進めます。

検証の手順

1. Convoxアカウント登録

まず下記URLからアカウント登録します。登録したらConvoxのダッシュボードにアクセスします。

image.png

2. Create Organization

まずOrganizationを作成します。Organizationは複数のRackを包含する概念というイメージです。

[Create Organization]をクリックします。

image.png

Organization名を入力し、[Create]をクリックして作成します。

image.png

3. Connect an AWS account

次にConvoxとAWSアカウントを連携します。[Connect an AWS account]をクリックします。

image.png

[AWS Integration]画面に移ります。ここでいずれかの方法を用いて、ConvoxとAWSアカウント連携のためのIAMRoleを作成します。

  • 1度だけ使うAccessKeyを登録し、IAMRoleを作成
  • AWS CLI経由でIAMRoleを作成

image.png

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]をクリックします。

image.png

すると[Install New Rack]画面に移るので、フォームに必要な情報を入力していきます。

image.png

Nameを入力し、Regionを選択します。

また、「Advanced Network and Compute Options」をクリックすると詳細設定が開きますので、そちらでネットワークやEC2インスタンスタイプなど詳細な設定ができるようです。

ちなみにInstance Countがmin:3になっており、最低3台作成が必要のようです。3台以下にしたら下記のようなバリデーションエラーが表示されます。

image.png

今回は検証ですので、特に設定を変更せずに、[Install Convox]をクリックします。

インストールの進捗画面に移ります。

image.png

AWS側ではCloudFormationスタックが作成されているようです。

image.png

Rackの作成が完了したら、statusが緑色で[running]になります。

image.png

5. Connect the Convox CLI

Rackが作成できたら、CLIからConvoxを操作できるように、ConvoxのCLIをインストールします。
[Connect the Convox CLI]をクリックします。

image.png

遷移した画面で、[First, Install the Convox CLI]をクリックします。

クリックすると、下記リンクのConvox CLIのインストールのドキュメントに遷移します。Mac/Linux/Windowsどれも対応しているようです。

Installing the Convox CLI

僕ばMacOSXのHomeBrewでパッケージ管理しているので、下記でインストールしました。

$ brew install convox
$ convox update

image.png

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]をクリックします。

image.png

クリックするとこちらのリンクに遷移します。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からもアプリケーションの起動が確認できます。

image.png

この時点では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」になっていることを確認します。

image.png

アプリケーションのエンドポイントは、アプリケーション名のリンクをクリックすると画面右側に[Endpoints]が表示されるので、HTTPS/HTTPいずれかでアクセスできるようになります。

image.png

Railsのサンプルアプリケーションの画面が表示されればOKです。

image.png

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経由の監視などもあり、他にも機能が色々あるみたいなので、機会があれば試してみようと思います。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5