kawabatas技術ブログ

試してみたことを書いていきます

Elastic Beanstalk Multi-container Docker 試してみる

概要

Elastic Beanstalk Multi-container Docker を試してみた。

VPC、Subnet、ECRリポジトリは事前に作成済みとする。

ネットワークロードバランサーで、1080番ポートを使う。

Elastic Beanstalk Multi-container Docker

複数コンテナの Docker 環境

Elastic Beanstalk は Amazon Elastic Container Service (Amazon ECS) を使用して、マルチコンテナ Docker 環境へのコンテナのデプロイを調整します。Amazon ECS には、Docker コンテナを実行するインスタンスクラスターを管理するためのツールが用意されています。Elastic Beanstalk は、クラスターの作成やタスクの定義と実行などの Amazon ECS タスクを処理します。

Elastic Beanstalk でも ECS を使っている。

設定ファイル

Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "delegate",
      "image": "コンテナイメージ",
      "essential": true,
      "memory": 512,
      "portMappings": [
        {
          "hostPort": 1080,
          "containerPort": 1080
        }
      ]
    }
  ]
}

.ebextensions/network-load-balancer.config

Resources:
  AWSEBSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SecurityGroup settings for EB EC2.
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 1080
          ToPort: 1080
          CidrIp: 0.0.0.0/0
option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: network
  aws:ec2:vpc:
    VPCId: vpc-XXXXX
    Subnets: subnet-XXXXX,subnet-YYYYY
    ELBSubnets: subnet-XXXXX,subnet-YYYYY
    ELBScheme: public
    AssociatePublicIpAddress: true
  aws:elbv2:listener:default:
    ListenerEnabled: false
  aws:elbv2:listener:1080:
    Protocol: TCP
  aws:elasticbeanstalk:environment:process:default:
    Port: 1080

EB CLI

EB CLI をインストール

Elastic Beanstalk アプリケーションを作成する

eb init

環境を作成する。※環境名は 4 ~ 40 文字の長さ

eb create kawabatas-dev

デプロイする

eb deploy

AWSリソース

作成された AWS リソースはこれら。

  • ECSクラスタ
  • ECSタスク定義
  • EC2
  • NLB
  • ターゲットグループ
  • セキュリティグループ
  • CloudFormation
  • Elastic Beanstalk
  • S3

わかったこと

  • Fargate 使えない
    • コンテナ実行する EC2 インスタンスのキャパシティプランが必要になる。(コンテナを実行しているインスタンスのスペックをフル活用できないのだろうか?)
  • ECS Serviceを使わない
    • EB側で Task 実行の数や、スケーリング、LBの設定、デプロイ(ローリングアップデート or ブルーグリーンデプロイ)を管理しているので問題なさそう。
  • スケールでは EC2 インスタンスが増える
  • 環境作成、デプロイの時間
    • (今回のコンテナイメージでの)初回の create は5分くらい。更新(deploy)は2分くらいだった
  • .ebextensions汎用オプション。ネットの情報は少なめ
    • トラブル時は、使用しているAWSリソースの確認を。ポートを1080に変更するときに切に思った。。。
  • ロードバランサーのタイプは後から変更不可

ElasticBeanstalk の環境構築、デプロイは楽。

ElasticBeanstalk のコンソールで一括で確認もできる。

とはいえ、カスタムの設定はやりづらかった...