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 Instancedockerが動くサーバ• EC2(VPC)
• Docker
• ECS Agent(dockerコンテナ)
© CA Advance, Inc. All Rights Reserved 6
ClusterContainer 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
Recommended