Top Banner
1 Amazon EC2 Container Service AWS Black Belt Tech Webinar 2015 アマゾン データ サービス ジャパン株式会社 ソリューションアーキテクト 岩永 亮介 2015/6/24
78

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

Jul 31, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)

1

Amazon EC2 Container Service

AWS Black Belt Tech Webinar 2015アマゾン データ サービス ジャパン株式会社ソリューションアーキテクト 岩永 亮介

2015/6/24

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

2

Agenda

• コンテナとは?

• Amazon EC2 Container Service - Basic

• Amazon EC2 Container Service - Advanced

• まとめ

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

3

コンテナとは?

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

4

ProcessProcess

コンテナとは?

• OS仮想化

• プロセス隔離

• イメージ

• 自動化

Server

Bins/Libs Bins/Libs

OS

App1 App2

Dockerfile

OS: Ubuntu

Apache, PHP

Dockerfile

OS: CentOS

Nginx, Ruby

Images

Build

Run Run

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

5

コンテナの利点

• 可搬性– 不変なイメージ

• 柔軟性– 削除、再生成が容易

• 速度– OSは既に起動済

• 効率– オーバーヘッド少ない

ProcessProcess

Server

Bins/Libs Bins/Libs

OS

App1 App2

Dockerfile

OS: Ubuntu

Apache, PHP

Dockerfile

OS: CentOS

Nginx, Ruby

Images

Build

Run Run

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

6

作業単位としてのコンテナ

Base

image

Patches

インフラ担当 開発者

Ruby

Redis

Logger

Utilities

App

ローカル開発環境 本番環境

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

7

Dockerでコンテナ起動時にできること

• リソース制限– CPU, memory使用量をコンテナごとに制限できる

• ポートマッピング– コンテナがListenしているポートに、Hostのポートからフォワードできる

• リンク– 同一Hostのコンテナに名前でアクセスできるようにする

• ボリュームマウント– Hostのファイルシステムをコンテナにマウントできる

• エントリーポイント/コマンド指定– コンテナ起動時に実行されるコマンドを指定できる

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

8

Amazon EC2 Container Service - Basic

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

9

Amazon EC2 Container Serviceとは?

• Amazon ECS

• Dockerコンテナ群をAmazon EC2のクラスタ上で管理できるサービス

• 高いスケーラビリティ

• AWSの他の機能・サービスとの連携

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

10

Dockerは1台のOSでは非常に簡単に使える

Server

Bins/Libs Bins/Libs

OS

App1 App2

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

11

何百台ものOSでは、コンテナ管理は非常に困難

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

12

コンテナ管理にはリソースマネージャが必要

• 計算機群のリソースを抽象化して管理

• 使う側は必要なリソース量のみを指定– 実際にどのマシンで動く

かを気にしない

• リソースの要求に対して適切にマシンをアサインする– スケジューラ

CPU: 500

Mem: 300

CPU: 10

Mem: 30 CPU: 2000

Mem: 1000

CPU: 10

Mem: 30CPU: 10

Mem: 30

Resource Manager

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

13

コンテナ管理のユースケース

• Service & Application– シンプルなモデル Docker imageをbuild, test, deploy

– Microservices

– Blue-Greenデプロイ

• Batch Jobs– リソースを共有することで、バーストにも対応しやすい

– Auto Scaling/RI/Spotを使って、よりコストを下げる

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

14

Amazon EC2 Container Serviceの利点

クラスタ管理はお任せ状態管理、操作、監視スケーラブル

簡単に、どんなスケールのクラスタも管理できる

柔軟なコンテナの配置

他のAWSサービスとの連携がデザインされている

拡張性の高さアプリケーションバッチジョブ複数のスケジューラ

Elastic Load Balancing, Amazon EBS, Amazon VPC, AWS IAM, AWS CloudTrail

包括的なAPIオープンソースエージェントカスタムスケジューラ

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

15

コンテナ管理に必要な要素

• クラスタ管理

– クラスタ全体の状態管理

• グループ化

– 同一マシンで動かしたいコンテナ群の管理

• スケジューラ

– タスク配置、状態管理、デプロイ

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

16

Cluster

Container Instance

Amazon ECSにおけるコンテナ管理の概要図

• クラスタ管理– Cluster, Container

Instance, Agent

• グループ化– Task Definition, Task,

Container

• スケジューラ– Run Task, Service

Agent

Task

Container

Container

Task

Service

Task Definition

Agent

Task

Task Definition

Run Task

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

17

Amazon ECSチュートリアル

• Container Instanceを起動し、Agentを稼働させる

Container Instance

Agent Agent

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

18

Amazon ECSチュートリアル

• 指定したClusterにContainer Instanceが登録される

