Web App for Containers は、アプリスタックのホストに Docker コンテナーを使用するため皆さんが今Linux上で利用しているOSSベースのアプリもアプリスタックごとDockerコンテナ化することでそのまま Web App for Containersで利用することができます。本ウェビナーでは簡単なMySQL + PHPアプリ(Wordpress)を題材に、アプリをコンテナ化し Web App for Containersにデプロイするまでの一連の流れを解説し、CIツールを使った継続的なデプロイ方法についてご紹介します。今回、AzureのフルマネージドMySQLサービスであるAzure DB for MySQLを利用して完全マネージドな環境でのアプリ実行を実現します。
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
1. Web App for Containers + MySQLで
コンテナ対応したPHPアプリを作ろう!
Yoichi Kawasaki
Azure Technology Solution Professional
Asia Intelligent Cloud Global Black Belt
Microsoft Corporation
Slides for Azure Webinar: Azure PaaS App + DevOps
2. アジェンダ
• 本セミナーの目的
• Web App for ContainersとApp Service on Linux
• Azure Database for MySQL/PostgreSQL
• アプリのコンテナ化+フルマネージド化対応
• 継続的デリバリー(CD)
6. Web App for
Containers
2017年9月正式リリース
MySQL 5.6/5.7
(CommunityVersion)
PostgreSQL 9.5/9.6
(Community Version)
Azure Database for MySQL
Azure Database for
PostgreSQL
現在Public Preview中
近々GA予定
8. Container
Web App for Containers
VM
PHP App + Apache2
VM
PHP App + Apache2
Container
PHP App + Apache2
VM VM
①
②
③
アプリのDockerコンテナ化
Azure PaaSでフルマネージド化
13. Web App for Containers
App Service on Linux
• フルマネージドサービス、Platform-as-a-Service (PaaS)
• 柔軟なスケールアップ・ダウン + オートスケール
• お客様からの強い要望により実現
• Linux VMで動いているコンテナベースのアプリをターゲット
• オンプレからのLift and Shiftがとても容易
2017年9月正式リリース
14. Azure App Services on Linux
• Web App with built-in images
• Node.js, PHP, .NET Core, Rubyなどランタイムス
タックを選択してアプリケーションをデプロイ
• Windows Web App と同じ方法で利用可能
https://github.com/azure-app-service
15. Web App for Containers
• Bring Your Own Container
• アプリケーション入りの皆さんのカスタムイメージを
デプロイして実行する
イメージのソース
Azure Container Registry
Docker Hub
プライベートレジストリ
17. Azure Database for PostgreSQL
Azure Database for MySQL
• フルマネージドサービス, PaaS
• 可用性担保のためのレプリカ、ストレージ費用は追加不要
• インスタンス チューニングではなく
必要なスループット プランを必要なときに選択
• ダウンタイム無しでスケールアップ、スケールダウンも自在
• 自動バックアップ、 ポイントインタイムリカバリ(PITR)可能
( 35日間)
• 常時暗号化でバックアップも運用 DB も保護
• 既存のドライバ、ライブラリ、ツールと完全互換
使い慣れたツール、アプリケーションでからすぐに利用可能
(マイクロソフト製のツールやドライバなどは不要)
MySQL
PostgreSQL
New! Public Preview
MySQL 5.6/5.7
(Community Version)
PostgreSQL 9.5/9.6
(Community Version)
18. AZURE DATABASE FOR MYSQL &
POSTGRESQL REGION AVAILABILITY
TODAY
West US, North Central US, East US,
East US2, South Central US, West
Europe, North Europe, Japan West,
Japan East, East Asia, SE Asia, India
West, India Central, Canada Central,
Canada East, Brazil
More coming soon!
16
Azure regions
available today
19. MySQL / PostrgreSQL サービスの構成基盤
• Azure SQL Database と共通基盤
• これまでの運用実績、ノウハウをフィードバック「枯れた」基盤で運用
• Virtual Machine 上ではなく、”Service Fabric” 上に実装
https://azure.microsoft.com/ja-jp/services/service-fabric/
PowerBI,AppServices,DataFactory,
Analytics,ML,Cognitive,Bot…
Global Azure with 38 Regions
Azure Compute
SQL Data
Warehouse
Azure Storage
SQL Database MySQLPREVIEW PostgreSQLPREVIEW
Flexible: On-demand scaling, Resource governance
Trusted: HA/DR, Backup/Restore, Security, Audit, Isolation
Intelligent: Advisors, Tuning, Monitoring
Database
Services
Platform
Service Fabric
20. サービスの概念と接続イメージ
Azure リージョン
Azure Resource Manager
Application
Postgres
Client
Database Tools
(Pgadmin, psql)
Postgres
Client
Database Tools
(MySQL Workbench,
mysql Client)
MySQL
Client
Azure Database
Mgmt Service
Application
MySQL Client
REST API
Azureポータ
ル
カスタム管理
アプリAzure CLI
• 論理 DB : “インスタンス” ではない
• 標準で冗長化され、自動フェイルオー
バーを実装
• Database は“エンドポイント”に対し
てREST APIで管理
• 接続制御はファイアウォールの
ルールベースで実施
• エンジンはコミュニティバージョン
24. Container
Web App for Containers
VM
PHP App + Apache2
VM
PHP App + Apache2
Container
PHP App + Apache2
VM VM
①
②
③
アプリのDockerコンテナ化
Azure PaaSでフルマネージド化
33. Azure DB for MySQLの作成
Azureポータル、Azure CLI、REST API経由で作成可能
ここではAzure CLIでの作成方法をご紹介
DBアカウント作成
az mysql server create --name <dbaccountname>
--resource-group <groupname>
--location <region>
--admin-user <adminuser> --admin-password <password>
--performance-tier <Tier:Basic|Standard> --compute-units <unit#>
→ サーバ名: <dbaccountname>.mysql.database.azure.com
例)DBアカウントyoichikademo01作成 (Basic帯, リージョン:西日本, adminユーザ:myadmin)
az mysql server create --name yoichikademo01--resource-group myrgroup
--location japanwest --admin-user myadmin --admin-password ***
--performance-tier Basic --compute-units 50
34. Azure DB for MySQLの設定
1. ファイアウォールの設定(ここではテストのため便宜上全てのIPレンジを許可)
az mysql server firewall-rule create --resource-group <group>
--server <dbaccountname> --name AllowFullRangeIP
--start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255
mysqlコマンドでテストアクセス (DBアカウントyoicikademo01へのアクセス )
mysql -u myadmin@yoichikademo01 -p -h yoichikademo01.mysql.database.azure.com
2. ssl-enforcement パラメーターを無効化(以降のアプリのテスト簡略化のため・・・)
az mysql server update --resource-group <group>
--name <dbaccountname> --ssl-enforcement Disabled
https://docs.microsoft.com/en-us/cli/azure/mysql
38. Web App for Containerプロビジョニング
Azure CLIによる設定
https://docs.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image
Web App for Containerの作成(プロビジョニング時にコンテナを指定)
# App Settingsに環境変数をセット (--settingsのパラメータにスペース区切りで複数設定可)
40. 最も単純なデプロイメントの流れ
Local PC Container Registry
• 開発、ビルド、テスト
• コンテナイメージ作成
コンテナイメージを
Registryにプッシュ
Web Appが
コンテナイメーを
Registryからプル
https://hub.docker.com/
deployment slot
• dev
• Staging
• production
41. AzureでのCI/CDオプション
Web AppのWebhookとコンテナレジストリ連携
• Docker Hub/Azure Container RegistryにイメージPUSHでWebhookキックされてWeb
Appのコンテナ入れ替える、お手軽な手法
• https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-ci-cd
自動化を支えるCI/CDツール群
• Visual Studio Team Services
• Jenkins
• TravisCI / CircleCI
42. デプロイメントサイクルとCI/CD
Commits code Build/CI CD pipelineContainer Registry
commits code Build/CI CD pipelineAzure Container
Registry
Code Repository Build + Testing Release
Commits code Build/CI CD pipelineContainer Registry
Web App for Container は、アプリスタックのホストに Docker コンテナーを使用しており、皆さんが今Linux上で利用しているOSSベースのアプリもアプリスタックごとDockerコンテナ化することでそのまま Web App for Container で利用することができます。
本ウェビナーでは
アプリ実行環境にWebAppForContainer、MySQLにAzureのフルマネージドMySQLサービスであるAzure DB for MySQLを利用しますのでこちらのサービスの説明をいたします。
また、Wordpress ( MySQL + PHP アプリ) を題材に、アプリをコンテナ化しフルマネージド化するための一連の流れを解説します。
そして最後にCIサービスを使った継続的デリバリ方法についてご紹介します。
コンテナイメージをレジストリにPUSHする
Web App For Containerではそのイメージのソースを指定する
イメージソースの選択肢として、DockerHub以外に、AzureのマネージドのプライベートレジストリであるACR、もしくはそれ以外のプライベートレジストリも指定可能
一瞬過去中国に存在していた My SQL サービスとは別。別アーキテクチャ
2017/05 Public preview release
AzureDB for MYSQL/POSTGRESQLはSQLDBおよびSQLDWサービスと同様のデータベース基盤Database Service Platform(DBSP)の上に構築されているます。
DBSPはSeervice Fabricをベースに組み込みHA、バックアップ/リストア・サービス、リソース・ガバナンス、監視とパフォーマンス・チューニング、およびアドバイザ機能を備えた各データベースの完全分離などの機能を提供します。現在、このプラットフォームが拡張され、2つのデータベース管理サービス(MySQLとPostgreSQL)が追加されています。
ACI:
ACSが予測可能な処理のスケーリングに向いているのに対して、ACIは特定処理のバーストシナリオにおいて高速起動・実行することに向いています
Aci-connector-k8sというコネクタがあるのでACIをkubernatesの仮想ノードとして利用可能、よって同じK8s (Kubernetes) クラスター内ではVMとACIインスタンスを同時に利用できますので、両社の長所を生かせます。高速なバースト対応にACIを使える一方で、より予測可能なスケーリングのためにVMを使えます
ServiceFabric
マイクロサービス向けのオーケストレーターとランタイムを提供するPaaSサービスで、HA、スケール、並列処理などマイクロサービスなアプリケーションを開発が容易にできるPaaSであり、そのためのアプリケーションフレームワークも提供されています
大規模スケールについて
1つのVM Scale Setsにつき1000個のVMを持てる,よって最大 1000 台の VM インスタンスにスケーリングできる。一方ACSクラスタはエージェントノードは100までスケール
Azure Service Fabricのノードタイプの数に制限はありません。そのためVM Scale Setsのリミテーションに従うということになります。
https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-common-questions#cluster-setup-and-management
[note]
実行に必要な VM
Service Fabric は 5 台、Container Service は 2 台の VM が必要
高可用性を考えると Container Service は更に必要
Azure Container Registry
The new preview ACR tier, managed registries, is available in 3 options: Basic, Standard, and Premium
AAD authentication for repositories, Delete operations, Webhook support