Azureの基礎　その６

#コア Cloud Services - Azureコンピューティングオプション

出展：https://docs.microsoft.com/ja-jp/learn/modules/intro-to-azure-compute/index

##Azureコンピューティングの重要な概念

###Azureコンピューティングとは
・クラウドベースのアプリケーションを実行するためのオンデマンドコンピューティングサービス
・使用したリソースに対してのみ使用している期間についてだけ課金する

###Azureでコンピューティングを実行する一般的な手法
・仮想マシン
・コンテナー
・Azure App Service
・サーバーレスコンピューティング

###仮想マシン（VM）とは
・物理コンピューターのソフトウェア エミュレーション
・仮想プロセッサ、メモリ、ストレージ、およびネットワークリソースが含まれる
・オペレーティングシステム (OS) をホストし、物理コンピューターと同じようにソフトウェアをインストールして実行できる
・リモートデスクトップクライアントを使用すると、実際にそのマシンの前に座っているような感覚で仮想マシンを使用し、制御することができる

###コンテナーとは
・アプリケーションを実行するための仮想化環境
・VMと同様にコンテナーはホストオペレーティング システム上で実行される
・コンテナーには、コンテナー内で実行されているアプリのオペレーティングシステムは含まれない
・コンテナーはアプリケーションの実行に必要なライブラリとコンポーネントをひとまとめにし、コンテナーを実行している既存のホストOSが使用される

###Azure App Serviceとは
・Azureのサービスとしてのプラットフォーム (PaaS) サービス
・企業向け Web 指向アプリケーションをホストするように設計されている
・ パフォーマンス、拡張性、セキュリティ、コンプライアンスにおける要件を満たしながら、完全管理型プラットフォームを使用し、インフラストラクチャを保守管理できる

###サーバーレスコンピューティングとは
・ユーザーのコードを実行するクラウドでホストされた実行環境だが、基になるホスティング環境が完全に抽象化されている
・サービスのインスタンスを作成して、コードを追加する
・インフラストラクチャの構成やメンテナンスは必要ないが、許可されていることもある

##Azure仮想マシンを試す

###Azure Virtual Machines (VM)
・クラウドで仮想マシンを作成し、使用することができる
・仮想化されたサーバーという形式でサービスとしてのインフラストラクチャ (IaaS) を提供する
・以下の場合に最適な選択肢
　　・オペレーティングシステム (OS) の完全な制御
　　・カスタムソフトウェアの実行機能
　　・カスタムホスティング構成の使用

###仮想マシンを使用する場合の例
・テストおよび開発中。VMを使用すると、さまざまな OS とアプリケーションの構成をすばやく簡単に作成できる
・クラウドでアプリケーションを実行する場合。 アプリケーションを実行するためにインフラストラクチャを作成するのではなく、特定のアプリケーションをパブリッククラウド内で実行できることによって、大きな経済的なメリットが得られる
・データセンターをクラウドに拡張する場合。 組織は、Azureで仮想ネットワークを作成し、その仮想ネットワークにVMを追加することによって、独自のオンプレミスネットワークの機能を拡張できる
・ディザスター リカバリー中。 ディザスター リカバリーに対するIaaSベースのアプローチを使用することで、大幅なコスト削減を実現できる

###VMを利用してクラウドに移行する
・物理サーバーからクラウドに移行するときも、VMが優れた選択肢となる（リフト アンド シフト）
・物理サーバーのイメージを作成し、まったくの変更なしか、ほんの少しの変更で、VM内でホストできる

###AzureでVMをスケーリングする
・テスト、開発、または小規模タスクのために 1 つのVMを実行することができる
・VM をグループ化し、可用性、拡張性、冗長性を高めることができる

###可用性セットとは
・計画または計画外のメンテナンス中、アプリケーションの可用性が維持されるよう2つ以上のVMを論理的にグループ化したもの
・可用性セットにより取得できるもの
　　・それぞれに専用の電源とネットワークリソースを備えたサーバーラックがある最大3つの障害ドメイン
　　・5つの論理的な更新ドメイン（その後最大20個まで増やすことが可能）
・可用性セットに料金は発生しない

###Azure Virtual Machine Scale Sets（仮想マシン スケール セット）とは
・負荷分散が行われる同一のVMのグループを作成して管理できる
・大量のVMを数分で一元的に管理、構成、更新し、アプリケーションの可用性を高めることができる
・需要または定義されたスケジュールに応じて、VMインスタンスの数を自動的に増減させることができる
・Virtual Machine Scale Setsを使用すると、コンピューティング、ビッグデータ、コンテナー ワークロードなどの分野で大規模なサービスを構築できる

###Azure Batchとは
・大規模なジョブ スケジューリングとコンピューティング管理を可能にする

##Azureのコンテナーを試す