Cluster

Container Instance

Agent Agent

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

19

Cluster

Container Instance

Amazon ECSチュートリアル

• Task Definitionを定義する

Agent Agent

Task DefinitionTask Definition

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

20

Cluster

Container Instance

Amazon ECSチュートリアル

• Run TaskでBatch Taskを開始

Agent Agent

Task DefinitionTask Definition

Run Task

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

21

Cluster

Container Instance

Amazon ECSチュートリアル

• 自動でContainer InstanceにTaskが割り振られる

Agent Agent

Task Definition

Task

Task Definition

Run Task

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

22

Cluster

Container Instance

Amazon ECSチュートリアル

• Task内のContainerが起動する

Agent Agent

Task Definition

Task

Task Definition

Run Task

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

23

Cluster

Container Instance

Amazon ECSチュートリアル

• ServiceでWeb Taskを開始する

Agent Agent

Task

Task Definition

Run Task Service

Task Definition

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

24

Cluster

Container Instance

Amazon ECSチュートリアル

• 自動でContainer InstanceにTaskが割り振られる

Agent Agent

Task

Task Definition

Run Task

Task

Service

Task Definition

Task

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

25

Cluster

Container Instance

Amazon ECSチュートリアル

• Task内のContainerが起動する

• もし設定していれば、Elastic Load Balancingに登録

Agent Agent

Task

Task Definition

Run Task

Task

Container

Container

Service

Task Definition

Task

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

26

Amazon ECS Components

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

27

Run Task

Amazon ECS: クラスタ管理

• クラスタ管理– Cluster, Container

Instance, Agent

• グループ化– Task Definition, Task,

Container

• スケジューラ– Run Task, Service

Service

Task DefinitionTask Definition

Cluster

Container Instance

Task

Container

Container

Task

Agent

Task

Agent

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

28

Amazon ECS: Cluster

• Container Instanceの集合体

• Cluster内のInstanceが持つリソースをまとめて管理

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

29

Amazon ECS: Container Instance

• コンテナのホストとなるAmazon EC2

• VPC内の任意のインスタンスを利用可能

– Docker+ECS Agentが動いていることが必要

– Amazon ECS-optimized AMI

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

30

Amazon ECS: Agent

• Amazon ECSのendpointと通信するエージェント

• Go言語製のDockerimage

• Docker Hubで提供

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

31

Run Task

Amazon ECS: グループ化

• クラスタ管理– Cluster, Container

Instance, Agent

• グループ化– Task Definition, Task,

Container

• スケジューラ– Run Task, Service

Service

Cluster

Container Instance

Agent Agent

Task

Container

Container

Task Task

Task DefinitionTask Definition

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

32

Amazon ECS: Task Definition

• コンテナの集合を定義– 必ず同じインスタンスで

稼働

– 要求するリソースを指定• CPU, memory, (Port)

• ボリュームも定義可能– インスタンスのファイル

システムを利用できる

• バージョニングが可能

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

33

Task Definition: Overview

Volume definitions

Container definitions

Container Instanceのファイルシステムをマウントする場合、定義する

稼働させるContainerの情報を定義する

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

34

Task Definition: Overview

Shared data volume

PHP AppTime of day

App

Task Definition

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

35

Task Definition: Overview

Container

Instance

Schedule

Shared data volume

PHP AppTime of day

App

Task Definition Task

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

36

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

}

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

37

