Azure

ARMテンプレートでインフラ構築する。

こんにちは。
曽我改め、そがひろです。

趣味はカラオケとカード手品です。
チーズバーガーが好きです。
宜しくお願いします。

Azureでインフラ環境を構築する方法っていろいろありますよね。

主に、

1. ポータルをカチカチクリックしてリソースを作っていく方法
2. Powershell・CLIで作成する方法
3. ARMテンプレートで構築する方法

があります。

1,2を使った構築経験はよくありますが、
3に関してはコードを使って
インフラを構成・管理していく方法となり、
IaC(Infrastructure as Code)と呼ばれています。

自分はコードを書くことに苦手意識を持っていていて、
覚えないといけない“とは思ってたものの…
今までずるずる避けていました。

今回を機に簡単な仮想マシンくらい
デプロイできるようになってやろうと思います。 (`・ω・´)ゞ

1. まずARMって? (´・ω・`)

普段Azureを触ってますが、ARMってそもそもなんやっけ??
ってなったので書きます。

ARM(Azure Resource Manager) :
Azure のデプロイおよび管理サービス 。
Azure サブスクリプション内のリソースを作成、更新、および削除できる管理レイヤーを提供します。 アクセス制御、ロック、タグなどの管理機能を使用して、デプロイ後にリソースを保護および整理します。

[参照元: MS公式サイト] Azure Resource Manager の概要

クラシックモデルを除いて、普段Azureを触っている人はこのARMっていう
管理体系でリソースを管理しているんだよーってことですね。

以下の通り主なARMの特徴について書きました。

1. Azure上のリソースは”リソースグループ“という論理的な器で
  まとめられて管理・監視する。

リソースグループ(RG)とリソースの関係

2. “ロールベースアクセス制御 (RBAC)“でリソース グループ内の
  すべてのサービスにアクセス制御が適用可能。

アクセス制御(IAM)の画面

3. “タグ“をリソースに適用し、サブスクリプション内のリソースを
  論理的に整理出来る且つ、同じタグを共有するリソースのコストを表示する
ことでタグ別(≒用途・組織別)の課金をわかりやすく出来る。

タグの用途例

4.スクリプトではなく宣言型のテンプレート(ARMテンプレート)を使用し
  インフラを管理できる。

最後の4で述べられている特徴がARMテンプレートのことです。
こういったテンプレートを使ってインフラを管理することを

Infrastructure as a Code

と言います。

2. インフラをコードで書くメリット


コードでインフラを管理することで何がうれしいのかというと、
インフラ構築を自動化できます。

例えば一般的なサーバ構築作業で下記のような設定手順があったとします。

- OSとしてCent OSをサーバへインストール。
- サーバを使用するユーザ用にアカウント・PWを設定。
- ミドルウェアとしてMySqlをインストール。
- MySqlを利用するユーザ用のユーザ・PWを設定。

これらの設定は手作業ですると二度手間なことがあったり、
同じ構成のサーバを複数台構築する時は、
上記作業 × サーバ台数分繰り返さないといけません。
また、手作業が多すぎると設定ミスなどのヒューマンエラーにも
繋がりますよね。

⇒ これらのOS/ミドルウェアのインストール・セットアップを
  コードに記述することで 実行するだけで設計通りのインフラを作れます。


予めコードで「こんなインフラ構成を作ってね」と記述しておくことで後は自動でやってくれます。(冪等生)
一度作ったコード(テンプレート)を使えば、
同じような環境を作る時にコードを再利用できます。(時間のコストを節約)
また、インフラ構成をバージョン管理出来ます。

3. ARMテンプレートの中身

ARMテンプレートは下記6つのセクションから出来ています。

順に見ていきます。

  • $schemaセクション(必須)

テンプレート言語のバージョンが記述されている
JSON スキーマ ファイルの場所。 定型文による決まり文句 。

  • contentVersionセクション(必須)

テンプレートのバージョンを記述するセクション(1.0.0.0 など)。
任意の値を指定できる。
構成に変更があった際に値を更新。

  • parametersセクション(任意)

テンプレートファイル(本体のファイル)とは
また別のファイル(パラメータファイル)から取得したい変数を
記述するセクション。
# リソースをデプロイするたびに定義したい値。
(VM名やログインパスワードなど)

  • variablesセクション(任意)

parametersとは違い、テンプレート本体ファイル内で
変数を定義するセクション。

  • resourcesセクション(必須)    

デプロイや変更するリソースを定義するセクション。
仮想マシンやストレージを作成する時などに記述。

  • outputsセクション(任意)

実行結果を返す。
作成完了時のメモを残すこともできる。

4. ARMテンプレートで仮想マシンをデプロイする

…とはいっても、いきなりARMテンプレートを使うことには
なかなか抵抗があります。

・ テンプレートファイルの中身はわかったけど実際に作るのはハードルが高い
・ フルスクラッチで書いてエラー吐きまくったらグダるだろうな
・ 一から勉強するとなると学習コストが高い

等々…

上記のように考えている方々でもできるだけ簡単にARMテンプレートを
使う方法がありました。それが、Azureクイックテンプレートです!

