SlideShare a Scribd company logo
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
Agenda
• Containerとは?
• Amazon EC2 Container Service - Basic
• Amazon EC2 Container Service - Update
• Amazon EC2 Container Service - Advanced
• まとめ
3
Containerとは?
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
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
作業単位としての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: 10
Mem: 30 CPU: 2000
Mem: 1000
CPU: 10
Mem: 30CPU: 10
Mem: 30
Scheduler
Cluster Manager
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 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
Cluster管理のユースケース
• Service & Application
– シンプルなモデル Docker imageをbuild, test, deploy
– Microservices
– Blue-Greenデプロイ
• Batch Jobs
– リソースを共有することで、バーストにも対応しやすい
– Auto Scaling/RI/Spotを使って、よりコストを下げる
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
必要な要素
• Cluster管理
– Cluster全体の状態管理
• グループ化
– 同一マシンで動かしたい
Container群の管理
• Scheduler
– タスク配置、状態管理、
デプロイ
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
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 Task
25
Cluster
Container Instance
Amazon ECSチュートリアル
• 自動でContainer
InstanceにTaskが
割り振られる
Agent Agent
Task Definition
Task
Task Definition
Run Task
26
Cluster
Container Instance
Amazon ECSチュートリアル
• Task内のContainer
が起動する
Agent Agent
Task Definition
Task
Task Definition
Run Task
27
Cluster
Container Instance
Amazon ECSチュートリアル
• ServiceでWeb
Taskを開始する
Agent Agent
Task
Task Definition
Run Task Service
Task Definition
28
Cluster
Container Instance
Amazon ECSチュートリアル
• 自動でContainer
InstanceにTaskが
割り振られる
Agent Agent
Task
Task Definition
Run Task
Task
Service
Task Definition
Task
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
Amazon ECS Components
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
Amazon ECS: Cluster
• Container Instance
の集合体
• Cluster内のInstance
が持つリソースをま
とめて管理
33
Amazon ECS: Container Instance
• Containerのホストと
なるAmazon EC2
• VPC内の任意の
Instanceを利用可能
– Docker+ECS Agentが
動いていることが必要
– Amazon ECS-
optimized AMI
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
• Scheduler
– Run Task, Service
Service
Cluster
Container Instance
Agent Agent
Task
Container
Container
Task Task
Task DefinitionTask Definition
36
Amazon ECS: Task Definition
• Containerの集合を定義
– 必ず同じInstanceで稼働
– 要求するリソースを指定
• CPU, memory, (Port)
• ボリュームも定義可能
– Instanceのファイルシス
テムを利用できる
• バージョニングが可能
37
Task Definition: Overview
Volume definitions
Container definitions
Container Instanceの
ファイルシステムをマウ
ントする場合、定義する
稼働させるContainerの
情報を定義する
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,
"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
{
"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
{
"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
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
• Scheduler
– Run Task, Service Cluster
Container Instance
Agent Agent
Task
Container
Container
Task Task
Task DefinitionTask Definition
ServiceRun Task
46
Amazon ECS: Run Task
• Batchジョブの様な
ワークロードに最適
• Task Definitionから
指定した数のTaskを
実行する
– Container Instance
は自動的に選ばれる
47
Amazon ECS: Service
• Web/APIの様に長期稼働する
ワークロードに最適
• Taskを必要数保ってくれるスケ
ジューラ
– 自動復旧にも対応
• 新しいTask Definitionをデプロ
イしつつ切替
• Elastic Load Balancingとの連
携も可能
48
Amazon ECS: Serviceの例
49
Amazon ECS: ServiceのUpdate
• Serviceが使うTask DefinitionをUpdateすると、
新しいTaskをデプロイできる
• 空いているリソースで新しい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の料金
– Spotを利用する場合はTerminateされる可能性を考慮する
• Elastic Load Balancingを利用する場合は
Elastic Load Balancingの料金
57
Amazon EC2 Container Service - Update
58
New: Amazon EC2 Container Registry
• 完全マネージドなDocker containe
registry
• Amazon ECSと連携
• 通信経路、保存時に暗号化
• IAMユーザ、ロール
• 高い可用性とスケーラビリティ
• 複数のリージョンで利用可能
• $0.10/GB/月 + AWSデータ転送料
• もう間もなくです! サインアップする
と、通知や早期アクセスの可能性
aws.amazon.com/ecr
59
New: Amazon EC2 Container Registry
aws.amazon.com/ecr
• 完全マネージドなDocker containe
registry
• Amazon ECSと連携
• 通信経路、保存時に暗号化
• IAMユーザ、ロール
• 高い可用性とスケーラビリティ
• 複数のリージョンで利用可能
• $0.10/GB/月 + AWSデータ転送料
• もう間もなくです! サインアップする
と、通知や早期アクセスの可能性
60
New: AZを意識したScheduling
• Service Schedulerの機能
• 可用性の向上、より効率の良い
負荷分散
• 新しいTaskがAZにまたがって
バランスが保たれる
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
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
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
Amazon EC2 Container Service - Advanced
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
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
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
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
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
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
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
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
Amazon ECS: Agent Update
• マネージメントコン
ソールやCLIから、
Agentをアップデート
可能
• Amazon ECS-
optimized AMIで利
用可能
※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html
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 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/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
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/1vR8yWm
82
ご参加ありがとうございました。
83
Appendix
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
Amazon ECS: Per Instance Limitation
• 現時点ではContainer単位ではなくInstance単位となっているもの
• Security Group
– 全てのContainerの最大公約数的な指定が必要
– Elastic Load Balancingを通せば外部からの通信は絞れる
• IAM Roles
– 全てのContainerの最大公約数的な指定が必要
• AWS CloudWatch metrics
– Container毎のメトリクスは取得されない (Cluster/Service毎は取得される)
– 必要であれば、他のソリューションとの組み合わせ
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
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
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
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
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
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
Code
{}
Config
{}
Config
{}
Config
AWS
CodePipeline
AWS
CodeDeploy
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
After Docker…
+ <>+
Build Test ProductionDevelopment
<>
<>
+
{} {} {}
98
After Docker…
+
Provisioning
Code
<>
Application
Code
Docker
Image
+
Dockerfile
Docker
Image
Build Test ProductionDevelopment
99
After Docker…
Build Test ProductionDevelopment
+
Provisioning
Code
<>
Application
Code
Docker
Image
+
Dockerfile
Docker
Image
Amazon ECS
Amazon ECR

More Related Content

PDF
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
PDF
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
PDF
20190919 よくご相談いただくセキュリティの質問と考え方
PDF
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
PDF
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
PPTX
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
20190919 よくご相談いただくセキュリティの質問と考え方
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用

What's hot (20)

PDF
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
PDF
20200811 AWS Black Belt Online Seminar CloudEndure
PDF
20190522 AWS Black Belt Online Seminar AWS Step Functions
PPTX
CloudFront経由でのCORS利用
PDF
AWS Black Belt Online Seminar 2017 AWS X-Ray
PDF
20180509 AWS Black Belt Online Seminar Amazon GuardDuty
PDF
20180220 AWS Black Belt Online Seminar - Amazon Container Services
PDF
20200526 AWS Black Belt Online Seminar AWS X-Ray
PDF
ZabbixによるAWS監視のコツ
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PDF
20190320 AWS Black Belt Online Seminar Amazon EBS
PDF
DevOps with Database on AWS
PDF
Open Match Deep Dive
PDF
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
PDF
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
PPTX
[社内勉強会]ELBとALBと数万スパイク負荷テスト
PDF
Amazon Kinesis Familyを活用したストリームデータ処理
PDF
AWS Black Belt Online Seminar 2017 Amazon Kinesis
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20200811 AWS Black Belt Online Seminar CloudEndure
20190522 AWS Black Belt Online Seminar AWS Step Functions
CloudFront経由でのCORS利用
AWS Black Belt Online Seminar 2017 AWS X-Ray
20180509 AWS Black Belt Online Seminar Amazon GuardDuty
20180220 AWS Black Belt Online Seminar - Amazon Container Services
20200526 AWS Black Belt Online Seminar AWS X-Ray
ZabbixによるAWS監視のコツ
20200630 AWS Black Belt Online Seminar Amazon Cognito
20190320 AWS Black Belt Online Seminar Amazon EBS
DevOps with Database on AWS
Open Match Deep Dive
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Amazon Kinesis Familyを活用したストリームデータ処理
AWS Black Belt Online Seminar 2017 Amazon Kinesis
Ad

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

PDF
ECS for Docker Meetup #4
PDF
20170413 aws–windows users meetup
PDF
Amazon EC2 Container Service Deep dive
PDF
Amazon ECS事始め
PDF
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
PDF
Application Deployment on AWS
PDF
AWSでDockerを扱うためのベストプラクティス
PDF
6 月 18 日 Next - Kubernetes のコンテナ技術ですべてをシンプルに
PPTX
Amazon Redshiftのターゲットエンドポイントとしての利用
PDF
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
PDF
AWSとGCPを使用したインフラ環境
PDF
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
PPTX
2019年度 CaaS ワークショップ @ NTTコム
PDF
[AWS Start-up ゼミ] よくある課題を一気に解説!〜御社の技術レベルがアップする 2017 夏期講習〜
PDF
AWS初心者向けWebinar AWS上にWebサーバーシステムを作ってみましょう ~まずは仮想サーバーから[演習つき]~
PPTX
Packerを使ってみよう(aws編)
PDF
AWS Lambda Updates
PDF
JAWS-UG Meets Windows (JAWS Days 2017)
PDF
当社のawsへの取組
PPTX
AWSで認証機能のついたサイトを手軽に構築する(Cognito+CloudFront+API Gateway)
ECS for Docker Meetup #4
20170413 aws–windows users meetup
Amazon EC2 Container Service Deep dive
Amazon ECS事始め
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
Application Deployment on AWS
AWSでDockerを扱うためのベストプラクティス
6 月 18 日 Next - Kubernetes のコンテナ技術ですべてをシンプルに
Amazon Redshiftのターゲットエンドポイントとしての利用
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks
AWSとGCPを使用したインフラ環境
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
2019年度 CaaS ワークショップ @ NTTコム
[AWS Start-up ゼミ] よくある課題を一気に解説!〜御社の技術レベルがアップする 2017 夏期講習〜
AWS初心者向けWebinar AWS上にWebサーバーシステムを作ってみましょう ~まずは仮想サーバーから[演習つき]~
Packerを使ってみよう(aws編)
AWS Lambda Updates
JAWS-UG Meets Windows (JAWS Days 2017)
当社のawsへの取組
AWSで認証機能のついたサイトを手軽に構築する(Cognito+CloudFront+API Gateway)
Ad

More from Amazon Web Services Japan (20)

PDF
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
PDF
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
PDF
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
PDF
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
PDF
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
PDF
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
PDF
Amazon QuickSight の組み込み方法をちょっぴりDD
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
PDF
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
PDF
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
PDF
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
PPTX
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
PDF
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
PDF
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
Infrastructure as Code (IaC) 談義 2022
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
20220409 AWS BLEA 開発にあたって検討したこと
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
Amazon QuickSight の組み込み方法をちょっぴりDD
マルチテナント化で知っておきたいデータベースのこと
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...

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

  • 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 Agenda • Containerとは? • Amazon EC2 Container Service - Basic • Amazon EC2 Container Service - Update • Amazon EC2 Container Service - Advanced • まとめ
  • 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 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
  • 7. 7 Amazon EC2 Container Service - Basic
  • 8. 8 Amazon EC2 Container Serviceとは? • Amazon ECS • Docker Container群をAmazon EC2のCluster上で 管理できるサービス • 高いスケーラビリティ • AWSの他の機能・サービスとの連携
  • 13. 13 Cluster管理の必要性 • Instance毎にアプリ 管理しない – リソースの仮想化 • Clusterとして管理 すると、適切な配置 が可能 – Scheduler – Containerならどこ でも簡単に配置 ~80%
  • 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
  • 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 Cluster管理のユースケース • Service & Application – シンプルなモデル Docker imageをbuild, test, deploy – Microservices – Blue-Greenデプロイ • Batch Jobs – リソースを共有することで、バーストにも対応しやすい – Auto Scaling/RI/Spotを使って、よりコストを下げる
  • 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 必要な要素 • Cluster管理 – Cluster全体の状態管理 • グループ化 – 同一マシンで動かしたい Container群の管理 • Scheduler – タスク配置、状態管理、 デプロイ
  • 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
  • 23. 23 Cluster Container Instance Amazon ECSチュートリアル • Task Definitionを 定義する Agent Agent Task DefinitionTask Definition
  • 24. 24 Cluster Container Instance Amazon ECSチュートリアル • Run TaskでBatch Taskを開始 Agent Agent Task DefinitionTask Definition Run Task
  • 25. 25 Cluster Container Instance Amazon ECSチュートリアル • 自動でContainer InstanceにTaskが 割り振られる Agent Agent Task Definition Task Task Definition Run Task
  • 26. 26 Cluster Container Instance Amazon ECSチュートリアル • Task内のContainer が起動する Agent Agent Task Definition Task Task Definition Run Task
  • 27. 27 Cluster Container Instance Amazon ECSチュートリアル • ServiceでWeb Taskを開始する Agent Agent Task Task Definition Run Task Service Task Definition
  • 28. 28 Cluster Container Instance Amazon ECSチュートリアル • 自動でContainer InstanceにTaskが 割り振られる Agent Agent Task Task Definition Run Task Task Service Task Definition Task
  • 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
  • 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 Amazon ECS: Cluster • Container Instance の集合体 • Cluster内のInstance が持つリソースをま とめて管理
  • 33. 33 Amazon ECS: Container Instance • Containerのホストと なるAmazon EC2 • VPC内の任意の Instanceを利用可能 – Docker+ECS Agentが 動いていることが必要 – Amazon ECS- optimized AMI
  • 34. 34 Amazon ECS: Agent • Amazon ECSの endpointと通信する Agent • Go言語製のDocker image • Docker Hubで提供
  • 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 Amazon ECS: Task Definition • Containerの集合を定義 – 必ず同じInstanceで稼働 – 要求するリソースを指定 • CPU, memory, (Port) • ボリュームも定義可能 – Instanceのファイルシス テムを利用できる • バージョニングが可能
  • 37. 37 Task Definition: Overview Volume definitions Container definitions Container Instanceの ファイルシステムをマウ ントする場合、定義する 稼働させるContainerの 情報を定義する
  • 38. 38 Task Definition: Overview Shared data volume PHP App Time of day App Task Definition
  • 39. 39 Task Definition: Overview Container Instance Schedule Shared data volume PHP App Time of day App Task Definition Task
  • 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 { "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 { "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 Amazon ECS: Task • Task Definitionが実体 化されたもの – 1つのTask Definition から複数のTaskが生成 • リソースに余裕のある Container Instanceで 実行される
  • 44. 44 Amazon ECS: Container • Taskの実体である Docker Container – 1つのTaskに複数の Containerが含まれる • Container Instance 上で実行される
  • 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 Amazon ECS: Run Task • Batchジョブの様な ワークロードに最適 • Task Definitionから 指定した数のTaskを 実行する – Container Instance は自動的に選ばれる
  • 47. 47 Amazon ECS: Service • Web/APIの様に長期稼働する ワークロードに最適 • Taskを必要数保ってくれるスケ ジューラ – 自動復旧にも対応 • 新しいTask Definitionをデプロ イしつつ切替 • Elastic Load Balancingとの連 携も可能
  • 49. 49 Amazon ECS: ServiceのUpdate • Serviceが使うTask DefinitionをUpdateすると、 新しいTaskをデプロイできる • 空いているリソースで新しいTaskを起動しなが ら、徐々に古いTaskを止めていく – 中間では、新旧のTaskが混在する
  • 50. 50 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task:1Task:1 Task:1
  • 51. 51 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:1 Task:1
  • 52. 52 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:1 Task:1Task:2 Task:2
  • 53. 53 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:2 Task:2
  • 54. 54 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:1Task:2 Task:2Task:2
  • 55. 55 Cluster Amazon ECS: ServiceのUpdate Service Task Definition:1 Task Definition:2 Task:2 Task:2Task:2
  • 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 Amazon EC2 Container Service - Update
  • 58. 58 New: Amazon EC2 Container Registry • 完全マネージドなDocker containe registry • Amazon ECSと連携 • 通信経路、保存時に暗号化 • IAMユーザ、ロール • 高い可用性とスケーラビリティ • 複数のリージョンで利用可能 • $0.10/GB/月 + AWSデータ転送料 • もう間もなくです! サインアップする と、通知や早期アクセスの可能性 aws.amazon.com/ecr
  • 59. 59 New: Amazon EC2 Container Registry aws.amazon.com/ecr • 完全マネージドなDocker containe registry • Amazon ECSと連携 • 通信経路、保存時に暗号化 • IAMユーザ、ロール • 高い可用性とスケーラビリティ • 複数のリージョンで利用可能 • $0.10/GB/月 + AWSデータ転送料 • もう間もなくです! サインアップする と、通知や早期アクセスの可能性
  • 60. 60 New: AZを意識したScheduling • Service Schedulerの機能 • 可用性の向上、より効率の良い 負荷分散 • 新しいTaskがAZにまたがって バランスが保たれる
  • 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 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 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 Amazon EC2 Container Service - Advanced
  • 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 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 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 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 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 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 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 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 Amazon ECS: Agent Update • マネージメントコン ソールやCLIから、 Agentをアップデート 可能 • Amazon ECS- optimized AMIで利 用可能 ※ http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html
  • 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
  • 77. 77 Amazon ECSでCluster管理を実現しよう • Docker Containerのため のCluster管理サービス • マネージドで提供されるの が大きな特徴 • シンプルな仕組みなので、 拡張性が高い
  • 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
  • 80. 80 Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  • 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 Amazon ECS: Per Instance Limitation • 現時点ではContainer単位ではなくInstance単位となっているもの • Security Group – 全てのContainerの最大公約数的な指定が必要 – Elastic Load Balancingを通せば外部からの通信は絞れる • IAM Roles – 全てのContainerの最大公約数的な指定が必要 • AWS CloudWatch metrics – Container毎のメトリクスは取得されない (Cluster/Service毎は取得される) – 必要であれば、他のソリューションとの組み合わせ
  • 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 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 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 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 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できる
  • 92. 92 DevOpsとは? DevOps = ライフサイクルを高速化する効率の良さ 開発者 顧客 releasetestbuild plan monitor デリバリのパイプライン フィードバックループ ソフトウェア開発のライフサイクル
  • 93. 93 DevOps lifecycle Build Test ProductionDevelopment <> <> Application Code Artifact
  • 94. 94 DevOps lifecycle Build Test ProductionDevelopment <> <> Application Code Artifact AWS CodePipeline AWS CodeDeploy
  • 95. 95 DevOps lifecycle Build Test ProductionDevelopment <> <> + AMI Provisioning Code Application Code Artifact Provisioning Code {} Config {} Config {} Config AWS CodePipeline AWS CodeDeploy
  • 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 After Docker… + <>+ Build Test ProductionDevelopment <> <> + {} {} {}
  • 99. 99 After Docker… Build Test ProductionDevelopment + Provisioning Code <> Application Code Docker Image + Dockerfile Docker Image Amazon ECS Amazon ECR