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.

20170413 aws–windows users meetup

599 views

Published on

20170413 AWS Windows Users meetup

Published in: Technology
  • Be the first to comment

20170413 aws–windows users meetup

  1. 1. Amazon EC2 Container Service (ECS)に よるWindowsコンテナのデプロイと管理 Genta Watanabe Solutions Architect, Amazon Web Services Japan 2017.4.13
  2. 2. Agenda • コンテナとは? • DockerとWindowsコンテナ • Amazon EC2 Container Service (ECS) • まとめ 2
  3. 3. コンテナとは何か? • OS仮想化 • プロセス隔離 • イメージ • 自動化Server Guest OS Bins/Libs Bins/Libs App2App1
  4. 4. なぜコンテナなのか? • コンテナは、真新しい技術ではない • コンテナは、リソース隔離が元々の由来 • コンテナは、最近DevOpsのために再発見された • 今や、コンテナはスタートアップからエンタープ ライズまで支持を得ている
  5. 5. コンテナの長所 • イミュータブルなイメージ、ス テートレス • スピード(起動時間や開発速度) • 粒度を細かく利用率を上げられ る コンテナ vs VM コンテナの短所 • ステートフルなやり方はうまく いかない • ファイルシステムは揮発性 • ディスクIOが速くない • リソースを無駄に使ってしまう • ホスト毎じゃなくタスク毎
  6. 6. ベストプラクティス • アプリをコンテナに適応させる • 12-Factor app • 複雑さを避ける • シンプルに保つ • タスクに集中する • タスク = ジョブの単位 • ポータブルに ベストプラクティス / アンチパターン アンチパターン • VMベースの処理やワークフロー • コンテナをVMの様に考える • "ペットと家畜" • 複雑さを上げてしまう • 多すぎる技術が複雑さを増す • "ヤクの毛を刈る" • ホスト単位で何かを実行させる • 出来る限りホストのことは忘れる
  7. 7. The Twelve-Factor App
  8. 8. 12-factor App • Herokuのエンジニアが2011年に提唱 – 当時からコンテナを使いこなしているPaaS (Docker登場は2013年) • このドキュメントの対象者 – "サービスとして動くアプリケーションを開発しているすべての開発 者。およびそのようなアプリケーションをデプロイまたは管理して いるインフラエンジニア" – → すなわち全員(今時サービスに関わらないエンジニアはいない) 8 https://12factor.net/ja/
  9. 9. Twelve-Factor I. コードベース バージョン管理される1つのコードベースと複数デプロイ II. 依存関係 依存関係を明示的に宣言し分離する III.設定 設定を環境変数に格納する IV.バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う V. ビルド、リリース、実行 ビルド、リリース、実行の3つのステージを厳密に分離する VI.プロセス    アプリを1つ又は複数のステートレスなプロセスとして実行 VII.ポートバインディング ポートバインディングを通してサービスを公開する VIII.並行性 プロセスモデルによってスケールアウトする IX. 廃棄容易性 高速な起動とグレースフル停止で堅牢性を最大化する X. 開発/本番一致 開発、ステージング、本番環境をできるだけ一致させた状態を保つ XI. ログ ログをイベントストリームとして扱う XII.管理プロセス 管理タスクを1回限りのプロセスとして実行する
  10. 10. 12-factor AppとDocker • 12-factor Appを実行する上で、Dockerは最適 – 依存関係: Dockerfile、Docker Image – 設定: 環境変数 – ビルド、リリース、実行: Docker Image, Registry – プロセス: Docker Container – ポートバインディング: Port Mapping – ログ: Logging Driver • 逆に言えば、12-factor Appでないものを動かす 時には一苦労する 10
  11. 11. Docker基本要素 12 CLI Engine Registry docker build docker push/pull docker run Amazon EC2 Container Registry
  12. 12. Windowsコンテナの使用 • Windows Serverコンテナ – プロセスと名前空間の分離テクノロジを使用してアプリケーション を分離 – Windows Server 2016 Base with Containers AMIを用意 • Hyper-Vコンテナ – 専用の仮想マシン上で各コンテナを実行することで分離性を向上 – Amazon EC2上では実行できない
  13. 13. サポートされるベースイメージ ホスト オペレーティン グ システム Windows Server コン テナ Hyper-V コンテナ Windows Server 2016 with Desktop Server Core / Nano Server Server Core / Nano Server Windows Server 2016 Core Server Core / Nano Server Server Core / Nano Server Nano Server Nano Server Server Core / Nano Server Windows 10 Pro / Enterprise 利用不可 Server Core / Nano Server 14
  14. 14. OSのバージョン • Windows Serverコンテナとベースとなるホスト はカーネルを共有するため基本イメージのバージ ョンが一致している必要がある – リビジョン番号が異なる場合は起動をブロックされないが運用環境 ではサポートされない(例:10.0.14393(Windows Server 2016 RTM)と10.0.14393.206 (Windows Server 2016 GA)) • HKEY_LOCAL_MACHINESoftwareMicrosoft Windows NTCurrentVersionでWindowsホスト のバージョンを確認できる 15
  15. 15. (参考)Docker for Windows • Docker社から無償で提供されているDocker for Windowsを使用すると、Windows上でLinuxコンテ ナが利用可能 • Windows 10 Pro/Enterprise 64bit(1511 November Update, Build 10586以降)のHyper-V でLinux仮想マシン(MobyLinuxVM)を動作させる • Docker CLIでWindows 10上のHyper-Vコンテナと の切り替えが可能 16
  16. 16. Windows Serverコンテナの実行 • Dockerのインストール • Dockerコンテナの実行 Install-Module -Name DockerMsftProvider -Repository PSGallery -Force Install-Package -Name docker -ProviderName DockerMsftProvider Restart-Computer -Force docker run microsoft/iis
  17. 17. Dockerfileの使用 • Dockerfileを使用して新しいコンテナイメージを 作成するために必要な命令をテキストファイルと して記述することが可能 • Docker buildコマンドを実行することで Dockerfileから新しいイメージを作成 18 docker build -t iis .
  18. 18. Dockerfileのサンプル # Sample Dockerfile # Indicates that the windowsservercore image will be used as the base image. FROM microsoft/windowsservercore # Metadata indicating an image maintainer. MAINTAINER jshelton@contoso.com # Uses dism.exe to install the IIS role. RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart # Creates an HTML file and adds content to this file. RUN echo "Hello World - Dockerfile" > c:inetpubwwwrootindex.html # Sets a command or process that will run each time a container is run from the new image. CMD [ "cmd" ] 19
  19. 19. コンテナのネットワーク • コンテナは仮想ネットワークアダプター(vNIC) をもち仮想スイッチ(vSwitch)に接続される – ネットワークアドレス変換(NAT) – 透過(Transparent) – オーバーレイ – L2ブリッジ • Dockerエンジンはdockerdサービスの初回実行時 に規定でNATネットワーク(172.16.0.0/12)を 作成する 20
  20. 20. Windows Server 2016 インスタンスでの Docker コン テナの競合 • Windows Server 2016インスタンスでDockerを実行するため には、”Microsoft Windows Server 2016 Base with Container” AMIを使用する必要がある • 別のWindows Server 2016 AMIからインスタンスを作成する 場合、DockerをインストールしてからSysprepを実行するとイ ンスタンスは正しく起動されない • EC2のデフォルトVPC(172.31.0.0/16)とDocker用のCIDR (172.16.0.0/12)がコンフリクトするのをふせぐため daemon.jsonで172.17.0.0/16を指定している
  21. 21. Server Guest OS Bins/Libs Bins/Libs App2App1 1台のサーバ上でDockerを扱うのは簡単
  22. 22. しかし、複数台のクラスタ上で管理するのは困難 Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS AZ 1 AZ 2 AZ 3
  23. 23. コンテナを扱う上で、最も難しい部分 • 複数ホスト上でのコンテナの管理 • 配置、状態の追跡、監視、自動化等 • 想像している以上に、たくさんのことを考慮しないといけない • しかし、これらは70年代から続く分散システムでのよくある問題 • 多くのお客様はアプリケーション開発に集中したい • 内製のコンテナ管理システムは、まるで車輪の再発明 • ビジネスの差別化にはつながらないこと • あなたの時間の多くは、ビジネスを成長させることに使われるべき
  24. 24. Amazon EC2 Container Service
  25. 25. Amazon EC2 Container Service (ECS) コンテナ管理を あらゆるスケールで 柔軟なコンテナの配置 AWSの基盤との連携
  26. 26. コンテナ管理とは? • 利用可能なリソースを管理 • リソースの変化を追跡 • リソースへのリクエストを受け付ける • 正確性と一貫性を保証する
  27. 27. CPU メモリ ポート ディスク容量 ディスクIOPS ネットワーク帯域 リソース
  28. 28. { "name": "simple-demo", "image": "my-demo", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true }, “Task Definitions”
  29. 29. Tasks Shared Data Volume Containers launch Container Instance Volume Definitions Container Definitions
  30. 30. スケジューラとは? • 必要な状態を決める • 現在の状態と比較する • アクションを実行する
  31. 31. Cluster, Scheduler, Task Scheduler ManagerCluster Task Definition Task Agent
  32. 32. Amazon ECS コンポーネント • Task – Instance上で実行されて いる実際のContainer • Task Definition – Taskで使うContainer、 及び周辺設定の定義 • Cluster – Taskが実行されるEC2 Instance群 • Manager – ClusterのリソースとTask の状態を管理 • Scheduler – Clusterの状態をみて、 Taskを配置 • Agent – EC2 InstanceとManager の連携を司る
  33. 33. Amazon ECS 機能 • Service: ロングランニングアプリケーション • Blue/Greenデプロイ、Auto Scaling、動的ポートマッピング • Security: セキュアな環境でコンテナを動かす • TaskのIAMロール、PCI DSS • Simple: インストール不要でAWSネイティブ連携 • AWSの標準API/CLI/SDK/CloudFormation、ECS-CLI
  34. 34. Serviceとは? • ロングランニングアプリケーションを希望する状態に保ち続ける 1. Task Definition 2. Taskの数 3. Load Balancerの登録/解除 (Optional) • Application Load Balancerとの動的ポートマッピング (Optional) • コンテナはランダムなホストのポートを使って登録される • Application Auto ScalingのAmazon ECS Serviceサポート (Optional) • AlarmとPolicyを使って、希望するTask数を自動的に変更する
  35. 35. Service: 動的ポートマッピング Service scheduler Elastic Load Balancing Application Load Balancer Task Definition = app:1 Desired Count = 4 Amazon ECS 32874 32879 32873 32880 Cluster
  36. 36. Security: TaskのIAMロール • 各TaskにIAMロールを指定することができる • Task Definitionで指定したり、run-task時に指定したり • 利点 • 同一のContainer Instance上で異なるIAMロールのTaskが動く • Container InstanceのIAMロールは必要最低限にできる • AWS CloudTrailにTask ARNが含まれるので監査もしやすい • 前提条件 • コンテナ内: AWS SDKは2016年7月13日以降に公開されたもの • Container Instance: ECS Agent 1.12.0+、ネットワークの設定
  37. 37. IAM Role for Task AWS IAM Amazon DynamoDB Amazon S3 Amazon ECS AWS IAM AWS IAM DynamoDBRole S3Role Container Instance ECSRole
  38. 38. Amazon ECS is so simple • マスターサーバ群が不要 • クラスタ管理ソフト自体を管理する必要がなくなる • ServiceやRun Taskといった、便利なビルトインスケジューラ • AWS SDK/CLI/CloudFormationで期待通りの動作 • よく定義された標準的なAWS APIが提供 • 他のAWSリソースの様にコンテナを操作することができる • AWSとネイティブな連携 • 他のAWSサービスとの連携が、1クリックで設定可能 • 例: awslogs => Amazon CloudWatch Logs
  39. 39. Windowsコンテナ(ベータ版) • Amazon ECSでWindowsコンテナをパブリックベー タとしてサポート – Amazon ECS Container AgentをGitHub上に公開( https://github.com/aws/amazon-ecs-agent ) – Windowsコンテナを実行するためのCloudFormationテンプレートも提供 • 注意点 – Linuxコンテナクラスタとの混在はできない – タスクのためのIAMロールに追加の設定が必要 – Windows ServerのDockerイメージは比較的大きいためダウンロードには より多くの時間とストレージ容量が必要
  40. 40. Windowsコンテナの開始(1/2) • Windowsクラスタを作成 • Windowsコンテナインスタンスをクラスタで起動 – Microsoft Windows Server 2016 Base with Containers AMIを 選択 – ユーザーデータでPowerShellスクリプトを実行することで Windowsコンテナインスタンスを設定 – WindowsコンテナでTaskのIAMロールの機能を使用するには ECS_ENABLE_TASK_IAM_ROLE環境変数の値をtrueに置き換え る 41 $ aws ecs create-cluster --cluster-name windows
  41. 41. Windowsコンテナの開始(2/2) • Amazon ECSクラスタでWindowsコンテナを実 行する前にTask Definitionを定義する • Task Definitionを使用してサービスを作成 42 $ aws ecs register-task-definition --cli-input-json file://windows-simple-iis.json $ aws ecs create-service --cluster windows --task-definition windows-simple-iis --desired-count 1 --service-name windows- simple-iis
  42. 42. Task Definitionのサンプル { "family": "windows-simple-iis", "containerDefinitions": [ { "name": "windows_sample_app", "image": "microsoft/iis", "cpu": 100, "entryPoint":["powershell", "-Command"], "command":["New-Item -Path C:inetpubwwwrootindex.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:ServiceMonitor.exe w3svc"], "portMappings": [ { "protocol": "tcp", "containerPort": 80, "hostPort": 80 } ], "memory": 500, "essential": true } ] } 43
  43. 43. Windows Task用のIAMロール設定 • コンテナインスタンスの起動スクリプトで ECS_ENABLE_TASK_IAM_ROLE環境変数を設定 • ブートストラップスクリプトに提供されているネットワーキン グコマンドを使用してコンテナをブートストラップ • Task用のIAMロールとポリシーを作成 • Task用に作成したIAMロールをTask Definitionの登録時に指定 • Task認証プロバイダーのIAMロールではコンテナインスタンス のポート80を使用する 44
  44. 44. タスク用のIAMロールのブートストラップスクリプト # Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-WMIObject -Class Win32_IP4RouteTable | Where { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort -Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway 45
  45. 45. WindowsコンテナのAWS CloudFormationテンプレー ト • 以下のリソースをふくむサ ンプルアプリケーションを 実行するテンプレートを提 供 – Amazon ECSクラスタ – Task Definition – Service – Application Load Balancer (ALB) – Auto Scalingポリシー • 3種類のIAMロールをあわせ て作成 46
  46. 46. Amazon EC2 Container Service • 機能 • Service: ロングランニングアプリケーション • Security: セキュアな環境でコンテナを動かす • Simple: インストール不要でAWSネイティブ連携 • 事例 • 沢山のAmazon ECSのお客様 • 高速なアップデート • 全てがお客様のフィードバックに基づく
  47. 47. まとめ 48
  48. 48. まとめ • アプリケーションをコンテナで最適に実行するた めには12-factor Appを意識 • Dockerを使用してWindowsアプリケーションの コンテナ化が可能に • Amazon ECSはコンテナ管理のための最適なプラ ットフォーム 49
  49. 49. Q&A 50
  50. 50. 参考情報 • 12-factor APP – https://12factor.net/ja/ – https://www.infoq.com/presentations/12-Principles-Deploy-Apps • Windowsコンテナー – https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/ • Amazon EC2 Container Service – https://aws.amazon.com/ecs/ 51
  51. 51. ご参加ありがとうございました 52
  52. 52. 53

×