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

Amazon ECS と Amazon ECR 超概要+時間があったら Demo

Yohei Kawahara
April 23, 2016
9.9k

Amazon ECS と Amazon ECR 超概要+時間があったら Demo

第9回 コンテナ型仮想化の情報交換会@福岡にてお話させて頂いた資料です。

AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)(http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs) を多数引用させて頂いております。誠に有難うございました。

Yohei Kawahara

April 23, 2016
Tweet

Transcript

  1. Amazon ECS と Amazon ECR 超概要 +時間があったら Demo 2016.04.23 第9回

    コンテナ型仮想化の情報交換会@福岡 かっぱ(@inokara)
  2. アジェンダ ☁ 注意 ☁ ⾃⼰紹介 ☁ Amazon ECS & ECR

    ⼊⾨ ☁ ecs-cli を利⽤したデモ ☁ 終わり
  3. 注意 ☁ 私が Amazon EC2 Container Service と Amazon EC2

    Container Registry について調べたメモを紹介させて頂きます ☁ AWS Blackbelt 2015シリーズの資料を多数引⽤させて頂いて おります ☁ 本資料に記載された内容の全ては作成時点の内容となります ☁ 本資料内で Amazon EC2 Container Service を Amazon ECS と Amazon EC2 Registry を Amazon ECR と省略して記載し ている部分があります
  4. ⾃⼰紹介 ☁ 川原洋平(@inokara) ☁ 「かっぱ」とお気軽にお声がけ下さい ☁ 初⽼丸(40 歳) ☁ アイレット株式会社

    cloudpack 事業部所属 ☁ ⾹椎からリモート勤務(もうすぐ 2 年⽬) ☁ 好きな⾔葉:中年⽼い易く作業成り難し ☁ 最近気になること:加齢臭
  5. Amazon ECS や ECR についてアンケート ☁ ご存知の⽅ ☁ 触ったことがある⽅ ☁

    既に⾃社、お客様限らずサービス等に投⼊してバ リバリ利⽤されている⽅
  6. 三⾏で表す Amazon ECS と ECR ☁ Amazon ECS とは…EC2 上で

    Docker コンテナのクラスタ を運⽤管理出来るサービスで AWS の他のサービスとの連携 も可能 ☁ Amazon ECR とは…S3 を使って Docker Hub のようなコ ンテナイメージリポジトリを提供しているサービス ☁ ざっくり⾔うと…AWS が提供する Docker Machine / Docker Swarm / Docker Compose そして Docker Hub(だ と思う)
  7. Amazon ECS の構成要素 ☁ ECS Cluster ☁ Container Instance ☁

    ECS Agent ☁ Task Definition ☁ Task ☁ Container ☁ Run Task ☁ Service http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs
  8. Amazon ECS の構成要素 ☁ ECS Cluster(クラスタ管理) ☁ クラスタ内の Container instance

    のリソースを管理する ☁ 特定の AWS リージョンの Services と Container instance の論理 的なグルーピングしたもの
  9. Amazon ECS の構成要素 ☁ ECS Agent(クラスタ管理) ☁ Amazon ECS Endpoint

    と通信を⾏うエージェント ☁ こやつも Docker コンテナ ☁ Docker Hub にて提供されている(https://hub.docker.com/r/ amazon/amazon-ecs-agent/) ☁ Go で実装(https://github.com/aws/amazon-ecs-agent)
  10. Amazon ECS の構成要素 ☁ Container Instance(クラスタ管理) ☁ ECS Agent が動作しているEC2インスタンスで、Container

    Instance 上で Task が動作する ☁ オフィシャルでは Amazon ECS-optimized AMI が提供されている ☁ しかし…VPC 内で起動して、ECS Agent が動きさえすれば Container Instance になれるのでディストリビューションはある程 度選ぶことは出来る(サポートを受けられない可能性があるので要確 認)
  11. Amazon ECS の構成要素 ☁ Task Definition(グルーピング) ☁ ECS クラスタ上で稼働させるコンテナのコンテナイメージや CPU

    や メモリ、ネットワークポートやボリュームを定義する ☁ コンテナの集合を定義するイメージ…例えば、WordPress を起動し たい場合に Web コンテナと DB コンテナを 1 つの Task Definition に定義する ☁ JSON にて定義する
  12. Amazon ECS の構成要素 ☁ Task Definition(グルーピング) ☁ ECS クラスタ上で稼働させるコンテナのコンテナイメージや CPU

    や メモリ、ネットワークポートやボリュームを定義する ☁ コンテナの集合を定義するイメージ…例えば、WordPress を起動し たい場合に Web コンテナと DB コンテナを 1 つの Task Definition に定義する ☁ JSON にて定義する { "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true } ], "family": "hello_world" }
  13. Amazon ECS の構成要素 ☁ Task(グルーピング) ☁ Task Definition が Container

    Instance に展開された状態 ☁ リソースに余裕がある Container Instance で起動される ☁ リソースに余裕が無い場合には起動しない、リソースに余裕が無くな るとコンテナはガツンと停⽌する
  14. Amazon ECS の構成要素 ☁ Container(グルーピング) ☁ Docker コンテナ ☁ Task

    の実体 ☁ Task には複数のコンテナが含まれることもある ☁ Container Instance 上で実⾏される
  15. Amazon ECS の構成要素 ☁ Container(グルーピング) ☁ Task の実体 ☁ Task

    には複数のコンテナが含まれることもある ☁ Container Instance 上で実⾏される
  16. Amazon ECS の構成要素 ☁ Run Task(スケジューラ) ☁ Task Definition から指定した数の

    Task を実⾏する ☁ Container Instance は⾃動的に選択される ☁ ユースケース:バッチ処理
  17. Amazon ECS の構成要素 ☁ Service(スケジューラ) ☁ Task を必要数保持するスケジューラ ☁ Desired

    tasks で必要な数を指定→この数を維持しようとする ☁ 新しい Task Definition をデプロイしつつ切替も可能 ☁ Elastic Load Balancing との連携も可能 ☁ ユースケース:Web サービス ☁ 後ほどデモをお⾒せ出来れば…
  18. Amazon ECS ってなんぼ? ☁ ECS ⾃体の利⽤は無料 ☁ Container Instance として利⽤する

    EC2 の料 ⾦(Instance と EBS の料⾦) ☁ ELB を利⽤する場合には ELB の料⾦
  19. ECS CLI についてちょっとだけ ☁ ECS を操作出来るコマンドラインツール ☁ AWS より Mac

    OS X 版と Linux 版が提供されている ☁ https://github.com/aws/amazon-ecs-cli ☁ コンテナインスタンスのスケールイン、スケールアウトも出来 る(ecs-cli scale N) ☁ Docker Compose の YAML 定義をほぼそのまま利⽤可能(ecs- cli compose) ☁ ほぼマネジメントコンソール不要
  20. Amazon ECS のモニタリング ☁ CloudWatch で提供される ☁ クラスタ単位で CPU 使⽤率、メモリ使⽤量

    ☁ Service 単位で CPU 使⽤率、メモリ使⽤量 ☁ CloudWath のアラームを定義してアクションを 起こすことが可能
  21. Amazon ECS のモニタリング ☁ CloudWatch で提供される ☁ クラスタ単位で CPU 使⽤率、メモリ使⽤量

    ☁ Service 単位で CPU 使⽤率、メモリ使⽤量 ☁ CloudWath のアラームを定義してアクションを 起こすことが可能
  22. コンテナリソースの制御 ☁ CPU は 1024 unit = CPU 1 core

    ☁ 指定した unit 数分のリソースは保証される ☁ 指定した以上に利⽤することも可能(リソースに余剰があれば) ☁ Memory は MiB で指定する ☁ 指定容量以上使おうとするとコンテナは kill される ☁ リソースが不⾜している場合にはコンテナは起動 しない
  23. Amazon ECR が提供する機能 ☁ Docker Registry HTTP API V2 をサポート

    ☁ コンテナイメージは Amazon S3 に保存されるの で⾼い可⽤性と耐久性が提供される ☁ コンテナイメージは HTTPS で暗号化されて送信 され、さらに S3 側で暗号化される ☁ IAM によるイメージへのアクセスコントロール
  24. Amazon ECR の構成要素 ☁ Registry ☁ https://${aws_account_id}.dkr.ecr.${region}.amazonaws.com という Registry URL

    が与えられる ☁ 現時点ではバージニア(us-east-1)とオレゴン(us-west-2)、アイル ランド(eu-west-1)リージョンのみ提供 ☁ Docker Registry HTTP API V2 がサポートされている ☁ Docker コマンド(push / pull / list / tag 等)が利⽤可能
  25. Amazon ECR の構成要素 ☁ Authorization token ☁ aws-cli の get-logon

    コマンドでログイントークンを取得してログイ ンすることで操作が可能となる # aws-cli ͰϩάΠϯτʔΫϯΛऔಘ aws --region us-east-1 ecr get-login # ҎԼͷΑ͏ʹग़ྗ͞ΕΔͷͰɺίϐϖͰ࣮ߦ͢Δ docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx -e none https://xxxxxxxxxxxxxxx.dkr.ecr.us- east-1.amazonaws.com
  26. Amazon ECR の構成要素 ☁ Repository Policy ☁ IAM によってコンテナイメージへのアクセス制限を設けることが出 来る…例えば、pull

    のみを許可、push と pull のみを許可等を定義す ることが出来る ☁ AWS アカウントを越えてコンテナイメージを共有することが出来る
  27. Amazon ECR の構成要素 ☁ Image ☁ ECR に登録されたコンテナイメージは ECS の

    Task Definition から 指定することが出来る(出来なきゃ困る) ☁ 他の Docker Engine からも利⽤することが出来る…例えば、Elastic Beanstalk アプリケーションや⼿元の Docker Engine からも利⽤す ることが出来る!
  28. 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 〜 ☁ 同⼀リージョン間は無料 ☁ リージョンを跨ぐ場合には受送信ともに費⽤が発⽣する
  29. Amazon ECS と ECR を触った率直な感想 ☁ ほぼ素の Docker なのでとっつき易かった ☁

    ecs-cli を使えばマネジメントコンソールほぼ不要で楽 ☁ ECR でプライベートリポジトリが利⽤出来るは有り難 い(但し、まだ東京リージョンには展開されていない) ☁ 実際に試せていないけど AWS の各種リソースとうま く組み合わせることで旨味がより引き出せそう
  30. Amazon ECS と ECR を触った率直な感想 ☁ クラスタ管理、グループ化、スケジューラの概念は実際 に動かしてみると理解が深まりそう ☁ コンテナイリュージョンの挙動がまだ掴みきれていない

    ☁ コンテナとコンテナインスタンスが連動したスケールア ウト、スケールインは⼀⼿間必要 ☁ サービス検知(アプリケーションの死活や Listen してい るポート等の検知)は別のツールの助けが必要
  31. 参考リンク ☁ http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs ☁ http://www.slideshare.net/AmazonWebServicesJapan/amazon-ec2-container-service-deep- dive-56147464 ☁ http://www.atmarkit.co.jp/ait/articles/1511/27/news001.html ☁ 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