{"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

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

38

{

"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

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

39

Amazon ECS: Task

• Task Definitionが実体化されたもの

– 1つのTask Definitionから複数のTaskが生成

• リソースに余裕のあるContainer Instanceで実行される

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

40

Amazon ECS: Container

• Taskの実体であるDockerのコンテナ

– 1つのTaskに複数のContainerが含まれる

• Container Instance上で実行される

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

41

Amazon ECS: スケジューラ

• クラスタ管理– Cluster, Container

Instance, Agent

• グループ化– Task Definition,

Task, Container

• スケジューラ– Run Task, Service

Cluster

Container Instance

Agent Agent

Task

Container

Container

Task Task

Task DefinitionTask Definition

ServiceRun Task

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

42

Amazon ECS: Run Task

• Batchジョブの様なワークロードに最適

• Task Definitionから指定した数のTaskを実行する

– Container Instanceは自動的に選ばれる

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

43

Amazon ECS: Service

• Web/APIの様に長期稼働するワークロードに最適

• Taskを必要数保ってくれるスケジューラ– 自動復旧にも対応

• 新しいTask Definitionをデプロイしつつ切替

• Elastic Load Balancingとの連携も可能

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

44

Amazon ECS: Serviceの例

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

45

Amazon ECS: ServiceのUpdate

• Serviceが使うTask DefinitionをUpdateすると、新しいTaskをデプロイできる

• 空いているリソースで新しいTaskを起動しながら、徐々に古いTaskを止めていく– 中間では、新旧のTaskが混在するため、完全なBlue-Green

Deploymentではないので注意が必要

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

46

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1

Task:1Task:1 Task:1

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

47

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1 Task Definition:2

Task:1Task:1 Task:1

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

48

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1 Task Definition:2

Task:1Task:1 Task:1Task:2 Task:2

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

49

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1 Task Definition:2

Task:1Task:2 Task:2

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

50

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1 Task Definition:2

Task:1Task:2 Task:2Task:2

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

51

Cluster

Amazon ECS: ServiceのUpdate

Service

Task Definition:1 Task Definition:2

Task:2 Task:2Task:2

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

52

Amazon ECS: 利用料金

• Amazon ECS自体の利用料は不要

• Container Instanceとして使用するAmazon EC2の料金– On-demand/RI/Spotの料金、Amazon EBSの料金

– Spotを利用する場合はTerminateされる可能性を考慮する

• Elastic Load Balancingを利用する場合はElastic Load Balancingの料金

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

53

Amazon EC2 Container Service - Advanced

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

54

Amazon ECS Advanced Topics

• Volumes

• CPU/Memory

• Dynamic Port Mapping

• IAM Role

• Auto Scaling

• Agent Update

• Task Override

• Per Instance Limitation

• AWS Elastic Beanstalk

• Docker registry

• Logging

• Service Discovery

• Docker Compose

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

55

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

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

56

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

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

57

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

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

58

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

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

59

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

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

60

Amazon ECS: Dynamic Port Mapping制約

• Elastic Load Balancing連携では、現状利用できない– Elastic Load Balancing側

の仕様でDynamic Portに対応していないため

• この場合、hostPortを固定する必要がある– 同一Taskは、1つの

Container Instance上に1つまで

49200

49201

49202✘

インスタンス毎にポート変更できない1インスタンスの複数ポートを登録できない

8080

8080✔※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html

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

61

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

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

62

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/

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

63

Amazon ECS: Agent Update

• マネージメントコンソールやCLIから、Agentをアップデート可能※

• Amazon ECS-optimized AMIで利用可能

※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html

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

64

Amazon ECS: Task Override

• Run TaskではTask Definitionの一部をOverride可能※

– Command

– Environment

• Serviceでは未対応

※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html

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

65

Amazon ECS: Per Instance Limitation

• 現時点ではContainer単位ではなくInstance単位となっているもの

• Security Group– 全てのContainerの最大公約数的な指定が必要– Elastic Load Balancingを通せば外部からの通信は絞れる

• IAM Roles– 全てのContainerの最大公約数的な指定が必要

• AWS CloudWatch metrics– Container毎のメトリクスは取得されない– 必要であれば、他のソリューションとの組み合わせ

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

66

Amazon ECS: AWS Elastic Beanstalk

• Multicontainer DockerEnvironment※

– 実は裏側でAmazon ECSを使っている

– Cluster, Container Instance, Task Definition, Taskが自動生成される

※ http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html

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

67

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

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

68

Cluster

Amazon ECS: Docker Registry

• 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

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

69

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でログを転送する

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

70

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できる

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

71

Amazon ECS: Docker Compose

• Docker Compose ≒ Task Definition– docker-compose.ymlとTask DefinitionのJSONを変換するツールを

作っている方もいます

• https://github.com/ambitioninc/container-transform

※参考:DockerCon 2015で、Amazon ECSとDocker Compose, DockerSwarmのインテグレーションの予定が発表されています。

https://twitter.com/docker/status/613033125900382209

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

72

まとめ

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

73

Amazon ECSでコンテナ管理を実現しよう

• Dockerコンテナ管理のためのリソースマネージャ

• マネージドで提供されるのが大きな特徴

• シンプルな仕組みなので、拡張性が高い

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

74

参考資料(英語)

• Amazon EC2 Container Service Developer Guidehttp://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html

• Amazon EC2 Container Service FAQhttp://aws.amazon.com/ecs/faqs/

• AWS CLI – ecshttp://docs.aws.amazon.com/cli/latest/reference/ecs/index.html

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

75

Q&A

次回Webinarのお申し込みhttp://aws.amazon.com/jp/event_schedule/

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

76

Webinar資料の配置場所

• AWS クラウドサービス活用資料集– http://aws.amazon.com/jp/aws-jp-introduction/

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

77

公式Twitter/FacebookAWSの最新情報をお届けします

@awscloud_jp

検索

最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを日々更新しています!

もしくはhttp://on.fb.me/1vR8yWm

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

78

ご参加ありがとうございました。