###コンテナー
・単一のホスト マシンでアプリケーションの複数のインスタンスを実行したい場合は、コンテナーが優れた選択肢となる
・アプリケーションを実行するホストOS上に構築される、変更されたランタイム環境
・仮想化は使用されないため、冗長なOSで仮想ハードウェアをシミュレートすることにリソースが余分に使用されることはない⇒コンテナーはVMよりも軽量になる
・複数の独立アプリケーションを1つのコンテナーホストで実行できる
・コンテナーはセキュリティで保護され分離されているため、アプリごとにサーバーを切り離す必要はない

###Azureのコンテナー
・Dockerコンテナー（標準化されたコンテナーモデル）に対応しており、Azureではいくつかの方法でコンテナーを管理できる
　※　Docker：アプリケーションをコンテナ化して実行する実行環境やその周辺ツール群
　　・Azure Container Instances（ACI）
　　　・コンテナーをアップロードし、自動エラスティックスケールを使用して直接実行できるPaaS型サービス
　　・Azure Kubernetes Service（AKS）
　　　・複数のコンテナーを分散するアーキテクチャを持つコンテナーのための完全なオーケストレーションサービス
　　　※オーケストレーションサービス：多数のコンテナーを自動化し、管理し、それらとやりとりするタスク

[Kubernetesとは](https://www.sbbit.jp/article/cont1/35564)

###ソリューションでコンテナーを使用する
・コンテナーは、マイクロサービスアーキテクチャを使用してソリューションを作成するためによく使用される
・ソリューションを独立した小さなパーツに分割し、独立して維持、スケーリング、または更新できる論理的なセクションにアプリの部分を分離する
※マイクロサービス（Microservices）：個々に開発された複数の小さな（マイクロ）サービスを連携させて管理、運営をおこなっていくソフトウェアのアーキテクチャ

###コンテナーへのアプリの移行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545315/4a114efe-f40a-f800-e670-0ba7b51b4b93.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545315/205b4010-116e-7638-22c0-cb397321cca8.png)

##Azure App Serviceを試す
・Azure App Serviceを使用することでインフラストラクチャを管理することなく、任意のプログラミング言語でWebアプリ、バックグラウンド ジョブ、モバイル バックエンド、RESTful APIを構築し、ホストできる。これにより、自動スケーリングと高可用性が提供される

###App Serviceコスト
・アプリによって使用される Azure コンピューティング リソースに対して料金を支払う

###Webアプリの種類
・Webアプリ（Web Apps）
　　・ASP.NET、ASP.NET Core、Java、Ruby、Node.js、PHP、またはPythonを使用し、Web アプリをホストするための完全サポートが含まれる
・APIアプリ（API Apps）
　　・選択した言語とフレームワークを利用しRESTベースのWeb APIを構築できる
　　・Swagger（OpenAPI）の完全サポートが与えられるほか、APIをパッケージ化しAzure Marketplaceで公開できまる
　　・作成されたアプリはHTTPベースのあらゆるクライアントから利用できる
・Web ジョブ（WebJobs）
　　・プログラム (.exe、Java、PHP、Python、または Node.js) やスクリプト (.cmd、.bat、PowerShell、または Bash) を Webアプリ、APIアプリ、モバイルアプリと同じコンテキストで実行できる
　　・アプリケーションロジックの一環としてバックグラウンドタスクを実行するために使用される
・モバイルアプリのバックエンド
　　・Azure App ServiceのMobile Apps機能を使用し、iOSアプリやAndroidアプリのバックエンドを構築する

##Azureでサーバーレスコンピューティングを試す

###サーバーレスコンピューティングとは
・サーバー、インフラストラクチャ、OSを抽象化したもの
・Azureによってサーバーインフラストラクチャとリソースのオンデマンド割り当て/割り当て解除が管理できる
・スケーリングとパフォーマンスは自動的に処理され、使用した正確なリソースに対してのみ課金される

###サーバーの抽象化
・サーバーレスコンピューティングでは、実行先のサーバーが抽象化される
・ユーザーが明示的にサーバーインスタンスを予約することはなく、プラットフォームによって自動的に管理される
・サーバーレスアーキテクチャでは、コードをデプロイするだけで高可用性のある実行ができる

###イベントドリブンスケール
・開発者はトリガーとバインドに関するコードとメタデータの両方を含む関数を作成する
・プラットフォームにより実行する関数が自動的にスケジュールされ、受信イベントの割合に基づいてコンピューティングインスタンスの数がスケーリングされる

###マイクロビリング
・コードが実行された時間に対してのみ課金される（アクティブな関数の実行が発生しなかった場合は課金されない）

###Azure Functions
・サービスを実行しているコードのみに関心があり、基になるプラットフォームやインフラストラクチャには関心がない場合に最適
・必要に応じて自動的に拡大縮小するため、需要が変化する場合、堅実な選択肢となる

###Azure Logic Apps
・ビジネスシナリオを自動化するために設計され、事前定義されたロジックブロックから構築されたワークフローがトリガーによって実行される

###FunctionsとLogic Apps
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545315/fe25be10-c687-c3b0-7b5e-d3a87ee1aac9.png)