Amazon ECS事始め
- Amazon EC2 Container Service -
— Author: Junya Nakazato
© CA Advance, Inc. All Rights Reserved 1
自己紹介
• 株式会社シーエーアドバンス
• 仲里 淳矢
業務内容
• アメーバサービスの監視システム構築
• 監視対象・オペレータの分析レポート
© CA Advance, Inc. All Rights Reserved 2
目次
• Amazon ECSとは
• ECS構成要素
• 事例紹介(成果物)
• Blue-Greenデプロイ
• 苦労した点・まとめ
© CA Advance, Inc. All Rights Reserved 3
Amazon ECSとは
• Aamazon EC2 Container Serviceの略
• Dockerのコンテナを管理サービス
• ECSに登録したEC2上でコンテナを起動してくれる
• リソーススケジューラー機能搭載
• docker-compose+docker-swarmっぽい
• ELB, AutoScaling, RDS, IAM等と連携すると素敵
© CA Advance, Inc. All Rights Reserved 4
ECS構成要素
• Container Instance(EC2)
• Cluster
• Task/Task Definitions
• Container: Dockerコンテナ
© CA Advance, Inc. All Rights Reserved 5
Container Instance
dockerが動くサーバ
• EC2(VPC)
• Docker
• ECS Agent(dockerコンテナ)
© CA Advance, Inc. All Rights Reserved 6
Cluster
Container Instance群
• ECSのリソース源
• リージョンに閉じてる
• Container Instanceの集合体
© CA Advance, Inc. All Rights Reserved 7
Cluster設定
EC2のユーザーデータにコマンドを設定
/etc/ecs/ecs.configに変数を叩きこめばOK
© CA Advance, Inc. All Rights Reserved 8
© CA Advance, Inc. All Rights Reserved 9
© CA Advance, Inc. All Rights Reserved 10
© CA Advance, Inc. All Rights Reserved 11
Task
アプリで利用するコンテナの集合
• 1Task=1App
• Task Definition
• docker-composeみたいなやつ
• json
© CA Advance, Inc. All Rights Reserved 12
Task Definitions設定
• イメージ(ubuntu, ruby, nginx等)指定
• Docker Hub, docker-registryから選択
• 環境変数, ボリューム, ネットワーク
• コンテナに割り当てるリソース(memory, CPU)
© CA Advance, Inc. All Rights Reserved 13
© CA Advance, Inc. All Rights Reserved 14
© CA Advance, Inc. All Rights Reserved 15
事例紹介(成果物)
• ECSで管理されたrailsアプリの構築
• Jenkins
• railsアプリのデプロイ
© CA Advance, Inc. All Rights Reserved 16
© CA Advance, Inc. All Rights Reserved 17
Webアプリをデプロイする流れ
• アプリ(Service)の設定をTask Definitionsに定義
• Clusterを作成
• ClusterにEC2を登録(CloudFormation/手作業)
• ClusterにServiceを登録
• ELBにTaskを紐付け
© CA Advance, Inc. All Rights Reserved 18
やったこと(AWS)
• Cloudformationリソース自動生成
• AutoScaleGroup(ASG), EC2, ELB, SecurityGroup
• AZ別でサーバーを構築し、冗長性担保
• EC2 AutoScaling対応
• S3に画像などのリソースをバックアップ
• CloudFrontでassetsを配信
© CA Advance, Inc. All Rights Reserved 19
やったこと(Jenkins)
• CI環境
• masterへのpushをフックし、dockerイメージビルド
• 環境ごと差し替えるBlue-Green Deployを採用
• バックアップ体制
• Jenkins_homeをS3へバックアップ
• アプリ側のリソースをS3へ
© CA Advance, Inc. All Rights Reserved 20
Blue-Green Deploy
© CA Advance, Inc. All Rights Reserved 21
Phase1:通常構成
© CA Advance, Inc. All Rights Reserved 22
Phase2:デプロイ検知
ASG+ECSで新環境を構築
新環境もELBに接続
© CA Advance, Inc. All Rights Reserved 23
Phase3:通常構成へ移行
旧環境を破棄
© CA Advance, Inc. All Rights Reserved 24
苦労した点
• 自分がAWS初心者だった
• 手作業排除方法の調査(Cloudformation, ECS, ASG)
• 閉じた環境によるDockerデプロイ環境の構築
• Blue-Green Deployの概念・実装方法の理解
• Jenkinsもdockerで用意したところ、job実行者がdocker上の
Jenkinsユーザーなので権限周りで激ハマり
© CA Advance, Inc. All Rights Reserved 25
所感・まとめ
• 念願のAWS入門ができた
• Cloudformation, ECS, ASGを利用したWebAppの構築
• dockerによるJenkinsセットアップ
• JenkinsでECS, ASGを利用し、Blue-Greenデプロイ
• バックアップ体制: Jenkinsデータ, Appのリソース系, RDS
© CA Advance, Inc. All Rights Reserved 26
docker ❤
ENJOY!© CA Advance, Inc. All Rights Reserved 27

Amazon ECS事始め