Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon ECS & Amazon ECR 試行錯誤
Search
Yohei Kawahara
March 21, 2016
1
2.5k
Amazon ECS & Amazon ECR 試行錯誤
「JAWS-UG 福岡:また濃い目にAWSの話をしてみよう」でお話させて頂いた資料です。
Yohei Kawahara
March 21, 2016
Tweet
Share
More Decks by Yohei Kawahara
See All by Yohei Kawahara
20191002_CircleCIMeetupFukuoka#2
inokappa
1
830
kix_009_20190429
inokappa
0
830
2019-04-18 CircleCI Meetup Fukuoka #1
inokappa
2
8.2k
開発で使える AWS の API 操作を模倣する (OSS) ツールを探してみた/JAWS-UG Kagoshima Vol.8
inokappa
1
1.2k
隙間時間を使って exercism.io を始め隊 | リモートで勉強会 #2
inokappa
0
430
Congratulations fukuokarb#100
inokappa
0
4k
moto を 'もっと' 使おう/PyFukuoka#4
inokappa
0
4.5k
github-enterprise-user-kai-desuyone
inokappa
0
110
Elixir and AWS Tutorial
inokappa
0
550
Featured
See All Featured
It's Worth the Effort
3n
184
28k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
31
2.1k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Designing Experiences People Love
moore
139
23k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Navigating Team Friction
lara
183
15k
Transcript
Amazon ECS と Amazon ECR 試⾏錯誤 2016.03.21 JAWS-UG福岡 また濃い⽬に AWS の話をしてみよう
かっぱ(@inokara)
提供
AWSを活⽤しながらビジネスに集中できる コンシェルジュサービス これは cloudpack の CM です
24時間365⽇ 定額課⾦/ 請求書払い PCI DSS、ISMS、Pマーク取得済みの運⽤体制 監視運⽤保守 企業 AWS これは cloudpack
の CM です
(1,500⽇間) ※ 2010年5⽉cloudpackサービススタート 36,000時間 連続稼働 (※) これは cloudpack の CM
です
4 社 社超 プロジェク ト超 500 600 5年間 5年間AWSのみで運⽤保守 これは
cloudpack の CM です
アジア地域4社 世界28社 最上位パートナー プレミアコンサルティングパートナー これは cloudpack の CM です
企業規模別 cloudpack利⽤⽐率 36% 27 37 % % 中⼩企業 中堅企業 ⼤企業
これは cloudpack の CM です
Web系 91 % うち33%が ソーシャルゲームや メディアサイト cloudpackの主な利⽤状況 これは cloudpack の
CM です
これは cloudpack の CM です
これは cloudpack の CM です
これは cloudpack の CM です
アジェンダ ☁ 注意 ☁ ⾃⼰紹介 ☁ Amazon ECS & ECR
⼊⾨ ☁ Amazon ECS & ECR の気になるところ ☁ Amazon ECS で負荷試験環境を作る試み ☁ 終わり ☁ おまけ
注意 ☁ 私個⼈が独⾃の観点で Amazon EC2 Container Service と Amazon EC2
Container Registry について調べたメモを紹介させて頂きます ☁ 運⽤事例等の役⽴つ情報は無いかもしれません ☁ 本資料に記載された内容の全ては作成時点の内容となります ☁ 本資料内で Amazon EC2 Container Service を Amazon ECS と Amazon EC2 Registry を Amazon ECR と省略して記載している部 分があります ☁ とても滑⾆が悪く、噛みまくりますのでお聞き苦しい部分が多いかと 思いますがご容赦下さい
⾃⼰紹介 ☁ 川原洋平(@inokara) ☁ 「かっぱ」とお気軽にお声がけ下さい ☁ 初⽼丸(40 歳) ☁ アイレット株式会社
cloudpack 事業部所属 ☁ ⾹椎からリモート勤務(もうすぐ 2 年⽬) ☁ 好きなフォント:メイリオ
最近、フルマラソンを完⾛しました!
Amazon EC2 Container Service EC2 Container Registry ⼊⾨
ということで… まずは…
None
すいません… Docker ⾃体のお話は割愛します
Amazon ECS と ECR を三⾏で ☁ EC2 上で Docker コンテナのクラスタを運⽤管理出
来るサービス ☁ S3 を使って Docker Hub のようなコンテナイメー ジリポジトリを提供しているサービス ☁ ざっくり⾔うと AWS が提供する Docker Machine / Docker Swarm / Docker Compose そして Docker Hub
Amazon ECS と ECR を⼀枚の絵で
Amazon EC2 Container Service
Amazon ECS が提供する機能 ☁ Docker サポート ☁ フルマネージドな Docker コンテナクラスタ管理
☁ リソースのスケジューリング ☁ AWS の各種サービスとの連携
Amazon ECS の構成要素 ☁ Cluster ☁ Container Instance ☁ ECS
Agent ☁ Task Definition ☁ Task ☁ Container ☁ Run Task ☁ Service http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs
Amazon ECS の構成要素を⼀枚の絵で http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs
Amazon ECS ってなんぼ? ☁ ECS ⾃体の利⽤は無料 ☁ Container Instance として利⽤する
EC2 の料 ⾦(Instance と EBS の料⾦) ☁ ELB を利⽤する場合には ELB の料⾦
Amazon ECS を操作する⽅法 ☁ マネジメントコンソール ☁ AWS CLI ☁ ECS
CLI ☁ AWS SDK
Amazon EC2 Container Registry
Amazon ECR が提供する機能 ☁ Docker サポート ☁ コンテナイメージは S3 に保存
☁ IAM によるイメージへのアクセスコントロール ☁ コンテナイメージは HTTPS で暗号化されて送信 され、S3 側で暗号化される
Amazon ECR の構成要素 ☁ Registry ☁ https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com という Registry URL
が与え られる(現時点ではバージニアとオレゴンリージョンのみ提供) ☁ Authorization token ☁ aws-cli の get-logon コマンドでログイントークンを取得してログインする ☁ Repository Policy ☁ IAM による制限 ☁ Image ☁ ECR に登録されたコンテナイメージはローカルの Docker Engine や ECS の Task Definition 等から利⽤することが出来る
Amazon ECR の構成要素を⼀枚の絵で
Amazon ECR ってなんぼ? ☁ ストレージ使⽤料 0.10 USD/GB/Month ☁ 受信:Amazon EC2
Container Registry への転送 (docker push)は $0.000 /GB ☁ 送信:Amazon EC2 Container Registry からの転送 (docker pull)は $0.000 /GB 〜 ☁ 同⼀リージョン間は無料 ☁ リージョンを跨ぐ場合には受送信ともに費⽤が発⽣する
Amazon ECR を操作する⽅法 ☁ マネジメントコンソール ☁ AWS CLI ☁ AWS
SDK
安⼼してください これまでの内容は ドキュメントに載っています
Amazon ECS & ECR の気になるところ
ここからは 私が調べたことをお話させて頂きますが…
安⼼してください 検索すれば 何かしら引っかかると思います
(1)コンテナ上のアプリケーションログはどうする? ☁ ログ⽤コンテナを⽤意して CloudWatch Logs に ☁ Docker の Logging
Driver を利⽤する
(1)コンテナ上のアプリケーションログはどうする? ☁ ログ⽤コンテナを⽤意して CloudWatch Logs に https://blogs.aws.amazon.com/application-management/post/TxFRDMTMILAA8X/Send-ECS-Container-Logs-to-CloudWatch-Logs-for-Centralized-Monitoring CloudWatch Logs タスク内でログ⽤の
コンテナを定義 Syslog と CloudWatch Logs agent を動かす Apache の CustomLog で logger を叩かせる
(1)コンテナ上のアプリケーションログはどうする? ☁ Docker の Logging Driver を利⽤する ☁ Logging Driver
は以下の出⼒先をサポート ☁ json-file(Default) ☁ syslog ☁ journald ☁ gelf ☁ fluentd ☁ awslogs(CloudWatch Logs) ☁ 但し、Task Definition に awslogs は現時点で定義出来ないので注意
(2)監視はどうする? ☁ CloudWatch ☁ コンテナ⾃体はその他のツールを組み合わせる
(2)監視はどうする? ☁ CloudWatch ☁ コンテナインスタンスの CPU 使⽤率、Network I/O 等 ☁
Cluster 単位で CPU ユニット数、メモリ使⽤量 ☁ Service 単位で CPU ユニット数、メモリ使⽤量 ☁ コンテナ⾃体はその他のツールを組み合わせる ☁ docker stats ☁ Mackerel ☁ Datadog
(2)監視はどうする? https://speakerdeck.com/soulou/docker-containers-monitoring ☁ ちなみにコンテナ監視は以下の資料が参考になります
(3)プライベートリポジトリはどうする? ☁ Amazon ECR を使う ☁ ECS クラスタ内に Docker Registory
を構築する
(3)プライベートリポジトリはどうする? ☁ Amazon ECR を使う ☁ 但し、東京リージョンではまだ使えない ☁ ECS クラスタ内に
Docker Registory を構築する ☁ https://github.com/docker/distribution ☁ https://github.com/elasticio/docker-registry-ecs
(4)Dynamic Port Mapping への対応は? ☁ ELB と組み合わせる場合には Port を固定する必 要あり
☁ Dynamic Port Mapping を有効活⽤したい場合 には Consul や registrator 等の外部ツールを利 ⽤する必要がある
(5)Amazon ECR って ECS 以外から使える? ☁ 安⼼して下さい使えますよ ☁ 例えば、Elastic Beanstalk
でも ☁ 例えば、オンプレミス上の Docker Engine でも
ここで終わったら… ぜんぜん濃くない話で終わってしまうので…
Amazon ECS + ecs-cli や docker compose 等で 負荷試験環境を作る試み
ここからは あくまでも試してみた系のお話です…
実⽤的か運⽤可能かについては度外視です 実際に試される場合にはご注意下さい
僕が知っている負荷試験ツール ☁ メジャーどころで JMeter ☁ Apache インストールすれば使える ab ☁ お⼿軽な
httperf や Siege ☁ 名前は聞いたことがある Gatling ☁ そして… Python で実装されている Locust
僕が考える負荷試験する時の悩みどころ ☁ 負荷をかける側(⼤失敗した経験あり〼) ☁ リソース不⾜で負荷を⼗分にかけることが出来ない ☁ 負荷を⾒ながらスケールさせたい ☁ シナリオ作り(失敗した経験あり〼) ☁
Web ページの作りが複雑になってきている ☁ Ajax から API で情報を取得してページを⽣成するとか…
ということで…
負荷を掛ける側のリソース不⾜や スケールを⼿軽に⾏いたいという要望は AWS でカジュアルに解決出来るのでは…
と思ったら…
Elastic Beanstalk で Locust を動かす記事が… https://blogs.aws.amazon.com/application-management/post/Tx351HCZ9D1RQ84/Using-Locust-on-AWS-Elastic-Beanstalk-for-Distributed-Load-Generation-and-Testin
おお…
でも、ECS ではどうなんだろう…
とググったら既に試みられている⽅がいらっしゃった! http://hakobera.hatenablog.com/entry/2016/03/02/084204
⼀応、⾃分でも ECS でどんな⾵に実現する のかを…
考えてみた
ところで…負荷試験ツール Locust とは ☁ テストシナリオを Python で書くことが出来る ☁ サーバー・クライアント構成 ☁
複数のノードを利⽤した分散テストを⾏うことが 出来る ☁ Web UI を備えている ☁ Web サイト以外のテストも⾏うことが出来る
ちなみに… Locust の意味って…
先ほどのロゴを⾒てなんとなーく お気づきでしょうが…
None
バッタを ECS 上でどのように飼いならすのか ☁ Locust Master と Locust Slave をそれぞれ異なる
Task Definition に分割する ☁ 同⼀の ECS クラスタに Master と Slave を個別にデプロイ する ☁ コンテナインスタンスを跨って Locust クラサバ構成を構築 する為に Consul にお出まし頂いた ☁ Consul クラスタを構成は Atlas で Token を発⾏して -- atlas-join を利⽤した
もう⼀度、構成を
DEMO 環境(前)
バッタが ECS クラスタ上で ⼤量発⽣する様を御覧ください…
DEMO 環境(後)
バッタがバタバタ(困ったこととか課題とか) ☁ Docker Compose では docker-compose.yml 内に定義されている Service 毎に scale
コマンドが発⾏することが出来たが、ecs-cli compose 経由だと Task 毎にしか scale することが出来なかった ☁ Consul コンテナは必ず各コンテナインスタンス上で起動する必要が あるので⼿動でコンテナを起動する必要があった ☁ Locust Master が起動しているコンテナインスタンス IP を保存する だけのみ Consul を動かしておくのは無駄が⼤きい(かも) ☁ 1 台のコンテナインスタンス内にどのくらいコンテナを起動するか悩 みドコロ→コンテナインスタンスを増やしていく感じが良さそう
そして、最⼤の問題 ☁ スレーブのスケールアップには Locust が追従す るけど、スケールダウンには追従しない問題… ☁ 原因はコンテナを停⽌した時に exit 0
しない 為、Locust マスターがスレーブの停⽌を検知し ないという…
残念
解決したらブログに書きます
最後に
Amazon ECS と ECR を触った率直な感想 ☁ コンテナのスケールイン、スケールアウトが楽 ☁ ecs-cli を使えばマネジメントコンソールほぼ不要で楽
☁ Docker Compose の YAML がほぼそのまま利⽤出来るのが嬉 しい ☁ ECR でプライベートリポジトリが利⽤出来るは有り難い(但 し、まだ東京リージョンには展開されていない) ☁ 実際に試せていないけど AWS の各種リソースとうまく組み合 わせることで旨味がより引き出せそう
Amazon ECS と ECR を触った率直な感想 ☁ 独⾃の概念(クラスタ管理、グループ化、スケ ジューラ)を未だに理解出来ていない… ☁ サービス検知(アプリケーションの死活や
Listen しているポート等の検知)は別のツールの助けが 必要(Docker Link はあくまでも同⼀インスタン ス内のコンテナ間に限定される)
参考リンク ☁ http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs ☁ http://qiita.com/con_mame/items/1df441d86c703a0e6fa6 ☁ http://www.slideshare.net/hawinternational/jenkinsamazon-ecs-ci-56080630 ☁ https://blogs.aws.amazon.com/application-management/post/TxFRDMTMILAA8X/ Send-ECS-Container-Logs-to-CloudWatch-Logs-for-Centralized-Monitoring
☁ https://aws.amazon.com/blogs/compute/service-discovery-via-consul-with-amazon- ecs/ ☁ https://speakerdeck.com/soulou/docker-containers-monitoring ☁ https://blogs.aws.amazon.com/application-management/post/Tx351HCZ9D1RQ84/ Using-Locust-on-AWS-Elastic-Beanstalk-for-Distributed-Load-Generation-and-Testin ☁ http://hakobera.hatenablog.com/entry/2016/03/02/084204 ☁ http://inokara.hateblo.jp/entry/2016/03/19/033028
質問…(はお⼿柔らかに…)
提供
None