GitHub – Azureクイックテンプレート

これは先人たちが自分みたいな初心者でも簡単にARMテンプレートに
慣れ親しめるように用意された様々なインフラ構成テンプレートです!
これを使わない手はない!ってことで早速シンプルな
インフラ構成のテンプレートをダウンロードします。

今回選んだテンプレートでは以下のリソースを作成します。

・仮想マシン(Ubuntu OS 18.04)
・仮想ネットワーク
・NIC
・パブリックIP
・NSG


本体ファイル(azuredeploy.json)とパラメータファイル(azuredeploy.parameters.json)

のみダウンロードすればひとまずOKです。

まず、パラメーターファイル(azuredeploy.parameters.json)から見てみます。

パラメーターファイル(azuredeploy.parameters.json)

このパラメーターファイルではVMの管理者名(Built-inアカウント)と、
公開鍵orPW等認証情報、DNSラベル名(パブリックIP)が定義されていることがわかります。今回はこんな感じで変えて保存します。

“adminPasswordOrKey”は念の為マスクしてます。

認証については公開鍵ではなくPWを選択しています。

続いて、本体ファイル(azuredeploy.json)の中身を見ていきます。
(長いのでファイル全体の内容は貼りません。。)

parametersセクション一部抜粋

ん?先程のparameterファイルには無かった”vmName”や
“authenticationType”がparametersセクションに書いています。
よく見ると”defaultvalue”と書かれている項目があります。

これは、
parameterファイルに定義されていたらその値を取ってきて、
定義されていなければ、既定の値(defaultValue)を使ってね。という意味です。

今回parametersセクションにはその他にも、VMサイズ(Standard_B2s)や、
サーバOSのバージョン(Ubuntu 18.04)などが書かれていました。

resourcesセクション一部抜粋

上記は仮想マシンの通信制御に使われるNSGの設定内容です。
よく見ると、22ポートへの通信はすべて許可になっています。
テスト環境といえど安全性を考慮し、今回は送信元” sourceAddressPrefix “に
自社のグローバルIPを登録しました。

などなど、テンプレート内容をところどころ変更しましたが、
変更せずそのまま利用できるテンプレートのほうが多いです。

テンプレートの修正が終わったら、実際にリソースをデプロイします。
Powershellコマンドは以下のようになります。

# リソースグループの作成

$rg = New-AzResourceGroup -Name “<リソースグループ名>” -Location “JapanEast”

# ARMテンプレートでリソースデプロイ

New-AzResourceGroupDeployment -ResourceGroupName $rg.ResourceGroupName `
-TemplateFile “<テンプレートファイル(azuredeploy.json)のパス>” `
-TemplateParameterFile “<パラメータファイル(azuredeploy.parameters.json)のパス>”

上記コマンドを叩いて赤字が出たら、エラーなので内容に従ってテンプレートファイル等修正します。
成功すると “output”セクション含め下記のように出力されます。

Azureポータルからだと以下のように見えました。

今回使用したテンプレートファイルは、同じような環境を作成する時に再利用できます。

“いつか使うだろうから。”と言っていつまでも利用しない環境を残さずに、
“必要になったらテンプレートでデプロイ⇒いらなくなったらすぐ作れるし削除!”

という風に出来て無駄なコストを削減出来ます。

まとめ

今回は本当に簡単な構成でしたが、

1. クイックテンプレートのテンプレートを使ってリソースデプロイ。
2. 用途によって内容を編集。
3. 編集したものを保存して再利用。
4. 用途によって内容を編集。 ……

という感じで少しずつテンプレートに慣れていきたいと思います。
目標は全てインフラ構成をコードで管理!….したい。。

以上です。長々と読んで下さり有難うございました!

Azure料金に関する豆知識①前のページ

Office 365 F3(旧F1)次のページ

関連記事

  1. Azure

    Azure 資格試験の更新(2020年版)AZ-203編

    2020年になり、早くも Azure 資格試験の更新がありま…

  2. Azure

    Azure Migrateを使ったIaaS移行

    はじめまして。新人クラウドエンジニアの三醍醐です。今回は、新機能が実…

  3. Application Gateway

    L7負荷分散 Azure Application Gateway について:1回目

    はじめまして。Azure推進チーム構成員のヤモトと申します。…

  4. Azure

    Azure Site Recoveryの課金について

    少々わかりにくい、Azure Site Recovery の…

  5. Azure

    Azure AD Connectの構築トラブルメモ

    今回はAzure AD Connect(AADC)を構築した際に色々…

  6. Azure

    Azureの無料枠ためしてみた。

    目次1はじめに2Azureの無料枠試してみた2-1前…

関連記事

  1. Azure

    WindowsVirtualDesktopがGAされているので(その3)
  2. Azure

    普通のAzure Windows VMを、従量課金のSQL VMにしたい
  3. Azure

    Azureクラシックリソース(Azure Service Management)…
  4. Azure

    strongSwanを使ってP2S接続をする記事~CentOS編~
  5. Azure

    LogAnalytics(監視エージェント)を利用したVMの監視をしよう
PAGE TOP