docker-compose.ymlを使って AWSFargateへデプロイ

2020年7月9日にAWSからこんな発表がありました

Docker と AWS が共同で AWS Fargate 上の Amazon ECS へのアプリケーションのデプロイをサポート
https://aws.amazon.com/jp/about-aws/whats-new/2020/07/docker-and-aws-collaborate-to-help-deploy-applications-to-amazon-ecs-on-aws-fargate/

docker-compose.ymlを使ってAmazonECSのFargateに直接デプロイ出来るようになりました!

早速試してみます。

今回はWordPressをデプロイしてみようと思います。

今回試す方法ではcompose downしたらデータが消えます。
なので試すときは注意してください。

環境

AmazonLinux2

WordPressのymlファイル

docker-compose.yml公式ページを参考にします。

version: '3.3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    ports:
      - "3306:3306"

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    ports:
      - "80:80"
    restart: always
volumes:
    db_data: {}

ECSの設定

ECSのコンソールにアクセスして、クラスターの作成 をクリックします。
クラスターテンプレートはネットワーキングのみを選択します。

名前を適当に入力します
今回はtest-wpにしました。
この名前はあとで使います。

デプロイ

docker ecsをインストール

公式のDeploying Docker containers on ECSを参考に行っていきます。

まずdocker ecsを有効にする必要があります。

今回はAmazonLinux2なので、Install the Docker ECS Integration CLI on Linuxを参考にインストールします。

$ curl -LO https://github.com/docker/ecs-plugin/releases/latest/download/docker-ecs-linux-amd64
$ chmod +x docker-ecs-linux-amd64
$ sudo mkdir -p /usr/local/lib/docker/cli-plugins
$ sudo mv docker-ecs-linux-amd64 /usr/local/lib/docker/cli-plugins/docker-ecs
$ export DOCKER_CLI_EXPERIMENTAL=enabled

$ DOCKER_CLI_EXPERIMENTAL=enabled docker help

$ cat ~/.docker/config.json
{
  "experimental" : "enabled",
  "auths" : {
    "https://index.docker.io/v1/" : {

    }
  }
}

#すごく長いauthsが表示される

下記のコマンドが実行されれば、インストールされています

$ docker help | grep ecs
  ecs*        Docker ECS (Docker Inc., v1.0.0-beta.1)
$ docker ecs version
Docker ECS plugin v1.0.0-beta.1 (12a47cb)

AWSコンテキストを作成する

docker ecs setupコマンドを使用して、AWSの情報を読み込ませます

$ docker ecs setup
Enter context name: aws
✔ new profile
Enter profile name: hoge
Enter cluster name: test-wp
Enter region: ap-northeast-1
Enter credentials: y
Enter AWS Access Key ID: XXXXXXXXXXXXXX
Enter AWS Secret Access Key: ****************************************

profile nameは何でも良いです
自分の環境に合わせて入力してください。

cluster nameは先程作成したクラスターの名前を入れます

regionは先程クラスターを作成したリージョンを入力します。
ここでは東京リージョンを入れました。

あとはアクセスキーとシークレットアクセスキーと入力します。

作成アプリケーションを実行する

docker ecs composeコマンドを使用して、デプロイします。

事前に作成したdocker-compose.ymlと同じディレクトリに移動して、下記コマンドを入力します

$ docker ecs compose up

コマンドを実行するとデプロイが開始されます。

結構時間かかります。

動作確認

デプロイが完了すると、クラスターに以下のように表示されます test-wpをクリックして、詳細を確認します。

この画像の場合は下のWordpressのほうをクリックします

タスクタブのタスクをクリックします

ネットワークの欄にパブリックIPが表示されているので、これをブラウザで確認すればokです。


注意点です。今回の設定だと、$ docker ecs compose downでコンテナを停止させると、データが消えます。

docker ecs compose updocker ecs compose downが結構時間かかります。
とくにdown
これはマシンにもよる思います。
今回実行した環境がt2.microだったのも関係あるかもしれません。

プラグインのインストールやテーマの変更などは出来ました。
すぐに作って壊す環境であれば、検証環境などに使うのが良いかもしれませんね