Upgrade to Pro — share decks privately, control downloads, hide ads and more …

study-infra-0526

 study-infra-0526

Azureで Infrastructure as Code

tenn25

May 26, 2018
Tweet

More Decks by tenn25

Other Decks in Programming

Transcript

  1. Azureで
    Infrastructure as Code
    #インフラ勉強会
    2018/5/26
    @tenn_25
    1

    View Slide

  2. @tenn_25
    ・Web系企業のシステム運用
    ・最近AWSとかAzureとか触る
    ・データベースが好き
    ・ネットワークが苦手
    自己紹介
    2

    View Slide

  3. 今回の目的
    ・みんなに「AzureでInfrastructure as Code」する方法を知ってもらう。
    ・わたしが「まさかり」をもらってレベルアップする。
    ・カレンダーの空白を埋めるため。
    3

    View Slide

  4. 手元で触ってみたい方
    ①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
    とりあえずこれだけでOK
    4

    View Slide

  5. アジェンダ
    ・AzureのARMテンプレートとは
    ・Azureポータルからリソースをつくってみよう
    ・作ったリソースのARMテンプレートを確認しよう
    ・ARMテンプレートの構成を理解しよう
    ・テンプレートからデプロイしてみよう
    ・ARMテンプレートの感想、困ったこと
    5

    View Slide

  6. AzureのARMテンプレートとは
    ・ARM…Azure Resource Manager (最近のAzureのデプロイモデル)
    ・Azure上のリソースをJSON形式でコード化したもの。
    ・Terraformとか、AWSだとCloudFormationみたいなやつ?
    ※Azureは公式ドキュメントが良くまとまっています。
    https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/
    6

    View Slide

  7. Azureポータルからリソースをつくってみよう
    ①リソースグループ
     仮想的なグループ。AWSにはない。全てのリソースは何かしらのグループに含まれる。
    ②AppServicePlan
     後述するWebAppsを動かす環境。コンピューティングリソースを決める。この単位で課金が発生する。
    ③AppService
     WebAppsを選ぼう。Webサーバー(IIS)のPaaS。AWSにはない。世界で1つだけの名前をつける。
    (以下余力があったら後でやる)
    ④SQL サーバー …後述するSQLデータベースを動かす論理サーバー。DBへのログインはこの単位。世界に1つだけの(ry
    ⑤SQLデータベース … データベース(SQLServer)のPaaS。AWSでいうRDS。この単位で課金が発生する。
    7

    View Slide

  8. 作ったリソースのARMテンプレートを確認しよう
    ・Auzreポータル>リソースグループ>デプロイ>テンプレート
     画面から作った各リソースのJSONテンプレートが確認できる。
     ・テンプレート … json形式。作りたいインフラの構成。 template.json
     ・パラメータ … json形式。テンプレートに渡す変数を記載する。 parameter.json
     ・CLI / Powershell / .NET / Ruby … AzureCLIを実行する各言語のスクリプト
    8

    View Slide

  9. ARMテンプレートの構成を理解しよう
    テンプレートの大枠
    9
    {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
    "output": []
    }

    View Slide

  10. ARMテンプレートの構成を理解しよう
    "parameters"
    ・変数の定義。各リソースの名前やパスワードなど。
    ・デフォルト値や最大/最小値などを指定できる。
    ・実際の値はparameter.json等の別ファイルに外出しする。
    10
    "parameters": {
    "administratorLogin"
    : {
    "type": "String"
    },
    "administratorLoginPassword"
    : {
    "type": "SecureString"
    },
    "location": {
    "type": "String"
    },
    "serverName": {
    "type": "String"
    }
    }

    View Slide

  11. 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')]"
    }

    View Slide

  12. 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を先に作りたい。

    View Slide

  13. ARMテンプレートの構成を理解しよう
    "outputs": {
    "adminUsername" : {
    "type": "string",
    "value": "[parameters('adminUsername')]"
    }
    }
    13
    "output"
    ・デプロイのリクエストに対する戻り値
    ・必須ではなさそう
    ・良い使い方が思いつかない…(まさかり)

    View Slide

  14. ARMテンプレートからデプロイしてみよう
    14
    やりたいこと:手作業で作った構成をテンプレートにして、パラメータを変えて別のリソー
    スグループにデプロイ!
    手順1:Auzreポータル>リソースグループ>Automationスクリプト
    リソースグループ単位に1つのテンプレートにまとめて出力してくれる

    View Slide

  15. 手順1:Auzreポータル>リソースグループ>Automationスクリプト
    リソースグループ単位に1つのテンプレートにまとめて出力してくれる
    ※なんかテンプレート化できない項目とか一部あるらしい・・
     WebAppsのアプリ設定(IISの設定)とかも反映されないらしい・・
    ARMテンプレートからデプロイしてみよう
    15

    View Slide

  16. ARMテンプレートからデプロイしてみよう
    16
    手順2:Autmationスクリプト>ダウンロード
    template.json、parameters.json等がダウンロードできるが、パラメータが空っぽ。
    手順3:リソースグループ>Automationスクリプト
    デフォルトのパラメータが入った状態でJSONが表示されるので手順2でダウンロードし
    たtemplate.jsonにコピペする。

    View Slide

  17. ARMテンプレートからデプロイしてみよう
    17
    手順4:テンプレートを修正
     WebApps名は一意でないといけないので変更する。
     その他お好みで設定を変更。
    (以下余力があったら後でやる)
    手順5:Database名は一意でないといけないので変更する。
    手順6:DBのパスワードを指定する部分を加える。

    View Slide

  18. ARMテンプレートからデプロイしてみよう
    先にリソースグループを作成
    $ az group create --name ResourceGroupName --location japaneast
    JSONファイルを引数に指定してデプロイを実行!!!!
    $ az group deployment create --name DeployName --resource-group
    ResourceGroupName --template-file template.json --parameters parameters.json
    ポータルからリソースが起動できることを確認しましょう。
    エラーはリソースグループのデプロイの項目で詳細確認しよう。 18

    View Slide

  19. ARMテンプレートの感想、困ったこと
    ・ポチポチ作る→JSONにリバースできるの素敵!!
    ・JSONの形式やコマンドがシンプル!!
    ・テンプレート化できない項目や、本当はできるけど含まれてない項目がある。
    ・まずはミニマムスタートしよう
    ・パスワードの扱い→KeyVault?
    ・リソースグループ粒度とテンプレートの分け方に悩む。
    ・この先に待っているCI/CDは如何に。
    19

    View Slide

  20. 参考書籍
    Microsoft Azure実践ガイド
    https://www.amazon.co.jp/dp/4295002798/ref=cm_sw_r_tw_dp_U_x_hrccBbHT3KC29
    githubなどからサンプルのテンプレートがあるから使ってみよう!
    https://github.com/ToruMakabe/ImpressAzureBook
    20
    遊んだあとはリソースのお
    片付けを忘れずに…

    View Slide