{
“名前” : “真壁 徹(まかべ とおる)”,
“所属” : “日本マイクロソフト株式会社”,
“役割” : “クラウド ソリューションアーキテクト”,
“経歴” : “大和総研  HP Enterprise”,
“特技” : “クラウド & オープンソース”
}
リソースグループ
Managed
Disk
仮想マシン
仮想
ネットワーク
(サブネット)
NIC
パブリック
IPアドレス
Web App
SQL
Database
クラシック リソースマネージャー
呼称 Azure Service Manager
(ASM)
Azure Resource Manager
(ARM)
バージョン V1 V2
リソースの表現や設定 XML JSON
GUI クラシックポータルから
Azureポータルへ移行中
Azureポータル
位置づけ 既存ユーザーの投資保護 推奨
小ネタ APIをRDFE(Red Dog Front
End)と呼ぶことも
※Red DogはAzure初期の
コードネーム
略が某CPUアーキテク
チャーと混乱しないよう、
文脈に注意
サーバー ストレージ ネットワーク Web App etc
Azure Resource Manager REST API
Azure ポータル
CLI
(PowerShell, Azure CLI)
SDK (C#, Node, Python, etc)
or Direct
ユーザー
コード
OSS / 3rd Party
ツール
ユーザー コード / スクリプト / 設定ファイル
リソースはJSONで表現
• https://management.azure.com/subscriptions/{s
ubscriptionId}/resourceGroups/{resourceGroup}
/providers/Microsoft.Compute/virtualMachines/
{vm}&api-version={apiVersion}
• HTTPメソッドで操作 (REST)
• 作成、更新はPUT
• 情報取得はGET
• 削除はDELETE
サーバー ストレージ ネットワーク Web App etc
Azure Resource Manager REST API
Azure ポータル
CLI
(PowerShell, Azure CLI)
ユーザー
コード
OSS / 3rd Party
ツール
ユーザー コード / スクリプト / 設定ファイル
SDK (C#, Node, Python, etc)
or Direct
①Azure Resource Manager
テンプレート デプロイメント ②Terraform
③Ansible
ARMテンプレート Terraform Ansible
開発リード Microsoft Hashicorp (OSS) Red Hat (OSS)
対応プラットフォーム Azure/Azure Stack マルチプラットフォーム マルチプラットフォーム
リソース記述形式 JSON HCL/JSON YAML
Azureリソース対応範囲 広 中 狭
依存ツール、SDK Azureポータル、もしくは
Azure CLI/PowerShell
Azure SDK for Go Azure SDK for Python
ARMテンプレート対応 ー 有り 有り
その他 新サービス、機能への追
従が早い
変数定義力が強い(出力結
果も容易に利用可)
Roleの再利用性が高く、
サンプルも豊富(Galaxy)
Azureの標準機能でワンス
トップサポート
HCLの可読性が高い PackerのProvisionerとし
ても使える
インフラ寄り アプリ・プラットフォームソフト寄り
ひとつのツールでやるべき? (できなくはないですが)
リソース
他CI/CDツールや
リポジトリ
ARMテンプレート
デプロイメント
Terraform +
ARMテンプレート
デプロイメント
インフラのデプロイ
アプリ&プラットフォームソフトの
デプロイと更新
Ansible
• アプリ&プラット
フォームソフトの
セットアップと更新
• VMカスタムイメージ
作成
Packer
ARMテンプレートで足元を固めて、他ツールも検討
ARMテンプレート
Azure ポータル
PowerShell /
Azure CLI
API
Endpoint
1. テンプレートを
作る
2. テンプレートを
投入する
3. 楽しみに
待つ
テンプレートの構造
←スキーマ定義URI。いまのところ固定。
←任意。ユーザーが決められる。 (1.0.0など)
←テンプレート実行時に動的に指定したい値。
←テンプレート内で使える変数。複数回参照される値など。
←作成するリソースの定義。
←実行終了時に出力したい値。
テンプレート例 (Azure Container Instances)
####続く####
テンプレート例 (Azure Container Instances)
####続き####
####続く####
テンプレート例 (Azure Container Instances)
####続き - 途中省略####
####途中省略####
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-authoring-templates
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-template-functions
https://raw.githubusercontent.com/ToruMakabe/AA_IaC_Workshop/master/aci/template01.json
ARMテンプレート
+パラメータ
Azure ポータル
PowerShell /
Azure CLI
API
Endpoint
1. テンプレートと
パラメータを作る
2. テンプレートと
パラメータを投入
する
3. 楽しみに
待つ
テンプレート例 (Azure Container Instances)
####省略####
####省略####
####省略####
パラメータ例 (Azure Container Instances)
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerImage": {
"value": "httpd:alpine"
}
}
}
https://raw.githubusercontent.com/ToruMakabe/AA_IaC_Workshop/master/aci/template02.json
https://code.visualstudio.com/download https://marketplace.visualstudio.com/items?itemName
=msazurermtools.azurerm-vscode-tools
Azure CLI or PowerShell ランタイム/環境 導入形式
Windows Azure CLI Python MSI
Windows Subsystem for
Linux
各パッケージマネージャ /
マニュアル
Docker Docker
PowerShell WMF PowerShellGet(推奨)
macOS Azure CLI Python Homebrew / マニュアル
Docker Docker
PowerShell (ベータ) .NET Core PowerShellGet(推奨)
Linux Azure CLI Python 各パッケージマネージャ /
マニュアル
PowerShell (ベータ) .NET Core PowerShellGet(推奨)
Azure Cloud Shell Azure CLI ブラウザ インストール済み
PowerShell (Preview) ブラウザ インストール済み
Windows macOS
VS Code VS Code
Azure系
拡張
その他拡張
(言語系など)
Settings Sync
拡張
Azure系
拡張
その他拡張
(言語系など)
Settings Sync
拡張
Windows macOS
ブラウザ WSL PowerShell ブラウザ
Azure CLI
(メイン)
Azure CLI
(メイン)
Cloud Shell Cloud Shell
Azure
CLI
PowerS
hell
Azure CLI PowerShell
"terminal.integrated.shell.windows": "C:¥¥windows¥¥sysnative¥¥bash.exe“)
https://code.visualstudio.com/download
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest
https://docs.microsoft.com/ja-jp/powershell/azure/install-azurerm-ps?view=azurermps-5.0.0
https://docs.microsoft.com/ja-jp/azure/azure-resource-
manager/resource-manager-vscode-extension
"outputs": {
"groupLocation": {
"type": "string",
"value": "[resourceGroup().location]"
},
"storageUri": {
"type": "string",
"value":
"[reference(concat('Microsoft.Storage/storageAccounts/',variables('stora
geName'))).primaryEndpoints.blob]"
}
}
https://github.com/ToruMakabe/AA_IaC_Workshop
https://azure.microsoft.com/en-us/resources/templates/
https://github.com/ToruMakabe/ImpressAzureBook
ざっと眺めてみて、楽しそうなものを試してください
https://github.com/Azure/azure-quickstart-templates
https://azure.microsoft.com/ja-jp/regions/services/
–n hoge01 …
PowerShell: New-AzureRmResourceGroupDeployment –Name hoge01 …
例: デプロイ毎に違う名前でストレージアカウントを作りたい
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-template-functions-string#concat
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-template-functions-string#uniquestring
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-define-dependencies#dependson
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-template-functions-numeric#copyindex
https://docs.microsoft.com/ja-
jp/azure/architecture/best-
practices/naming-conventions
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-linked-templates
https://docs.microsoft.com/ja-
jp/azure/templates/microsoft.auto
mation/automationaccounts
https://github.com/ToruMakabe/ImpressAzureBook/tree/master/NodeIaaS
https://github.com/ToruMakabe/ImpressAzureBook/tree/master/NodeIaaS
• リソースが既にリソース グループに存在しており、その設定が変更されていない場合、操作の結果に変わりは
ありません。
• リソースの設定を変更した場合、リソースはそれらの新しい設定でプロビジョニングされます。
• 既存のリソースの場所または種類を更新しようとすると、デプロイがエラーで失敗します。
• 後から変更できない属性があります。(VMのimageReferenceなど)
• ARMの管理範囲を外れるものは注意してください。 (VM拡張機能など。例: 拡張はインストールされたがその
設定中にエラーで終了。再実行したら拡張がすでに入っているので失敗)
• 既存リソースの変更は、必ず別環境で検証しましょう。新規作成→並行運用→切り替えの方が楽かも。
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-template-deploy-cli
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-overview
https://docs.microsoft.com/en-us/rest/api/
https://github.com/Azure/azure-resource-manager-schemas
© 2017 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

Azure Infrastructure as Code 体験入隊