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.

AWS ESC + Ansibleで お手軽 Blue-Green Deployment

648 views

Published on

JAWS-UG コンテナ支部 #10 での発表資料です。
https://jawsug-container.connpass.com/event/71130/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

AWS ESC + Ansibleで お手軽 Blue-Green Deployment

  1. 1. AWS ESC + Ansibleで お⼿軽 Blue-Green Deployment 2017/12/12 EXGEN 野村 健太郎 1 JAWS-UG コンテナ⽀部 #10
  2. 2. ⾃⼰紹介 • 野村 健太郎 (@nomnux) • 所属: エクスジェン・ネットワークス(株) • 普段の仕事: ID 管理/SSO (IDaaS)、AWS、 Ansible、Docker • 趣味: バイク(鈴菌感染者) 2
  3. 3. ⽬次 • Ansible を簡単にご紹介 • AWS ECS + Ansible • Demo 3
  4. 4. Ansible 4
  5. 5. Ansible とは • “Ansible is an IT automation tool” • http://docs.ansible.com/ansible/latest/ index.html • Python 製の構成管理ツール • エージェントレス • YAML • 類似ツール: Capistrano、Chef、Puppet など 5
  6. 6. Ansible の管理対象 • OS 設定、パッケージ、ミドルウェア設定 • SSH で接続して操作する • サーバー以外の管理対象も豊富 • クラウドサービス (AWS、Google、Azure、 など) • ネットーワーク機器、Docker、RDB、ストレージ、 Windows、他にもいろいろ • https://docs.ansible.com/ansible/latest/ modules_by_category.html 6
  7. 7. Ansible の使い所(例) 7 AWS OS ミドルウェア アプリケーション CFn, CLI, Ansible(ECS) Ansible Ansible Ansible
  8. 8. Ansible の仕組み 8 Inventory 管理対象システム の⼀覧 Variable 対象毎に異なる値 を変数として定義 Role(Task) 処理を記述 Playbook
  9. 9. Ansible の仕組み 9 Inventory Variable port=80 Role(Task) [web] www1.example.jp www2.example.jp install nginx copy nginx.conf Playbook servername= www1.example.jp servername= www2.example.jp
  10. 10. Ansible の仕組み 10 Inventory Variable Role Playbook ansible-playbook www1 www2
  11. 11. AWS + Ansible 11
  12. 12. AWS + Ansible •Boto/Boto3 (AWS SDK for Python) を利⽤する •⼀部の処理で、EC2 インスタンスに SSH し てインスタンスの情報を取得したりすること もある •Ansible でサポートされている AWS のサービ ス •https://docs.ansible.com/ansible/latest/ list_of_cloud_modules.html 12
  13. 13. Install Ansible • Python • pip • Ansible (pip でインストール可能) • Boto/Boto3 (pip でインストール可能) 13
  14. 14. AWS ECS + Ansible 14
  15. 15. Ansible で管理できるもの https://docs.ansible.com/ansible/latest/list_of_cloud_modules.html ecs_cluster - create or terminate ecs clusters ecs_ecr - Manage Elastic Container Registry repositories ecs_task - run, start or stop a task in ecs ecs_taskdefinition - register a task definition in ecs ecs_service - create, terminate, start or stop a service in ecs ecs_service_facts - list or describe services in ecs elb_application_lb - Manage an Application load balancer elb_target_group - Manage a target group for an Application load balance 15
  16. 16. Ansible inventory file 16 nginx_green nginx_blue blue.txt green.txt
  17. 17. Ansible variable file 17 aws_accountid: ********** aws_region: ap-northeast-1 target_group_arn: arn:aws:elasticloadbalancing: … image_tag: 1.1 all.yml nginx_blue.yml image_tag: 1.0 nginx_green.yml
  18. 18. Ansible Role ecs_taskdefinition 18 - name: register ecs task definition ecs_taskdefinition: family: task-nginx network_mode: bridge containers: - name: nginx image: "{{ aws_accountid }}.dkr.ecr.{{ aws_region }}.amazonaws.com/ nginx:{{ image_tag }}" cpu: 100 memory: 128 portMappings: - containerPort: 80 essential: true state: present
  19. 19. Ansible Role ecs_service 19 - name: create ecs service ecs_service: cluster: ecs-cluster name: service-nginx task_definition: task-nginx desired_count: 1 deployment_configuration: minimum_healthy_percent: 100 maximum_percent: 200 load_balancers: - targetGroupArn: "{{ target_group_arn }}" containerName: nginx containerPort: 80 role: EcsServiceRole state: present
  20. 20. AWS ECS + Ansible で Blue-Green Deployment 20
  21. 21. 想定環境 • シンプルな Web サーバー(Nginx)を想定 • ALB を利⽤ • Blue-Green Deployment で切れ⽬なく更新 21
  22. 22. ECS 構成 22 ALB Target Group ECS Service ECS Task Definition
  23. 23. Ansible 構成 23 ECS Inventory Inventory Variable Variable Role Ansible
  24. 24. Demo 24
  25. 25. Demo 事前準備 • ECS Cluster 作成 • https://docs.aws.amazon.com/ AWSCloudFormation/latest/UserGuide/ quickref-ecs.html を利⽤ • コンテナインスタンスのロールを調整 • ECR から pull するためのポリシーを追加 • Docker image の ECR への push 25
  26. 26. Demo •Task Definition 登録・更新 •Service の作成・更新 26
  27. 27. Production Ansible の強み 変数展開 27 Role Staging Ansible Production Staging 1つの処理(Role)の記述で複数の設定や環境を操作 できる
  28. 28. 気になる Fargate 対応は?... • Ansible 2.4 では操作できませんでした • Task Definition 作成時のパラメーターが未 対応 • Network Mode に awsvpc を指定できない • (要確認) Requires compatibilities や ecsTaskExecutionRole を指定できないよ うな気がする… 28
  29. 29. Ansible で ECS のコツ • 困った点 • AWS CLI のパラメーターを Ansible YAML に移植した いが、YAML のキーがわからない(ドキュメントに例が なくてわからない) • 解決策 • AWS CLI などの⼊⼒ファイルの JSON を雰囲気で YAML に当てはめていけば何とかなる • ソースをそれっぽいキーワードで grep すれば何となく わかると思う… 29
  30. 30. ありがとうございました 30

×