Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon ECS & Amazon ECR 試行錯誤

Yohei Kawahara
March 21, 2016
2.3k

Amazon ECS & Amazon ECR 試行錯誤

「JAWS-UG 福岡:また濃い目にAWSの話をしてみよう」でお話させて頂いた資料です。

Yohei Kawahara

March 21, 2016
Tweet

Transcript

  1. アジェンダ ☁ 注意 ☁ ⾃⼰紹介 ☁ Amazon ECS & ECR

    ⼊⾨ ☁ Amazon ECS & ECR の気になるところ ☁ Amazon ECS で負荷試験環境を作る試み ☁ 終わり ☁ おまけ
  2. 注意 ☁ 私個⼈が独⾃の観点で Amazon EC2 Container Service と Amazon EC2

    Container Registry について調べたメモを紹介させて頂きます ☁ 運⽤事例等の役⽴つ情報は無いかもしれません ☁ 本資料に記載された内容の全ては作成時点の内容となります ☁ 本資料内で Amazon EC2 Container Service を Amazon ECS と Amazon EC2 Registry を Amazon ECR と省略して記載している部 分があります ☁ とても滑⾆が悪く、噛みまくりますのでお聞き苦しい部分が多いかと 思いますがご容赦下さい
  3. ⾃⼰紹介 ☁ 川原洋平(@inokara) ☁ 「かっぱ」とお気軽にお声がけ下さい ☁ 初⽼丸(40 歳) ☁ アイレット株式会社

    cloudpack 事業部所属 ☁ ⾹椎からリモート勤務(もうすぐ 2 年⽬) ☁ 好きなフォント:メイリオ
  4. Amazon ECS と ECR を三⾏で ☁ EC2 上で Docker コンテナのクラスタを運⽤管理出

    来るサービス ☁ S3 を使って Docker Hub のようなコンテナイメー ジリポジトリを提供しているサービス ☁ ざっくり⾔うと AWS が提供する Docker Machine / Docker Swarm / Docker Compose そして Docker Hub
  5. Amazon ECS が提供する機能 ☁ Docker サポート ☁ フルマネージドな Docker コンテナクラスタ管理

    ☁ リソースのスケジューリング ☁ AWS の各種サービスとの連携
  6. Amazon ECS の構成要素 ☁ Cluster ☁ Container Instance ☁ ECS

    Agent ☁ Task Definition ☁ Task ☁ Container ☁ Run Task ☁ Service http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs
  7. Amazon ECS ってなんぼ? ☁ ECS ⾃体の利⽤は無料 ☁ Container Instance として利⽤する

    EC2 の料 ⾦(Instance と EBS の料⾦) ☁ ELB を利⽤する場合には ELB の料⾦
  8. Amazon ECR が提供する機能 ☁ Docker サポート ☁ コンテナイメージは S3 に保存

    ☁ IAM によるイメージへのアクセスコントロール ☁ コンテナイメージは HTTPS で暗号化されて送信 され、S3 側で暗号化される
  9. 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 等から利⽤することが出来る
  10. 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 〜 ☁ 同⼀リージョン間は無料 ☁ リージョンを跨ぐ場合には受送信ともに費⽤が発⽣する
  11. (1)コンテナ上のアプリケーションログはどうする? ☁ Docker の Logging Driver を利⽤する ☁ Logging Driver

    は以下の出⼒先をサポート ☁ json-file(Default) ☁ syslog ☁ journald ☁ gelf ☁ fluentd ☁ awslogs(CloudWatch Logs) ☁ 但し、Task Definition に awslogs は現時点で定義出来ないので注意
  12. (2)監視はどうする? ☁ CloudWatch ☁ コンテナインスタンスの CPU 使⽤率、Network I/O 等 ☁

    Cluster 単位で CPU ユニット数、メモリ使⽤量 ☁ Service 単位で CPU ユニット数、メモリ使⽤量 ☁ コンテナ⾃体はその他のツールを組み合わせる ☁ docker stats ☁ Mackerel ☁ Datadog
  13. (3)プライベートリポジトリはどうする? ☁ Amazon ECR を使う ☁ 但し、東京リージョンではまだ使えない ☁ ECS クラスタ内に

    Docker Registory を構築する ☁ https://github.com/docker/distribution ☁ https://github.com/elasticio/docker-registry-ecs
  14. (4)Dynamic Port Mapping への対応は? ☁ ELB と組み合わせる場合には Port を固定する必 要あり

    ☁ Dynamic Port Mapping を有効活⽤したい場合 には Consul や registrator 等の外部ツールを利 ⽤する必要がある
  15. 僕が知っている負荷試験ツール ☁ メジャーどころで JMeter ☁ Apache インストールすれば使える ab ☁ お⼿軽な

    httperf や Siege ☁ 名前は聞いたことがある Gatling ☁ そして… Python で実装されている Locust
  16. ところで…負荷試験ツール Locust とは ☁ テストシナリオを Python で書くことが出来る ☁ サーバー・クライアント構成 ☁

    複数のノードを利⽤した分散テストを⾏うことが 出来る ☁ Web UI を備えている ☁ Web サイト以外のテストも⾏うことが出来る
  17. バッタを ECS 上でどのように飼いならすのか ☁ Locust Master と Locust Slave をそれぞれ異なる

    Task Definition に分割する ☁ 同⼀の ECS クラスタに Master と Slave を個別にデプロイ する ☁ コンテナインスタンスを跨って Locust クラサバ構成を構築 する為に Consul にお出まし頂いた ☁ Consul クラスタを構成は Atlas で Token を発⾏して -- atlas-join を利⽤した
  18. バッタがバタバタ(困ったこととか課題とか) ☁ Docker Compose では docker-compose.yml 内に定義されている Service 毎に scale

    コマンドが発⾏することが出来たが、ecs-cli compose 経由だと Task 毎にしか scale することが出来なかった ☁ Consul コンテナは必ず各コンテナインスタンス上で起動する必要が あるので⼿動でコンテナを起動する必要があった ☁ Locust Master が起動しているコンテナインスタンス IP を保存する だけのみ Consul を動かしておくのは無駄が⼤きい(かも) ☁ 1 台のコンテナインスタンス内にどのくらいコンテナを起動するか悩 みドコロ→コンテナインスタンスを増やしていく感じが良さそう
  19. Amazon ECS と ECR を触った率直な感想 ☁ コンテナのスケールイン、スケールアウトが楽 ☁ ecs-cli を使えばマネジメントコンソールほぼ不要で楽

    ☁ Docker Compose の YAML がほぼそのまま利⽤出来るのが嬉 しい ☁ ECR でプライベートリポジトリが利⽤出来るは有り難い(但 し、まだ東京リージョンには展開されていない) ☁ 実際に試せていないけど AWS の各種リソースとうまく組み合 わせることで旨味がより引き出せそう
  20. Amazon ECS と ECR を触った率直な感想 ☁ 独⾃の概念(クラスタ管理、グループ化、スケ ジューラ)を未だに理解出来ていない… ☁ サービス検知(アプリケーションの死活や

    Listen しているポート等の検知)は別のツールの助けが 必要(Docker Link はあくまでも同⼀インスタン ス内のコンテナ間に限定される)
  21. 参考リンク ☁ 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