Web App for Containers は、アプリスタックのホストに Docker コンテナーを使用するため皆さんが今Linux上で利用しているOSSベースのアプリもアプリスタックごとDockerコンテナ化することでそのまま Web App for Containersで利用することができます。本ウェビナーでは簡単なMySQL + Ruby on Rails アプリ を題材に、アプリをコンテナ化し Web App for Containersにデプロイするまでの一連の流れを解説し、CIツールを使った継続的なデプロイ方法についてご紹介します。今回、AzureのフルマネージドMySQLサービスであるAzure DB for MySQLを利用して完全マネージドな環境でのアプリ実行を実現します。
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
1. Web App for Containers + MySQLで
コンテナ対応したRailsアプリを作ろう!
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
• アプリをDockerコンテナ化してフルマネージドサービスに移行
• 継続的デリバリー(CD)
10. Web App for Containers
App Service on Linux
• フルマネージドサービス、Platform-as-a-Service (PaaS)
• 柔軟なスケールアップ・ダウン + オートスケール
• お客様からの強い要望により実現
• Linux VMで動いているコンテナベースのアプリをターゲット
• オンプレからのLift and Shiftがとても容易
2017年9月正式リリース
11. 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
12. Web App for Containers
• Bring Your Own Container
• アプリケーション入りの皆さんのカスタムイメージを
デプロイして実行する
イメージのソース
Azure Container Registry
Docker Hub
プライベートレジストリ
15. 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)
16. AZURE DATABASE FOR POSTGRESQL AND MYSQL
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,
West India, Central India
More coming soon!
13
Azure regions
available today
17. 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
18. サービスの概念と接続イメージ
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 : “インスタンス” ではない
• 1 対多のデータベースを作成可能
• リソースはすべて同じ論理サーバ内の
DB 間で共有
• Database の “エンドポイント”
• 接続制御はファイアウォールの
ルールベースで実施
19. ダウンタイム無しでスケーリング可能
Azure リージョン
Database Server
サーバーマネジメント
Azure Database
Mgmt Service
Azure Resource
Manager
REST API
Azure
ポータル
Custom Mgt.
ApplicationsAzure CLI
server=myserver.<mysql/postgres>.database.azure.com
IP1:5432 or 3306
retry
• いったん接続が切れても内部ゲートウェイでリトライ
してくれるのでアプリケーションは切断の影響を受け
にくい
• さらに慎重を期すならば、長時間トランザクションを
避ける実装にすることがおすすめ
(トランザクションは接続オブジェクトに紐づくため)
Gateway
25. フルマネージド化対応までの流れ
1. MySQL接続部をAzure DB for MySQLに対応
2. アプリをDockerコンテナイメージにパッケージ化
3. コンテナレジストリに作成したコンテナイメージを
push(Docker Hub / Azure Container Registry)
4. Web App for Container の プロビジョニング +
コンテナイメージのデプロイメント
26. Azure DB for MySQLの作成
Azureポータル、Azure CLI、REST API経由で作成可能
ここではAzure CLIでの作成方法をご紹介
DBアカウントの作成 yoichikamysql
(サービス帯: Basic, リージョン: 西日本, adminユーザ: yoichika)
az mysql server create --name yoichikamysql
--resource-group myrgroup
--location japanwest
--admin-user yoichika --admin-password ***
--performance-tier Basic --compute-units 50
→ サーバ名: yoichikamysql.mysql.database.azure.com
27. Azure DB for MySQLの設定
ファイアウォールの設定(ここでは全てのIPレンジを許可)
az mysql server firewall-rule create --resource-group myrgroup
--server yoichikamysql --name AllowFullRangeIP
--start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255
mysqlコマンドでテストアクセス
mysql -u yoichika@yoichikamysql -p -h yoichikamysql.mysql.database.azure.com
ssl-enforcement パラメーターを無効化(以降のアプリテスト簡略化のため・・・)
az mysql server update --resource-group mygroup
--name yoichikamysql --ssl-enforcement Disabled
https://docs.microsoft.com/en-us/cli/azure/mysql
35. 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のパラメータにスペース区切りで複数設定可)
Web App for Container は、アプリスタックのホストに Docker コンテナーを使用しており、皆さんが今Linux上で利用しているOSSベースのアプリもアプリスタックごとDockerコンテナ化することでそのまま Web App for Container で利用することができます。
本ウェビナーでは
アプリ実行環境にWebAppForContainer、MySQLにAzureのフルマネージドMySQLサービスであるAzure DB for MySQLを利用しますのでこちらのサービスの説明をいたします。
また、簡単なMySQL + Ruby on Rails アプリ を題材に、アプリをコンテナ化しフルマネージド化するための一連の流れを解説します。
そして最後にCIサービスを使った継続的デリバリ方法についてご紹介します。
コンテナイメージをレジストリにPUSHする
Web App For Containerではそのイメージのソースを指定する
イメージソースの選択肢として、DockerHub以外に、AzureのマネージドのプライベートレジストリであるACR、もしくはそれ以外のプライベートレジストリも指定可能
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
一瞬過去中国に存在していた My SQL サービスとは別。別アーキテクチャ
2017/05 Public preview release
AzureDB for MYSQL/POSTGRESQLはSQLDBおよびSQLDWサービスと同様のデータベース基盤Database Service Platform(DBSP)の上に構築されているます。
DBSPはSeervice Fabricをベースに組み込みHA、バックアップ/リストア・サービス、リソース・ガバナンス、監視とパフォーマンス・チューニング、およびアドバイザ機能を備えた各データベースの完全分離などの機能を提供します。現在、このプラットフォームが拡張され、2つのデータベース管理サービス(MySQLとPostgreSQL)が追加されています。
- 高可用性を実現するため、複数レプリカによる冗長性を備えている
ダウンタイムなしでスケーリングが可能な仕組み:内部GWがリトライでアプリは切断の影響をうけにく(Failover、Patch、スケーリングで新規ストレージ展開)
- ただしトランザクションについては接続オブジェクトに紐づいているため影響をうけてします。できる限りトランザクション間隔を細かくして実行いただくことを推奨
クラウド上に配置されたデータベースをサービス (Software as a Service : SaaS) として提供しており、高可用性を実現するため、複数レプリカによる冗長性を備えています。また、高可用性を維持していくために、Reconfiguration (リコンフィグレーション) が内部的に行われています。
HA(高可用性)モデルは、ノードレベルの中断の場合にデータベースをレプリカにフェイルオーバーする組み込みのメカニズムに基づいています。これは、ハードウェア障害のために発生する可能性がありますが、OSまたはPostgreSQLエンジンへのサービス展開またはパッチへの応答としても発生します。 PostgreSQLに加えられた変更は、トランザクションのコンテキストで常に発生し、トランザクションがコミットされる前に、セカンダリストレージまたは別のデータベースのレプリカに同期して記録されます。ノードレベルの割り込みが発生すると、データベースサーバーは自動的に別のノードで実行されているレプリカに切り替えます。アクティブな接続はすべて破棄され、実行中のトランザクションはコミットされません。 PostgreSQLデータベースアプリケーションは、削除された接続や失敗したトランザクションを検出して再試行することが重要です。アプリケーションが接続を再試行すると、プライマリ・データベースとして引き継ぐレプリカにリダイレクトされます。新しいレプリカへのカットオーバは、平均して30秒以上です。
all data at rest (database files, logs, backups) are encrypted by default with service-managed keys
Compute Unit とは? = Azure Database for MySQL/PostgreSQLサーバーで使用できることが保証される CPU 処理スループットの測定値 ( CPU とメモリ リソースを組み合わせた測定値 )
- 目安:100 CU = 1 core
- ただし、Standard 価格レベルで事前構成されたメモリ量は、Basic 価格レベルで構成されているメモリ量の 2 倍
IOPSについて
- BasicはIOPS保証なし
- StandardのIOPS: GB あたり 3 IOPS 固定。つまり125GB = 375IOPS(保証)
- 最大 256 KB の IO サイズ保証
- IOPS は固定の 3:1 の割合で最大ストレージ サイズに比例してスケーリングします
Standard CUについては 近日1600、2000提供予定
Premium について
- 今年を目処に実現
- Storage: Local SSD
機能面
VNET Service Tunneling
More performance and scaling options with premium service tier and larger storage sizes
Migration tooling
Readable Replicas
Disaster Recovery
Much more….
Rails scaffolding is a quick way to generate some of the major pieces of an application. If you want to create the models, views, and controllers for a new resource in a single operation, scaffolding is the tool for the job.