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.
Amazon  EC2  Container  
Service(ECS)
アマゾン  データサービス  ジャパン株式会社
⼤大⾕谷  晋平(@shot6,  ohtani@amazon.co.jp)
2
EC2  Container  Service  (ECS)
3
ECSとは?
•  Amazon  ECS    =  コンテナ管理理サービス
–  シンプルなAPIで、EC2クラスタ上にDockerコンテナを起動/管理理
–  Docker管理理で⾯面倒な所を取り除くために出来たサービス
–  EC2...
4
ECSの考え⽅方
•  コア部分
–  Dockerイメージをそのまま利利⽤用可能。オンプレミスとクラウド
の間でシームレスにイメージをやり取り可能
–  DockerとECS  agent(Dockerコンテナ)が動けば良良い
–  動か...
5
現状のステータス
•  ECS⾃自体は無料料
•  起動したEC2/EBSなどのリソース利利⽤用費⽤用は必要
•  現在Limited  Preview
•  対応  AWS  リージョン:
–  US-‐‑‒East-‐‑‒1  (N.V...
6
ECSの仕組み
7
ECSの要素
•  Container  Instance
•  Cluster
•  Task/Task  Definition
•  Container  :  Dockerコンテナ
8
Container Instance
•  EC2(VPC)
•  Docker
•  ECS agent
9
10
ECS  agent
•  オープンソースのエージェント(ASLv2)
•  https://github.com/aws/amazon-‐‑‒ecs-‐‑‒agent
•  Go⾔言語で書かれています
•  というのも、こいつもDock...
11
Cluster
•  リソースプール
•  リージョンに閉じている
•  Container Instanceの集合
•  管理するトップレベルの概念
12
Task
•  Unit of Work
•  関係するコンテナの集合
•  Container Instance上で稼働
•  Task Definition
–  Taskの定義
–  JSON
13
Task Definition
[
{
"environment": [],
"name": "sleep",
"image": "busybox",
"cpu": 10,
"portMappings": [],
"entryPoint"...
14
Cluster
Container Instance Container Instance
Container Instance Container Instance
Container Container
Container Conta...
15
ECSの良い点
  今までのAWSセキュリティ機構が使える
16
Cluster
Container Instance
Container Container
Container Container
Subnet-1(Network ACL)
Cluster
Container Instance
Con...
17
ECSの良い点
  パブリックレポジトリ、プライベートレポジトリも
 どちらも(普通に)利用できる
18
Cluster
Container Instance
Container Container
Container Container
Subnet-1(Network ACL)
セキュリティグループA
Docker Hub
Private...
19
ECSの良い点
  AWSのサービスも普通に利用できるので、Docker
とAWSプラットフォームのよいとこどりが出来る
20
ECS
Container Container
Container Container
EC2VPC ELB Auto
Scaling
Route53 Direct Connect
RDS ElastiCache
DynamoDB Red...
21
AWS ECS command line
mypc:tmp ohtani$ aws ecs (補完)
シンプルなコマンドラインツール
22
動かしてみる
•  Clusterを作成
•  EC2をContainer Instanceとして起動
•  Task Definitionを作成・登録
•  Taskを起動
•  確認
23
Clusterを作成
mypc:~ ohtani$ aws ecs create-cluster --cluster-name my --region us-
east-1
{
"cluster": {
"clusterName": "m...
24
EC2をContainer Instanceとして起動
•  amzn-ami-2014.09.1-amazon-ecs-optimized-rc1
(ami-a47214cc)を利用(プレビュー時点)
–  CoreOSでもやれる
• ...
25
というわけで
aws ec2 run-instances --image-id ami-a47214cc --instance-
type m3.large --associate-public-ip-address –count 4 -...
26
クラスターを確認してみる
mypc:tmp ohtani$ aws ecs list-clusters --region us-east-1
{
"clusterArns": [
"arn:aws:ecs:us-east-1:myacco...
27
Container Instanceを確認してみる
mypc:tmp ohtani$ aws ecs list-container-instances --cluster my --region us-east-1
{
"containe...
28
Container Instanceの状況を調べる
mypc:tmp ohtani$ aws ecs describe-container-instances --cluster my --container-instances 077e...
29
Task Defintionを作成する
[
{
"environment": [
{ "name" : "WORDPRESS_DB_USER", "value" : "wpuser" },
{ "name" : "WORDPRESS_DB...
30
Task Definitionの登録
mypc:tmp ohtani$ aws ecs register-task-definition --family wp --container-
definitions file://pass_t...
31
Task Definitionの確認
mypc:tmp ohtani$ aws ecs list-task-definitions --
region us-east-1
{
"taskDefinitionArns": [
"arn:aw...
32
Taskを走らせる
•  方法としては2つ
•  ECSのスケジューラにまかせ、コンテナを起動する
–  aws ecs run-task
•  自分で指定したコンテナインスタンス上に起動する
–  aws ecs start-task ...
33
run-task
mypc:tmp ohtani$ aws ecs run-task --cluster my --task-definition wp:1 --count 1 --region us-east-1
{
"tasks": ...
34
デモ
35
start-task(Taskを特定コンテナインスタンスで起動)
mypc:tmp ohtani$ aws ecs start-task --cluster my --container-instances 077e74e6-bffe-4...
36
スケジューラの拡張(現状、as of preview)
•  現状のECSでは
–  スケジューラはdescribe-container-instances, describe-tasks,
start-taskを組み合わせる事で拡張可能...
37
Taskを取り除く
mypc:tmp ohtani$ aws ecs stop-task --task 33357683-a636-46e9-98fe-
c72330e2b106 --cluster my --region us-east...
38
コンテナインスタンスを取り除く
mypc:tmp ohtani$ aws ecs deregister-container-
instance --cluster my --container-instance
077e74e6-bffe...
39
今後の予定
•  パートナーAMI(既にCoreOSは利利⽤用可能)
–  https://coreos.com/docs/running-‐‑‒coreos/cloud-‐‑‒providers/ecs/
•  CloudFormati...
40
Just getting started
41
まとめ
•  ECSは、EC2上でDockerコンテナを運用するため
のContainer as a Service
•  コア部分はピュアなDocker
•  拡張部分はAWSサービスとのインテグレーション
•  プレビュー試せるので、...
42
Upcoming SlideShare
Loading in …5
×

ECS for Docker Meetup #4

ECS for Docker Meetup #4

  • Be the first to comment

ECS for Docker Meetup #4

  1. 1. Amazon  EC2  Container   Service(ECS) アマゾン  データサービス  ジャパン株式会社 ⼤大⾕谷  晋平(@shot6,  ohtani@amazon.co.jp)
  2. 2. 2 EC2  Container  Service  (ECS)
  3. 3. 3 ECSとは? •  Amazon  ECS    =  コンテナ管理理サービス –  シンプルなAPIで、EC2クラスタ上にDockerコンテナを起動/管理理 –  Docker管理理で⾯面倒な所を取り除くために出来たサービス –  EC2インスタンス上に複数コンテナをホストすることが可能 –  クラスタの管理理や構成管理理についての運⽤用が不不要
  4. 4. 4 ECSの考え⽅方 •  コア部分 –  Dockerイメージをそのまま利利⽤用可能。オンプレミスとクラウド の間でシームレスにイメージをやり取り可能 –  DockerとECS  agent(Dockerコンテナ)が動けば良良い –  動かすOSも制約ないため、Dockerピュア環境をよりセキュア に便便利利に利利⽤用できる •  拡張部分 –  AWSの⾮非常に便便利利なサービスとのインテグレーション •  VPC、ELB、RDS、EIP、AutoScalingなどなど –  管理理の容易易性。プログラマブルな管理理に加えGUIでも。
  5. 5. 5 現状のステータス •  ECS⾃自体は無料料 •  起動したEC2/EBSなどのリソース利利⽤用費⽤用は必要 •  現在Limited  Preview •  対応  AWS  リージョン: –  US-‐‑‒East-‐‑‒1  (N.Virginia) •  他のリージョンは間もなくサポート
  6. 6. 6 ECSの仕組み
  7. 7. 7 ECSの要素 •  Container  Instance •  Cluster •  Task/Task  Definition •  Container  :  Dockerコンテナ
  8. 8. 8 Container Instance •  EC2(VPC) •  Docker •  ECS agent
  9. 9. 9
  10. 10. 10 ECS  agent •  オープンソースのエージェント(ASLv2) •  https://github.com/aws/amazon-‐‑‒ecs-‐‑‒agent •  Go⾔言語で書かれています •  というのも、こいつもDockerで動きます •  Docker  Hubにも登録されてます。 –  https://registry.hub.docker.com/u/amazon/amazon-‐‑‒ecs-‐‑‒ agent/ –  docker  pull  amazon/amazon-‐‑‒ecs-‐‑‒agent
  11. 11. 11 Cluster •  リソースプール •  リージョンに閉じている •  Container Instanceの集合 •  管理するトップレベルの概念
  12. 12. 12 Task •  Unit of Work •  関係するコンテナの集合 •  Container Instance上で稼働 •  Task Definition –  Taskの定義 –  JSON
  13. 13. 13 Task Definition [ { "environment": [], "name": "sleep", "image": "busybox", "cpu": 10, "portMappings": [], "entryPoint": [ "/bin/sh" ], "memory": 10, "command": [ "sleep", "360" ], "essential": true } ]
  14. 14. 14 Cluster Container Instance Container Instance Container Instance Container Instance Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Task Definition JSON Task (group of container) ECS Control Plane ECS Agent ECS Agent ECS Agent ECS Agent コンテナの状態管理理 (利利⽤用者は意識識しない)
  15. 15. 15 ECSの良い点   今までのAWSセキュリティ機構が使える
  16. 16. 16 Cluster Container Instance Container Container Container Container Subnet-1(Network ACL) Cluster Container Instance Container Container Container Container セキュリティグループA セキュリティグループB Cluster Container Instance Container Container Container Container Subnet-2(Network ACL) Cluster Container Instance Container Container Container Container セキュリティグループC セキュリティグループD
  17. 17. 17 ECSの良い点   パブリックレポジトリ、プライベートレポジトリも  どちらも(普通に)利用できる
  18. 18. 18 Cluster Container Instance Container Container Container Container Subnet-1(Network ACL) セキュリティグループA Docker Hub Private Repository オンプレミス Container
  19. 19. 19 ECSの良い点   AWSのサービスも普通に利用できるので、Docker とAWSプラットフォームのよいとこどりが出来る
  20. 20. 20 ECS Container Container Container Container EC2VPC ELB Auto Scaling Route53 Direct Connect RDS ElastiCache DynamoDB Redshift ・・・ S3 Glacier EBS ETS SES SNS CloudSearch IAM CloudTrail CloudFormation CloudWatch
  21. 21. 21 AWS ECS command line mypc:tmp ohtani$ aws ecs (補完) シンプルなコマンドラインツール
  22. 22. 22 動かしてみる •  Clusterを作成 •  EC2をContainer Instanceとして起動 •  Task Definitionを作成・登録 •  Taskを起動 •  確認
  23. 23. 23 Clusterを作成 mypc:~ ohtani$ aws ecs create-cluster --cluster-name my --region us- east-1 { "cluster": { "clusterName": "my", "status": "ACTIVE", "clusterArn": "arn:aws:ecs:us-east-1:myaccount:cluster/my" } }
  24. 24. 24 EC2をContainer Instanceとして起動 •  amzn-ami-2014.09.1-amazon-ecs-optimized-rc1 (ami-a47214cc)を利用(プレビュー時点) –  CoreOSでもやれる •  ブートストラップで、ECSの設定を書き込む –  #!/bin/bash –  echo ECS_CLUSTER=my>> /etc/ecs/ecs.config •  IAM Profileで、ecsをつけていないとECS agentが インストールされないので注意
  25. 25. 25 というわけで aws ec2 run-instances --image-id ami-a47214cc --instance- type m3.large --associate-public-ip-address –count 4 --key- name yourkey--subnet-id subnet-03dd1f28 --security- group-ids sg-8d6c9fe9 --iam-instance-profile Name="ecs" --user-data file:///pass_to/ecs.sh --region us-east-1 ecs.sh #!/bin/bash echo ECS_CLUSTER=my >> /etc/ecs/ecs.config もちろんマルチAZにあるContainer InstanceをClusterに含める事も可能
  26. 26. 26 クラスターを確認してみる mypc:tmp ohtani$ aws ecs list-clusters --region us-east-1 { "clusterArns": [ "arn:aws:ecs:us-east-1:myaccount:cluster/my", "arn:aws:ecs:us-east-1:myaccount:cluster/default" ] }
  27. 27. 27 Container Instanceを確認してみる mypc:tmp ohtani$ aws ecs list-container-instances --cluster my --region us-east-1 { "containerInstanceArns": [ "arn:aws:ecs:us-east-1:myaccount:container-instance/077e74e6-bffe-407a- bdc4-07d0dd0e3828", "arn:aws:ecs:us-east-1:myaccount:container-instance/62b30eb7-a72c-4a48- a973-9b0676d831b8", "arn:aws:ecs:us-east-1:myaccount:container-instance/ ee086a69-4c7d-497e-9307-fe6f21500438", "arn:aws:ecs:us-east-1:myaccount:container-instance/ fc8a26ef-0593-431e-9721-5d5c8dbde21d" ] }
  28. 28. 28 Container Instanceの状況を調べる mypc:tmp ohtani$ aws ecs describe-container-instances --cluster my --container-instances 077e74e6-bffe-407a- bdc4-07d0dd0e3828 --region us-east-1 { "failures": [], "containerInstances": [ { "status": "ACTIVE", "registeredResources": [         現状利用中のリソース(CPU, Memory, Port) ], "ec2InstanceId": "i-7b196697", "agentConnected": true, "containerInstanceArn": "arn:aws:ecs:us-east-1:myaccount:container-instance/077e74e6-bffe-407a-bdc4-07d0dd0e3828", "remainingResources": [         現状利用可能なリソース(CPU, Memory, Port) ] } ] }
  29. 29. 29 Task Defintionを作成する [ { "environment": [ { "name" : "WORDPRESS_DB_USER", "value" : "wpuser" }, { "name" : "WORDPRESS_DB_PASSWORD", "value" : "wppass" }, { "name" : "WORDPRESS_DB_NAME", "value" : "wpdb" } ], "name": "wp", "image": "wordpress:latest", "cpu": 100, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "links": ["mysql:mysql"], "memory": 1024, "essential": false }, { "environment": [ { "name" : "MYSQL_ROOT_PASSWORD", "value" : "rootwppass" }, { "name" : "MYSQL_USER", "value" : "wpuser" }, { "name" : "MYSQL_PASSWORD", "value" : "wppass" }, { "name" : "MYSQL_DATABASE", "value" : "wpdb" } ], "name": "mysql”, "image": "mysql”, "cpu": 200, "memory": 2048, "essential": true } ] 他の項目だと  ・entryPoint(ENTRYPOINT)  ・command(CMD)
  30. 30. 30 Task Definitionの登録 mypc:tmp ohtani$ aws ecs register-task-definition --family wp --container- definitions file://pass_to/wp.json --region us-east-1 { "taskDefinition": { "taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1", "containerDefinitions": [ (Task Definitionの内容) ], "family": "wp", "revision": 1 } }
  31. 31. 31 Task Definitionの確認 mypc:tmp ohtani$ aws ecs list-task-definitions -- region us-east-1 { "taskDefinitionArns": [ "arn:aws:ecs:us-east-1:myaccount:task-definition/node-hello:1", "arn:aws:ecs:us-east-1:myaccount:task-definition/sleep360:1", "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1" ] }
  32. 32. 32 Taskを走らせる •  方法としては2つ •  ECSのスケジューラにまかせ、コンテナを起動する –  aws ecs run-task •  自分で指定したコンテナインスタンス上に起動する –  aws ecs start-task --container-instances xxx
  33. 33. 33 run-task mypc:tmp ohtani$ aws ecs run-task --cluster my --task-definition wp:1 --count 1 --region us-east-1 { "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1", “overrides”: { (コンテナオーバーライド) }, "lastStatus": "PENDING", "containerInstanceArn": "arn:aws:ecs:us-east-1:myaccount:container-instance/ee086a69-4c7d-497e-9307-fe6f21500438", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/3a86f627-15b3-4122-af26-4b1477f1ec19", "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1", "lastStatus": "PENDING", "name": "wp" }, { "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/86c3400c-4b61-4414-a2bf-e00f5c949935", "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1", "lastStatus": "PENDING", "name": "mysql" } ] } ] }
  34. 34. 34 デモ
  35. 35. 35 start-task(Taskを特定コンテナインスタンスで起動) mypc:tmp ohtani$ aws ecs start-task --cluster my --container-instances 077e74e6-bffe-407a-bdc4-07d0dd0e3828 --task-definition wp:1 -- region us-east-1 { "failures": [], "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb", “overrides”: { (コンテナをオーバライドするかどうかの設定) }, "lastStatus": "PENDING", "containerInstanceArn": "arn:aws:ecs:us-east-1:myaccound:container-instance/077e74e6-bffe-407a-bdc4-07d0dd0e3828", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/37e89b7c-7f33-4891-a1f2-155cb3ff3d37", "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb", "lastStatus": "PENDING", "name": "wp" }, { "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/08ba51bd-e9fd-4bb8-8b5d-73baaf099130", "taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb", "lastStatus": "PENDING", "name": "mysql" } ] } ] }
  36. 36. 36 スケジューラの拡張(現状、as of preview) •  現状のECSでは –  スケジューラはdescribe-container-instances, describe-tasks, start-taskを組み合わせる事で拡張可能 –  ECSは各コンテナの状態管理とプリミティブなスケジューラのみ提供
  37. 37. 37 Taskを取り除く mypc:tmp ohtani$ aws ecs stop-task --task 33357683-a636-46e9-98fe- c72330e2b106 --cluster my --region us-east-1
  38. 38. 38 コンテナインスタンスを取り除く mypc:tmp ohtani$ aws ecs deregister-container- instance --cluster my --container-instance 077e74e6-bffe-407a-bdc4-07d0dd0e3828 --region us-east-1
  39. 39. 39 今後の予定 •  パートナーAMI(既にCoreOSは利利⽤用可能) –  https://coreos.com/docs/running-‐‑‒coreos/cloud-‐‑‒providers/ecs/ •  CloudFormationでECS⽤用コンテナインスタンス起動が簡単に •  ELBインテグレーション •  CloudWatchインテグレーション –  CloudWatchでクラスターおよび各コンテナのメトリクスが可視化 –  CloudWatch  Logsでログの可視化 •  タギング –  タグでコンテナをグルーピングしてコスト管理理 •  Elastic  IP •  マネージメントコンソール
  40. 40. 40 Just getting started
  41. 41. 41 まとめ •  ECSは、EC2上でDockerコンテナを運用するため のContainer as a Service •  コア部分はピュアなDocker •  拡張部分はAWSサービスとのインテグレーション •  プレビュー試せるので、お試しください –  http://aws.amazon.com/ecs/preview/ •  いつも通り、AWSは常にフィードバック募集中です
  42. 42. 42

    Be the first to comment

    Login to see the comments

  • TomohiroIgarashi

    Jan. 17, 2015
  • hiroyukinakamura78

    Jan. 17, 2015
  • toutoutakataka

    Jan. 17, 2015
  • takashiyoshida75033

    Jan. 17, 2015
  • ymatsuki

    Jan. 18, 2015
  • takashiimura10

    Jan. 18, 2015
  • AkiwaYutaka

    Jan. 19, 2015
  • yanana

    Jan. 27, 2015
  • TakashiToyofuku

    May. 29, 2015
  • yasuyama

    Jun. 29, 2015
  • HiromichiYukawa

    Jul. 6, 2015
  • TakutoOno

    Dec. 14, 2016
  • kouheifujigaya

    Dec. 27, 2016
  • YoheiTakeda

    Mar. 1, 2017

ECS for Docker Meetup #4

Views

Total views

13,178

On Slideshare

0

From embeds

0

Number of embeds

9,251

Actions

Downloads

32

Shares

0

Comments

0

Likes

14

×