Elastic Beanstalk Multi-container Docker 試してみる
概要
Elastic Beanstalk Multi-container Docker を試してみた。
VPC、Subnet、ECRリポジトリは事前に作成済みとする。
ネットワークロードバランサーで、1080番ポートを使う。
Elastic Beanstalk Multi-container Docker
Elastic Beanstalk は Amazon Elastic Container Service (Amazon ECS) を使用して、マルチコンテナ Docker 環境へのコンテナのデプロイを調整します。Amazon ECS には、Docker コンテナを実行するインスタンスのクラスターを管理するためのツールが用意されています。Elastic Beanstalk は、クラスターの作成やタスクの定義と実行などの Amazon ECS タスクを処理します。
Elastic Beanstalk でも ECS を使っている。
設定ファイル
{ "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
Elastic Beanstalk アプリケーションを作成する
eb init
環境を作成する。※環境名は 4 ~ 40 文字の長さ
eb create kawabatas-dev
デプロイする
eb deploy
AWSリソース
作成された AWS リソースはこれら。
- ECSクラスター
- ECSタスク定義
- EC2
- NLB
- ターゲットグループ
- セキュリティグループ
- CloudFormation
- Elastic Beanstalk
- S3
わかったこと
- Fargate 使えない
- ECS Serviceを使わない
- EB側で Task 実行の数や、スケーリング、LBの設定、デプロイ(ローリングアップデート or ブルーグリーンデプロイ)を管理しているので問題なさそう。
- スケールでは EC2 インスタンスが増える
- 環境作成、デプロイの時間
- (今回のコンテナイメージでの)初回の create は5分くらい。更新(deploy)は2分くらいだった
- .ebextensions、汎用オプション。ネットの情報は少なめ
- トラブル時は、使用しているAWSリソースの確認を。ポートを1080に変更するときに切に思った。。。
- ロードバランサーのタイプは後から変更不可
ElasticBeanstalk の環境構築、デプロイは楽。
ElasticBeanstalk のコンソールで一括で確認もできる。
とはいえ、カスタムの設定はやりづらかった...