Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1
Amazon EC2 Container Service
AWS Black Belt Tech Webinar 2015
Amazon Web Services Japan
Solutions Architect, Ryosuke Iwa...
2
Agenda
• Containerとは?
• Amazon EC2 Container Service - Basic
• Amazon EC2 Container Service - Update
• Amazon EC2 Contai...
3
Containerとは?
4
ProcessProcess
Containerとは?
• OS仮想化
• Process隔離
• Image
• 自動化
Server
Bins/Libs Bins/Libs
OS
App1 App2
Dockerfile
OS: Ubu...
5
Containerの利点
• 可搬性
– 不変なImage
• 柔軟性
– 削除、再生成が容易
• 速度
– OSは既に起動済
• 効率
– オーバーヘッド少ない
ProcessProcess
Server
Bins/Libs Bins/L...
6
作業単位としてのContainer
Base
image
Patches
インフラ担当 開発者
Ruby
Redis
Logger
Utilities
App
ローカル開発環境 本番環境
7
Amazon EC2 Container Service - Basic
8
Amazon EC2 Container Serviceとは?
• Amazon ECS
• Docker Container群をAmazon EC2のCluster上で
管理できるサービス
• 高いスケーラビリティ
• AWSの他の機能・...
9
Dockerは1台のOSでは非常に簡単に使える
Server
Bins/Libs Bins/Libs
OS
App1 App2
10
Containerをただ起動するだけの場合
• 今までのアプリケーショ
ンと同じ
– 所詮ただのプロセス
• AWS Elastic Beanstalk
• Cluster管理は特に必要
ない
・・・
Deploy
11
何百台ものOSではContainer管理は非常に困難
12
リソースの利用率問題
• 枠割でInstance
をグルーピング
すると、無駄が
生じる
• リソース自体と
アプリが密結合
35%
85%
13
Cluster管理の必要性
• Instance毎にアプリ
管理しない
– リソースの仮想化
• Clusterとして管理
すると、適切な配置
が可能
– Scheduler
– Containerならどこ
でも簡単に配置
~80%
14
Cluster管理とScheduler
• Cluster管理
– 計算機群のリソース、
状態を常に管理
• Scheduler
– Cluster全体を見て適切
にContainerを配置
CPU: 500
Mem: 300
CPU: ...
15 Source: eurosys2013.tudos.org/wp-content/uploads/2013/paper/Schwarzkopf.pdf
16
Docker
Task
Container Instance
Amazon
ECS
Container
ECS Agent
ELB
Internet
ELB
User / Scheduler
API
Cluster Management ...
17
Cluster管理のユースケース
• Service & Application
– シンプルなモデル Docker imageをbuild, test, deploy
– Microservices
– Blue-Greenデプロイ
•...
18
Amazon EC2 Container Serviceの利点
Cluster管理はお任せ
状態管理、操作、監視
スケーラブル
簡単に、どんなスケールの
Clusterも管理できる
柔軟なContainerの配置
他のAWSサービスとの連...
19
必要な要素
• Cluster管理
– Cluster全体の状態管理
• グループ化
– 同一マシンで動かしたい
Container群の管理
• Scheduler
– タスク配置、状態管理、
デプロイ
20
Cluster
Container Instance
Amazon ECSにおけるContainer管理の概要図
• Cluster管理
– Cluster, Container
Instance, Agent
• グループ化
– Tas...
21
Amazon ECSチュートリアル
• Container
Instanceを起動し、
Agentを稼働させる
Container Instance
Agent Agent
22
Amazon ECSチュートリアル
• 指定したClusterに
Container
Instanceが登録さ
れる
Cluster
Container Instance
Agent Agent
23
Cluster
Container Instance
Amazon ECSチュートリアル
• Task Definitionを
定義する
Agent Agent
Task DefinitionTask Definition
24
Cluster
Container Instance
Amazon ECSチュートリアル
• Run TaskでBatch
Taskを開始
Agent Agent
Task DefinitionTask Definition
Run Ta...
25
Cluster
Container Instance
Amazon ECSチュートリアル
• 自動でContainer
InstanceにTaskが
割り振られる
Agent Agent
Task Definition
Task
Task...
26
Cluster
Container Instance
Amazon ECSチュートリアル
• Task内のContainer
が起動する
Agent Agent
Task Definition
Task
Task Definition
R...
27
Cluster
Container Instance
Amazon ECSチュートリアル
• ServiceでWeb
Taskを開始する
Agent Agent
Task
Task Definition
Run Task Service
...
28
Cluster
Container Instance
Amazon ECSチュートリアル
• 自動でContainer
InstanceにTaskが
割り振られる
Agent Agent
Task
Task Definition
Run ...
29
Cluster
Container Instance
Amazon ECSチュートリアル
• Task内のContainer
が起動する
• もし設定していれ
ば、Elastic Load
Balancingに登録
Agent Agent...
30
Amazon ECS Components
31
Run Task
Amazon ECS: Cluster管理
• Cluster管理
– Cluster, Container
Instance, Agent
• グループ化
– Task Definition, Task,
Contai...
32
Amazon ECS: Cluster
• Container Instance
の集合体
• Cluster内のInstance
が持つリソースをま
とめて管理
33
Amazon ECS: Container Instance
• Containerのホストと
なるAmazon EC2
• VPC内の任意の
Instanceを利用可能
– Docker+ECS Agentが
動いていることが必要
– ...
34
Amazon ECS: Agent
• Amazon ECSの
endpointと通信する
Agent
• Go言語製のDocker
image
• Docker Hubで提供
35
Run Task
Amazon ECS: グループ化
• Cluster管理
– Cluster, Container
Instance, Agent
• グループ化
– Task Definition, Task,
Container
...
36
Amazon ECS: Task Definition
• Containerの集合を定義
– 必ず同じInstanceで稼働
– 要求するリソースを指定
• CPU, memory, (Port)
• ボリュームも定義可能
– Inst...
37
Task Definition: Overview
Volume definitions
Container definitions
Container Instanceの
ファイルシステムをマウ
ントする場合、定義する
稼働させるCon...
38
Task Definition: Overview
Shared data volume
PHP App
Time of day
App
Task Definition
39
Task Definition: Overview
Container
Instance
Schedule
Shared data volume
PHP App
Time of day
App
Task Definition Task
40
Task Definition: Container Definition
{
"name": "simple-demo",
"image": "foo/my-demo",
"cpu": 10,
"memory": 500,
"portM...
41
{
"name": "simple-demo",
"image": "foo/my-demo",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 80,
"ho...
42
{
"name": "busybox",
"image": "busybox",
"cpu": 10,
"memory": 500,
"volumesFrom": [
{
"sourceContainer": "simple-demo"
...
43
Amazon ECS: Task
• Task Definitionが実体
化されたもの
– 1つのTask Definition
から複数のTaskが生成
• リソースに余裕のある
Container Instanceで
実行される
44
Amazon ECS: Container
• Taskの実体である
Docker Container
– 1つのTaskに複数の
Containerが含まれる
• Container Instance
上で実行される
45
Amazon ECS: Scheduler
• Cluster管理
– Cluster, Container
Instance, Agent
• グループ化
– Task Definition, Task,
Container
• Sch...
46
Amazon ECS: Run Task
• Batchジョブの様な
ワークロードに最適
• Task Definitionから
指定した数のTaskを
実行する
– Container Instance
は自動的に選ばれる
47
Amazon ECS: Service
• Web/APIの様に長期稼働する
ワークロードに最適
• Taskを必要数保ってくれるスケ
ジューラ
– 自動復旧にも対応
• 新しいTask Definitionをデプロ
イしつつ切替
• E...
48
Amazon ECS: Serviceの例
49
Amazon ECS: ServiceのUpdate
• Serviceが使うTask DefinitionをUpdateすると、
新しいTaskをデプロイできる
• 空いているリソースで新しいTaskを起動しなが
ら、徐々に古いTask...
50
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1
Task:1Task:1 Task:1
51
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1 Task Definition:2
Task:1Task:1 Task:1
52
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1 Task Definition:2
Task:1Task:1 Task:1Task:2 Task:2
53
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1 Task Definition:2
Task:1Task:2 Task:2
54
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1 Task Definition:2
Task:1Task:2 Task:2Task:2
55
Cluster
Amazon ECS: ServiceのUpdate
Service
Task Definition:1 Task Definition:2
Task:2 Task:2Task:2
56
Amazon ECS: 利用料金
• Amazon ECS自体の利用料は不要
• Container Instanceとして使用するAmazon
EC2の料金
– On-demand/RI/Spotの料金、Amazon EBSの料金
– ...
57
Amazon EC2 Container Service - Update
58
New: Amazon EC2 Container Registry
• 完全マネージドなDocker containe
registry
• Amazon ECSと連携
• 通信経路、保存時に暗号化
• IAMユーザ、ロール
• 高い可...
59
New: Amazon EC2 Container Registry
aws.amazon.com/ecr
• 完全マネージドなDocker containe
registry
• Amazon ECSと連携
• 通信経路、保存時に暗号化...
60
New: AZを意識したScheduling
• Service Schedulerの機能
• 可用性の向上、より効率の良い
負荷分散
• 新しいTaskがAZにまたがって
バランスが保たれる
61
New: ECS CLI
• 最初のリリース
• ローカルでの開発を簡素に
• ECS Clusterを簡単に構築
• Docker Composeをサポート
• オープンソース
github.com/aws/amazon-ecs-cli...
62
New: Docker Containerの設定オプション等の改善
• ECSのTask Definitionでより多くのオプションを
サポート
• アドバンスドなDockerユーザに最適
• 新しく追加された項目
– Hostname
...
63
New: Amazon CloudWatchメトリクス追加
• Cluster Utilization
– CPU/Memoryの利用率を、
Cluster全体を100%して計算
– Instance Type毎の違いを正規化
するので、...
64
Amazon EC2 Container Service - Advanced
65
Amazon ECS: Volumes
• Hostのfilesystemを
Containerでmountで
きる仕組み※
– Container間の共有
storageとして
– 永続storageとして
• Task Definit...
66
Amazon ECS: Volumesの永続化/非永続化
• Hostに永続化する時
– volumesでHostのパスを
host.sourcePathで定義す
る
• Hostに永続化しない時
– 上記を指定しないと、Task
起動時...
67
Amazon ECS: Volumesのmount方法
• mountPointsで指定
– volumesをContainerの
どこにmountするか
– readOnlyにもできる
• volumesFromで指定
– source...
68
Amazon ECS: CPU/Memory
• CPUの単位は「1024 unit = 1 core」※
– unitを指定すると、最低それだけは使えることが保証される
– もし指定量以上を使おうとした時は、CPUに空きがあれば使える
...
69
Amazon ECS: Dynamic Port Mapping
• Task起動時にHost上の
空きポートが自動的に
マッピングされる
– OSのephemeral port
• Task Definitionで
hostPortを0...
70
Amazon ECS: Dynamic Port Mapping制約
• Elastic Load Balancing連
携では、現状利用できない
– Elastic Load Balancing側の
仕様でDynamic Portに対応...
71
Amazon ECS: IAM Roles
• Instance Role
– Container InstanceのProfileに指定
• AWS Managed Policy: AmazonEC2ContainerServicefo...
72
Amazon ECS: Auto Scaling
• Container InstanceのAuto Scaling増減に
ServiceのDesired Tasksは追従しない
– Container Instanceの数が増減したから...
73
Amazon ECS: Agent Update
• マネージメントコン
ソールやCLIから、
Agentをアップデート
可能
• Amazon ECS-
optimized AMIで利
用可能
※ http://docs.aws.ama...
74
Amazon ECS: Task Override
• Run TaskではTask
Definitionの一部を
Override可能※
– Command
– Environment
• Serviceでは未対応
※ http://d...
75 https://aws.amazon.com/docker/
AWS Container Partners
76
まとめ
77
Amazon ECSでCluster管理を実現しよう
• Docker Containerのため
のCluster管理サービス
• マネージドで提供されるの
が大きな特徴
• シンプルな仕組みなので、
拡張性が高い
78
参考資料(英語)
• Amazon EC2 Container Service Developer Guide
http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welc...
79
Q&A
次回Webinarのお申し込み
http://aws.amazon.com/jp/event_schedule/
80
Webinar資料の配置場所
• AWS クラウドサービス活用資料集
– http://aws.amazon.com/jp/aws-jp-introduction/
81
公式Twitter/Facebook
AWSの最新情報をお届けします
@awscloud_jp
検索
最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを
日々更新しています!
もしくは
http://on.fb.me/...
82
ご参加ありがとうございました。
83
Appendix
84
Resource Utility of Heterogeneous Instances
Amazon ECS
Amazon EC2
Spot Fleet
+
c3.xlarge
c3.xlarge
c3.xlarge
r3.8xlarge...
85
Amazon ECS: Per Instance Limitation
• 現時点ではContainer単位ではなくInstance単位となっているもの
• Security Group
– 全てのContainerの最大公約数的な指定が...
86
Amazon ECS: AWS Elastic Beanstalk
• Multicontainer Docker
Environment
• 実は裏側でAmazon
ECSを使っている
– Cluster, Container
Inst...
87
Amazon ECS: AWS Elastic Beanstalk
• Dockerrun.aws.jsonの記述は、Task Definition
とほぼ同じ※
– AWSEBDockerrunVersionに"2"を指定
– Sing...
88
Cluster
Amazon ECS: Docker Registry
• Amazon EC2 Container Registry (Coming soon)
• Docker Hub等のprivate image利用可能※
– Ag...
89
Amazon ECS: Logging
• Containerのログを集め
る必要がある
– Containerが終了すると
ファイルは消えてしまう
• 例: Task Definitionで
Logger Containerを定義
– ...
90
Amazon ECS: Service Discovery
• Dynamic Port Mappingを
活用したい時に必要
– IPアドレス+hostPortのリス
トを動的に管理する
• 例: consul + registrato...
91
ContainerとDevOps
92
DevOpsとは?
DevOps = ライフサイクルを高速化する効率の良さ
開発者 顧客
releasetestbuild
plan monitor
デリバリのパイプライン
フィードバックループ
ソフトウェア開発のライフサイクル
93
DevOps lifecycle
Build Test ProductionDevelopment
<>
<>
Application
Code
Artifact
94
DevOps lifecycle
Build Test ProductionDevelopment
<>
<>
Application
Code
Artifact
AWS
CodePipeline
AWS
CodeDeploy
95
DevOps lifecycle
Build Test ProductionDevelopment
<>
<>
+
AMI Provisioning
Code
Application
Code
Artifact
Provisioning
...
96
DevOps lifecycle
Build Test ProductionDevelopment
<>
<>
+
AMI Provisioning
Code
Application
Code
Artifact
Provisioning
...
97
After Docker…
+ <>+
Build Test ProductionDevelopment
<>
<>
+
{} {} {}
98
After Docker…
+
Provisioning
Code
<>
Application
Code
Docker
Image
+
Dockerfile
Docker
Image
Build Test ProductionDevel...
99
After Docker…
Build Test ProductionDevelopment
+
Provisioning
Code
<>
Application
Code
Docker
Image
+
Dockerfile
Docker...
Upcoming SlideShare
Loading in …5
×

AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)

29,228 views

Published on

AWSのオンラインセミナー Blackbelt 2015 シリーズ、2015年6月24日に放送した「Amazon ECS」の説明資料です。Blackbeltシリーズのスケジュールとお申込みは以下のURLで受け付けています。(2015/11/20更新)
http://aws.amazon.com/jp/about-aws/events/

Published in: Technology
  • More than 5000 IT Certified ( SAP,Oracle,Mainframe,Microsoft and IBM Technologies etc...)Consultants registered. Register for IT courses at http://www.todaycourses.com Most of our companies will help you in processing H1B Visa, Work Permit and Job Placements
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)

  1. 1. 1 Amazon EC2 Container Service AWS Black Belt Tech Webinar 2015 Amazon Web Services Japan Solutions Architect, Ryosuke Iwanaga 2015/6/24 ※2015/11/20更新
  2. 2. 2 Agenda • Containerとは? • Amazon EC2 Container Service - Basic • Amazon EC2 Container Service - Update • Amazon EC2 Container Service - Advanced • まとめ
  3. 3. 3 Containerとは?
  4. 4. 4 ProcessProcess Containerとは? • OS仮想化 • Process隔離 • Image • 自動化 Server Bins/Libs Bins/Libs OS App1 App2 Dockerfile OS: Ubuntu Apache, PHP Dockerfile OS: CentOS Nginx, Ruby Images Build Run Run
  5. 5. 5 Containerの利点 • 可搬性 – 不変なImage • 柔軟性 – 削除、再生成が容易 • 速度 – OSは既に起動済 • 効率 – オーバーヘッド少ない ProcessProcess Server Bins/Libs Bins/Libs OS App1 App2 Dockerfile OS: Ubuntu Apache, PHP Dockerfile OS: CentOS Nginx, Ruby Images Build Run Run
  6. 6. 6 作業単位としてのContainer Base image Patches インフラ担当 開発者 Ruby Redis Logger Utilities App ローカル開発環境 本番環境
  7. 7. 7 Amazon EC2 Container Service - Basic
  8. 8. 8 Amazon EC2 Container Serviceとは? • Amazon ECS • Docker Container群をAmazon EC2のCluster上で 管理できるサービス • 高いスケーラビリティ • AWSの他の機能・サービスとの連携
  9. 9. 9 Dockerは1台のOSでは非常に簡単に使える Server Bins/Libs Bins/Libs OS App1 App2
  10. 10. 10 Containerをただ起動するだけの場合 • 今までのアプリケーショ ンと同じ – 所詮ただのプロセス • AWS Elastic Beanstalk • Cluster管理は特に必要 ない ・・・ Deploy
  11. 11. 11 何百台ものOSではContainer管理は非常に困難
  12. 12. 12 リソースの利用率問題 • 枠割でInstance をグルーピング すると、無駄が 生じる • リソース自体と アプリが密結合 35% 85%
  13. 13. 13 Cluster管理の必要性 • Instance毎にアプリ 管理しない – リソースの仮想化 • Clusterとして管理 すると、適切な配置 が可能 – Scheduler – Containerならどこ でも簡単に配置 ~80%
  14. 14. 14 Cluster管理とScheduler • Cluster管理 – 計算機群のリソース、 状態を常に管理 • Scheduler – Cluster全体を見て適切 にContainerを配置 CPU: 500 Mem: 300 CPU: 10 Mem: 30 CPU: 2000 Mem: 1000 CPU: 10 Mem: 30CPU: 10 Mem: 30 Scheduler Cluster Manager
  15. 15. 15 Source: eurosys2013.tudos.org/wp-content/uploads/2013/paper/Schwarzkopf.pdf
  16. 16. 16 Docker Task Container Instance Amazon ECS Container ECS Agent ELB Internet ELB User / Scheduler API Cluster Management Engine Task Container Docker Task Container Instance Container ECS Agent Task Container Docker Task Container Instance Container ECS Agent Task Container AZ 1 AZ 2 Key/Value Store Agent Communication Service http://aws.typepad.com/sajp/2015/07/under-the-hood-of-the-amazon-ec2-container-service.html
  17. 17. 17 Cluster管理のユースケース • Service & Application – シンプルなモデル Docker imageをbuild, test, deploy – Microservices – Blue-Greenデプロイ • Batch Jobs – リソースを共有することで、バーストにも対応しやすい – Auto Scaling/RI/Spotを使って、よりコストを下げる
  18. 18. 18 Amazon EC2 Container Serviceの利点 Cluster管理はお任せ 状態管理、操作、監視 スケーラブル 簡単に、どんなスケールの Clusterも管理できる 柔軟なContainerの配置 他のAWSサービスとの連携が デザインされている 拡張性の高さ アプリケーション バッチジョブ 複数のScheduler Elastic Load Balancing, Amazon EBS, Amazon VPC, AWS IAM, AWS CloudTrail 包括的なAPI オープンソースAgent カスタムScheduler
  19. 19. 19 必要な要素 • Cluster管理 – Cluster全体の状態管理 • グループ化 – 同一マシンで動かしたい Container群の管理 • Scheduler – タスク配置、状態管理、 デプロイ
  20. 20. 20 Cluster Container Instance Amazon ECSにおけるContainer管理の概要図 • Cluster管理 – Cluster, Container Instance, Agent • グループ化 – Task Definition, Task, Container • Scheduler – Run Task, Service Agent Task Container Container Task Service Task Definition Agent Task Task Definition Run Task
  21. 21. 21 Amazon ECSチュートリアル • Container Instanceを起動し、 Agentを稼働させる Container Instance Agent Agent
  22. 22. 22 Amazon ECSチュートリアル • 指定したClusterに Container Instanceが登録さ れる Cluster Container Instance Agent Agent
  23. 23. 23 Cluster Container Instance Amazon ECSチュートリアル • Task Definitionを 定義する Agent Agent Task DefinitionTask Definition
  24. 24. 24 Cluster Container Instance Amazon ECSチュートリアル • Run TaskでBatch Taskを開始 Agent Agent Task DefinitionTask Definition Run Task
  25. 25. 25 Cluster Container Instance Amazon ECSチュートリアル • 自動でContainer InstanceにTaskが 割り振られる Agent Agent Task Definition Task Task Definition Run Task
  26. 26. 26 Cluster Container Instance Amazon ECSチュートリアル • Task内のContainer が起動する Agent Agent Task Definition Task Task Definition Run Task
  27. 27. 27 Cluster Container Instance Amazon ECSチュートリアル • ServiceでWeb Taskを開始する Agent Agent Task Task Definition Run Task Service Task Definition
  28. 28. 28 Cluster Container Instance Amazon ECSチュートリアル • 自動でContainer InstanceにTaskが 割り振られる Agent Agent Task Task Definition Run Task Task Service Task Definition Task
  29. 29. 29 Cluster Container Instance Amazon ECSチュートリアル • Task内のContainer が起動する • もし設定していれ ば、Elastic Load Balancingに登録 Agent Agent Task Task Definition Run Task Task Container Container Service Task Definition Task
  30. 30. 30 Amazon ECS Components
  31. 31. 31 Run Task Amazon ECS: Cluster管理 • Cluster管理 – Cluster, Container Instance, Agent • グループ化 – Task Definition, Task, Container • Scheduler – Run Task, Service Service Task DefinitionTask Definition Cluster Container Instance Task Container Container Task Agent Task Agent
  32. 32. 32 Amazon ECS: Cluster • Container Instance の集合体 • Cluster内のInstance が持つリソースをま とめて管理
  33. 33. 33 Amazon ECS: Container Instance • Containerのホストと なるAmazon EC2 • VPC内の任意の Instanceを利用可能 – Docker+ECS Agentが 動いていることが必要 – Amazon ECS- optimized AMI
  34. 34. 34 Amazon ECS: Agent • Amazon ECSの endpointと通信する Agent • Go言語製のDocker image • Docker Hubで提供
  35. 35. 35 Run Task Amazon ECS: グループ化 • Cluster管理 – Cluster, Container Instance, Agent • グループ化 – Task Definition, Task, Container • Scheduler – Run Task, Service Service Cluster Container Instance Agent Agent Task Container Container Task Task Task DefinitionTask Definition
  36. 36. 36 Amazon ECS: Task Definition • Containerの集合を定義 – 必ず同じInstanceで稼働 – 要求するリソースを指定 • CPU, memory, (Port) • ボリュームも定義可能 – Instanceのファイルシス テムを利用できる • バージョニングが可能
  37. 37. 37 Task Definition: Overview Volume definitions Container definitions Container Instanceの ファイルシステムをマウ ントする場合、定義する 稼働させるContainerの 情報を定義する
  38. 38. 38 Task Definition: Overview Shared data volume PHP App Time of day App Task Definition
  39. 39. 39 Task Definition: Overview Container Instance Schedule Shared data volume PHP App Time of day App Task Definition Task
  40. 40. 40 Task Definition: Container Definition { "name": "simple-demo", "image": "foo/my-demo", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true }, { "name": "busybox", "image": "busybox", "cpu": 10, "memory": 500, "volumesFrom": [ { "sourceContainer": "simple-demo" } ], "entryPoint": [ "sh", "-c" ], "command": [ "while true; do /bin/date > /var/www/my-vol/date; sleep 1; done" ], "essential": false }
  41. 41. 41 { "name": "simple-demo", "image": "foo/my-demo", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true }, [ { "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] } ] Essential to our Task Mount volumes Expose port 80 in container to port 80 on host 10 CPU Units (1024 is full CPU), 500 Megabytes of Memory Task Definition: Container Definition
  42. 42. 42 { "name": "busybox", "image": "busybox", "cpu": 10, "memory": 500, "volumesFrom": [ { "sourceContainer": "simple-demo" } ], "entryPoint": [ "sh", "-c" ], "command": [ "while true; do /bin/date > /var/www/my-vol/date; sleep 1; done" ], "essential": false } [ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] }, ] From Docker Hub Mount volume from other container Command to exec Task Definition: Container Definition
  43. 43. 43 Amazon ECS: Task • Task Definitionが実体 化されたもの – 1つのTask Definition から複数のTaskが生成 • リソースに余裕のある Container Instanceで 実行される
  44. 44. 44 Amazon ECS: Container • Taskの実体である Docker Container – 1つのTaskに複数の Containerが含まれる • Container Instance 上で実行される
  45. 45. 45 Amazon ECS: Scheduler • Cluster管理 – Cluster, Container Instance, Agent • グループ化 – Task Definition, Task, Container • Scheduler – Run Task, Service Cluster Container Instance Agent Agent Task Container Container Task Task Task DefinitionTask Definition ServiceRun Task
  46. 46. 46 Amazon ECS: Run Task • Batchジョブの様な ワークロードに最適 • Task Definitionから 指定した数のTaskを 実行する – Container Instance は自動的に選ばれる
  47. 47. 47 Amazon ECS: Service • Web/APIの様に長期稼働する ワークロードに最適 • Taskを必要数保ってくれるスケ ジューラ – 自動復旧にも対応 • 新しいTask Definitionをデプロ イしつつ切替 • Elastic Load Balancingとの連 携も可能
  48. 48. 48 Amazon ECS: Serviceの例
  49. 49. 49 Amazon ECS: ServiceのUpdate • Serviceが使うTask DefinitionをUpdateすると、 新しいTaskをデプロイできる • 空いているリソースで新しいTaskを起動しなが ら、徐々に古いTaskを止めていく – 中間では、新旧のTaskが混在する
  50. 50. 50 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task:1Task:1 Task:1
  51. 51. 51 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:1 Task:1
  52. 52. 52 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:1 Task:1Task:2 Task:2
  53. 53. 53 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:2 Task:2
  54. 54. 54 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:2 Task:2Task:2
  55. 55. 55 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:2 Task:2Task:2
  56. 56. 56 Amazon ECS: 利用料金 • Amazon ECS自体の利用料は不要 • Container Instanceとして使用するAmazon EC2の料金 – On-demand/RI/Spotの料金、Amazon EBSの料金 – Spotを利用する場合はTerminateされる可能性を考慮する • Elastic Load Balancingを利用する場合は Elastic Load Balancingの料金
  57. 57. 57 Amazon EC2 Container Service - Update
  58. 58. 58 New: Amazon EC2 Container Registry • 完全マネージドなDocker containe registry • Amazon ECSと連携 • 通信経路、保存時に暗号化 • IAMユーザ、ロール • 高い可用性とスケーラビリティ • 複数のリージョンで利用可能 • $0.10/GB/月 + AWSデータ転送料 • もう間もなくです! サインアップする と、通知や早期アクセスの可能性 aws.amazon.com/ecr
  59. 59. 59 New: Amazon EC2 Container Registry aws.amazon.com/ecr • 完全マネージドなDocker containe registry • Amazon ECSと連携 • 通信経路、保存時に暗号化 • IAMユーザ、ロール • 高い可用性とスケーラビリティ • 複数のリージョンで利用可能 • $0.10/GB/月 + AWSデータ転送料 • もう間もなくです! サインアップする と、通知や早期アクセスの可能性
  60. 60. 60 New: AZを意識したScheduling • Service Schedulerの機能 • 可用性の向上、より効率の良い 負荷分散 • 新しいTaskがAZにまたがって バランスが保たれる
  61. 61. 61 New: ECS CLI • 最初のリリース • ローカルでの開発を簡素に • ECS Clusterを簡単に構築 • Docker Composeをサポート • オープンソース github.com/aws/amazon-ecs-cli $ ecs-cli configure -i $ ecs-cli up $ ecs-cli compose up $ ecs-cli compose ps
  62. 62. 62 New: Docker Containerの設定オプション等の改善 • ECSのTask Definitionでより多くのオプションを サポート • アドバンスドなDockerユーザに最適 • 新しく追加された項目 – Hostname – Docker labels – Working directory – Privileged execution – Log configuration – …この他にも! – (ドキュメントをご覧ください) • UDP対応 http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html
  63. 63. 63 New: Amazon CloudWatchメトリクス追加 • Cluster Utilization – CPU/Memoryの利用率を、 Cluster全体を100%して計算 – Instance Type毎の違いを正規化 するので、複数Type混合でもok • Service Utilization – CPU/Memoryの利用率を、Task Definitionの数値×Task数を 100%として計算 – Data Samplesを見ると、 RUNNINGなTask数も分かる Amazon ECSのコンソール CloudWatch Dashboard http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cloudwatch-metrics.html
  64. 64. 64 Amazon EC2 Container Service - Advanced
  65. 65. 65 Amazon ECS: Volumes • Hostのfilesystemを Containerでmountで きる仕組み※ – Container間の共有 storageとして – 永続storageとして • Task Definitionで volumesを定義する Host Container 1 Container 2 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html
  66. 66. 66 Amazon ECS: Volumesの永続化/非永続化 • Hostに永続化する時 – volumesでHostのパスを host.sourcePathで定義す る • Hostに永続化しない時 – 上記を指定しないと、Task 起動時に空のvolumeが作 成される – 使っているContainerが無 くなったらDockerに回収 される ←永続化する ←永続化しない ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html
  67. 67. 67 Amazon ECS: Volumesのmount方法 • mountPointsで指定 – volumesをContainerの どこにmountするか – readOnlyにもできる • volumesFromで指定 – sourceContainerと同じ 様にmountさせる指定 方法 ←何をどこにmountするか定義 ←webと同じ様にmountする定義 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html
  68. 68. 68 Amazon ECS: CPU/Memory • CPUの単位は「1024 unit = 1 core」※ – unitを指定すると、最低それだけは使えることが保証される – もし指定量以上を使おうとした時は、CPUに空きがあれば使える – CPUに空きがなくなると、unitを元にキャップがかかる • Memoryの単位は「MiB」※ – もし指定量以上を確保しようとすると、Containerは殺される ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html
  69. 69. 69 Amazon ECS: Dynamic Port Mapping • Task起動時にHost上の 空きポートが自動的に マッピングされる – OSのephemeral port • Task Definitionで hostPortを0または指 定しないと利用可能※ Container Instance Task Container Task Container 49200 Task Definition ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html 80 49201 80
  70. 70. 70 Amazon ECS: Dynamic Port Mapping制約 • Elastic Load Balancing連 携では、現状利用できない – Elastic Load Balancing側の 仕様でDynamic Portに対応 していないため • この場合、hostPortを固定 する必要がある – 同一Taskは、1つの Container Instance上に1 つまで 49200 49201 49202 ✘ ・Instance毎にポート変更できない ・1 Instanceの複数ポートを登録できない 8080 8080✔ ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html
  71. 71. 71 Amazon ECS: IAM Roles • Instance Role – Container InstanceのProfileに指定 • AWS Managed Policy: AmazonEC2ContainerServiceforEC2Role – Amazon ECSのAPIを実行できること • Service Role – Serviceが利用するRoleを指定 • AWS Managed Policy: AmazonEC2ContainerServiceRole – Amazon EC2, Elastic Load BalancingのAPIを実行できること • いずれもGetting Startedで自動作成される ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/IAM_policies.html
  72. 72. 72 Amazon ECS: Auto Scaling • Container InstanceのAuto Scaling増減に ServiceのDesired Tasksは追従しない – Container Instanceの数が増減したからといって、自動でTask の数が増減するということはない • 自動で増減させたければ、何かしらのAPI連携 が必要 – 例: Auto Scaling Groupの増減→Amazon SNS→AWS Lambda→Amazon ECS ServiceのDesiredCountを増減※ ※ http://dev.classmethod.jp/cloud/ecs-integrate-autoscaling-by-lambda/
  73. 73. 73 Amazon ECS: Agent Update • マネージメントコン ソールやCLIから、 Agentをアップデート 可能 • Amazon ECS- optimized AMIで利 用可能 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html
  74. 74. 74 Amazon ECS: Task Override • Run TaskではTask Definitionの一部を Override可能※ – Command – Environment • Serviceでは未対応 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html
  75. 75. 75 https://aws.amazon.com/docker/ AWS Container Partners
  76. 76. 76 まとめ
  77. 77. 77 Amazon ECSでCluster管理を実現しよう • Docker Containerのため のCluster管理サービス • マネージドで提供されるの が大きな特徴 • シンプルな仕組みなので、 拡張性が高い
  78. 78. 78 参考資料(英語) • Amazon EC2 Container Service Developer Guide http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html • Amazon EC2 Container Service FAQ http://aws.amazon.com/ecs/faqs/ • AWS CLI – ecs http://docs.aws.amazon.com/cli/latest/reference/ecs/index.html
  79. 79. 79 Q&A 次回Webinarのお申し込み http://aws.amazon.com/jp/event_schedule/
  80. 80. 80 Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  81. 81. 81 公式Twitter/Facebook AWSの最新情報をお届けします @awscloud_jp 検索 最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを 日々更新しています! もしくは http://on.fb.me/1vR8yWm
  82. 82. 82 ご参加ありがとうございました。
  83. 83. 83 Appendix
  84. 84. 84 Resource Utility of Heterogeneous Instances Amazon ECS Amazon EC2 Spot Fleet + c3.xlarge c3.xlarge c3.xlarge r3.8xlarge r3.8xlarge r3.8xlarge c3.8xlarge c3.8xlarge c3.8xlarge c3.4xlarge c3.4xlarge c3.4xlarge r3.2xlarge r3.2xlarge r3.2xlarge
  85. 85. 85 Amazon ECS: Per Instance Limitation • 現時点ではContainer単位ではなくInstance単位となっているもの • Security Group – 全てのContainerの最大公約数的な指定が必要 – Elastic Load Balancingを通せば外部からの通信は絞れる • IAM Roles – 全てのContainerの最大公約数的な指定が必要 • AWS CloudWatch metrics – Container毎のメトリクスは取得されない (Cluster/Service毎は取得される) – 必要であれば、他のソリューションとの組み合わせ
  86. 86. 86 Amazon ECS: AWS Elastic Beanstalk • Multicontainer Docker Environment • 実は裏側でAmazon ECSを使っている – Cluster, Container Instance, Task Definition, Taskが自動生 成される ※ http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html
  87. 87. 87 Amazon ECS: AWS Elastic Beanstalk • Dockerrun.aws.jsonの記述は、Task Definition とほぼ同じ※ – AWSEBDockerrunVersionに"2"を指定 – Single container Docker Environment(Version 1)とは違う形式 • Auto Scalingで増えたInstanceにもTaskが自動で 配置される – Service/Run Taskスケジューラは使用していない – startTask APIでContainer Instanceを指定してTaskを実行 ※ http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html
  88. 88. 88 Cluster Amazon ECS: Docker Registry • Amazon EC2 Container Registry (Coming soon) • Docker Hub等のprivate image利用可能※ – AgentにECS_ENGINE_AUTH_* 環境変数で認証情報を渡す • Amazon ECS上にPrivate Registryを立てることも可能 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html Service Task Definition registry:2 Service Task Definition docker.local/foo docker.local
  89. 89. 89 Amazon ECS: Logging • Containerのログを集め る必要がある – Containerが終了すると ファイルは消えてしまう • 例: Task Definitionで Logger Containerを定義 – rsyslogでログを受け取っ て送る※ – 共有Volumeを使って書か れたログを送る ※ https://blogs.aws.amazon.com/application-management/post/TxFRDMTMILAA8X/Send-ECS-Container-Logs-to-CloudWatch-Logs-for-Centralized-Monitoring 例: Logger Containerはrsyslogでログを受け取り、 CloudWatch Logs agentでログを転送する
  90. 90. 90 Amazon ECS: Service Discovery • Dynamic Port Mappingを 活用したい時に必要 – IPアドレス+hostPortのリス トを動的に管理する • 例: consul + registrator※ – registrator経由でconsulに HostのIPアドレスと hostPortが保存される – DNSのSRVレコードでIPア ドレスとPortが取り出せる ※ https://aws.amazon.com/blogs/compute/service-discovery-via-consul-with-amazon-ecs/ 例: stock-priceとweatherはregistratorによっ てconsulにIPアドレスとportが登録されるので、 portalはDNSのSRVレコードでdiscoveryできる
  91. 91. 91 ContainerとDevOps
  92. 92. 92 DevOpsとは? DevOps = ライフサイクルを高速化する効率の良さ 開発者 顧客 releasetestbuild plan monitor デリバリのパイプライン フィードバックループ ソフトウェア開発のライフサイクル
  93. 93. 93 DevOps lifecycle Build Test ProductionDevelopment <> <> Application Code Artifact
  94. 94. 94 DevOps lifecycle Build Test ProductionDevelopment <> <> Application Code Artifact AWS CodePipeline AWS CodeDeploy
  95. 95. 95 DevOps lifecycle Build Test ProductionDevelopment <> <> + AMI Provisioning Code Application Code Artifact Provisioning Code {} Config {} Config {} Config AWS CodePipeline AWS CodeDeploy
  96. 96. 96 DevOps lifecycle Build Test ProductionDevelopment <> <> + AMI Provisioning Code Application Code Artifact Provisioning Code {} Config {} Config {} Config AWS Elastic Beanstalk AWS OpsWorks AWS CodePipeline AWS CodeDeploy
  97. 97. 97 After Docker… + <>+ Build Test ProductionDevelopment <> <> + {} {} {}
  98. 98. 98 After Docker… + Provisioning Code <> Application Code Docker Image + Dockerfile Docker Image Build Test ProductionDevelopment
  99. 99. 99 After Docker… Build Test ProductionDevelopment + Provisioning Code <> Application Code Docker Image + Dockerfile Docker Image Amazon ECS Amazon ECR

×