Azureで Infrastructure as Code
AzureでInfrastructure as Code#インフラ勉強会2018/5/26@tenn_251
View Slide
@tenn_25・Web系企業のシステム運用・最近AWSとかAzureとか触る・データベースが好き・ネットワークが苦手自己紹介2
今回の目的・みんなに「AzureでInfrastructure as Code」する方法を知ってもらう。・わたしが「まさかり」をもらってレベルアップする。・カレンダーの空白を埋めるため。3
手元で触ってみたい方①MSアカウントとAzureのサブスクリプションを登録する(クレカ登録が必要)https://azure.microsoft.com/ja-jp/free/②手元のPCにAzure CLIを入れるhttps://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latestとりあえずこれだけでOK4
アジェンダ・AzureのARMテンプレートとは・Azureポータルからリソースをつくってみよう・作ったリソースのARMテンプレートを確認しよう・ARMテンプレートの構成を理解しよう・テンプレートからデプロイしてみよう・ARMテンプレートの感想、困ったこと5
AzureのARMテンプレートとは・ARM…Azure Resource Manager (最近のAzureのデプロイモデル)・Azure上のリソースをJSON形式でコード化したもの。・Terraformとか、AWSだとCloudFormationみたいなやつ?※Azureは公式ドキュメントが良くまとまっています。https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/6
Azureポータルからリソースをつくってみよう①リソースグループ 仮想的なグループ。AWSにはない。全てのリソースは何かしらのグループに含まれる。②AppServicePlan 後述するWebAppsを動かす環境。コンピューティングリソースを決める。この単位で課金が発生する。③AppService WebAppsを選ぼう。Webサーバー(IIS)のPaaS。AWSにはない。世界で1つだけの名前をつける。(以下余力があったら後でやる)④SQL サーバー …後述するSQLデータベースを動かす論理サーバー。DBへのログインはこの単位。世界に1つだけの(ry⑤SQLデータベース … データベース(SQLServer)のPaaS。AWSでいうRDS。この単位で課金が発生する。7
作ったリソースのARMテンプレートを確認しよう・Auzreポータル>リソースグループ>デプロイ>テンプレート 画面から作った各リソースのJSONテンプレートが確認できる。 ・テンプレート … json形式。作りたいインフラの構成。 template.json ・パラメータ … json形式。テンプレートに渡す変数を記載する。 parameter.json ・CLI / Powershell / .NET / Ruby … AzureCLIを実行する各言語のスクリプト8
ARMテンプレートの構成を理解しようテンプレートの大枠9{"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {},"variables": {},"resources": [],"output": []}
ARMテンプレートの構成を理解しよう"parameters"・変数の定義。各リソースの名前やパスワードなど。・デフォルト値や最大/最小値などを指定できる。・実際の値はparameter.json等の別ファイルに外出しする。10"parameters": {"administratorLogin": {"type": "String"},"administratorLoginPassword": {"type": "SecureString"},"location": {"type": "String"},"serverName": {"type": "String"}}
ARMテンプレートの構成を理解しよう"variables"・定数の値を書いたり、 paramater.jsonから取得した変数をごにょごにょする (まさかりポイント)・テンプレート内は色々な関数が使えるみたい。下の例だと concatで文字連結をしている。11"variables": {"appAvailsetName": "appavset","appLBName": "applb","appLBIPAddressName": "applbpip","appLBRuleName": "applbrule","appVmNicName": "[concat(parameters('appVmNamePrefix'),'nic')]","appVmDscExtName": "[concat(parameters('appVmNamePrefix'),'dscext')]","appVmAntiMalwareExtName": "[concat(parameters('appVmNamePrefix'),'amwext')]"}
ARMテンプレートの構成を理解しよう"resources": [{"type": "Microsoft.Web/sites","name": "[parameters('name')]","apiVersion": "2016-03-01","location": "[parameters('location')]","tags": {"一部省略"},"properties": {"name": "[parameters('name')]","serverFarmId": "一部省略","hostingEnvironment":"[parameters('hostingEnvironment')]"},"dependsOn": ["[concat('Microsoft.Web/serverfarms/',parameters('hostingPlanName'))]"]}]12"resources"・実際に作りたいものを記述・変数はparameters('')で取得・リソース間で依存関係がある場合は、 "dependsOn"で記載。例)AppServicePlan⇨WebAppsの順に作る必要がある。例)デプロイする時に、WebよりDBを先に作りたい。
ARMテンプレートの構成を理解しよう"outputs": {"adminUsername" : {"type": "string","value": "[parameters('adminUsername')]"}}13"output"・デプロイのリクエストに対する戻り値・必須ではなさそう・良い使い方が思いつかない…(まさかり)
ARMテンプレートからデプロイしてみよう14やりたいこと:手作業で作った構成をテンプレートにして、パラメータを変えて別のリソースグループにデプロイ!手順1:Auzreポータル>リソースグループ>Automationスクリプトリソースグループ単位に1つのテンプレートにまとめて出力してくれる
手順1:Auzreポータル>リソースグループ>Automationスクリプトリソースグループ単位に1つのテンプレートにまとめて出力してくれる※なんかテンプレート化できない項目とか一部あるらしい・・ WebAppsのアプリ設定(IISの設定)とかも反映されないらしい・・ARMテンプレートからデプロイしてみよう15
ARMテンプレートからデプロイしてみよう16手順2:Autmationスクリプト>ダウンロードtemplate.json、parameters.json等がダウンロードできるが、パラメータが空っぽ。手順3:リソースグループ>Automationスクリプトデフォルトのパラメータが入った状態でJSONが表示されるので手順2でダウンロードしたtemplate.jsonにコピペする。
ARMテンプレートからデプロイしてみよう17手順4:テンプレートを修正 WebApps名は一意でないといけないので変更する。 その他お好みで設定を変更。(以下余力があったら後でやる)手順5:Database名は一意でないといけないので変更する。手順6:DBのパスワードを指定する部分を加える。
ARMテンプレートからデプロイしてみよう先にリソースグループを作成$ az group create --name ResourceGroupName --location japaneastJSONファイルを引数に指定してデプロイを実行!!!!$ az group deployment create --name DeployName --resource-groupResourceGroupName --template-file template.json --parameters parameters.jsonポータルからリソースが起動できることを確認しましょう。エラーはリソースグループのデプロイの項目で詳細確認しよう。 18
ARMテンプレートの感想、困ったこと・ポチポチ作る→JSONにリバースできるの素敵!!・JSONの形式やコマンドがシンプル!!・テンプレート化できない項目や、本当はできるけど含まれてない項目がある。・まずはミニマムスタートしよう・パスワードの扱い→KeyVault?・リソースグループ粒度とテンプレートの分け方に悩む。・この先に待っているCI/CDは如何に。19
参考書籍Microsoft Azure実践ガイドhttps://www.amazon.co.jp/dp/4295002798/ref=cm_sw_r_tw_dp_U_x_hrccBbHT3KC29githubなどからサンプルのテンプレートがあるから使ってみよう!https://github.com/ToruMakabe/ImpressAzureBook20遊んだあとはリソースのお片付けを忘れずに…