Azure CLIからARMテンプレートを利用してUbuntuをデプロイする

はじめに

Visual Studio 2015からAzure上にCentOSをデプロイしてみたよ。

という記事もありますが、今回はCentOS(CLI)からARMテンプレートを利用してAzure上にUbuntu14.04をデプロイしてみます。ARMテンプレートによるデプロイは仮想マシンだけでなく、WebAppsやSQL Databaseなどでもできます。

今回もSSHでログインできるまで試します。

Azure portalから構築する方法はこちらの記事も御覧ください。
Azureに仮想マシン(CentOS)を構築する

方法

Azure Resource Manage(以下、ARM)を使ってARMテンプレートから仮想マシンをデプロイします。このARMテンプレートはJSON形式で書かれており、デプロイ対象リソースの依存関係も定義します。Azure Portalでできる操作はほぼ全て記述可能です。

ARMテンプレートを使うことによって、常に一貫した状態でデプロイすることができます。

事前準備

Azure CLIが使える環境を用意

ARMテンプレートからデプロイする手段は、Azure CLI、Azure Portal、PowerShellなどいろいろありますが今回はAzure CLIを利用します。

Azure CLIのインストールについては下記記事が参考になります。ぜひご覧ください。
LinuxサーバからAzure CLIを使ってみました

また、Azure CLI のバージョンを 0.9.0以上にする必要があります。

[code lang=text]
# azure –version
[/code]

SSH Keyの作成

仮想マシンを作成する際にSSH Keyペアが必要です。事前に作成します。

1.ssh-keygenで作成

[code]
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): パスフレーズ入力
Enter same passphrase again: パスフレーズ再入力
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
[/code]

2.作成できたことを確認

鍵の作成方法についてはこちらの記事が参考になります。
OSS on Azureことはじめ 【連載第9回】 ー SSHをmore

[code lang=text]
# ls ~/.ssh
id_rsa id_rsa.pub known_hosts
[/code]

デプロイ

それでは、実際にARMテンプレートを利用してAzureにリソースをデプロイしてみます。

1.Azureにログインする

[code lang=text]
# azure login
info: Executing command login
|info: To sign in, use a web browser to open the page https://aka.ms/devicelogin. Enter the code AAAAAAAAA to authenticate.
info: login command OK
[/code]

(https://aka.ms/devicelogin にブラウザからアクセスして、コマンドラインのcodeを入力します。)

※多要素認証でなく、組織のMicrosoftアカウントであれば非対話型での認証が可能なようです。azure login -u account@example.com

2.利用するサブスクリプションを指定する

サブスクリプションを確認します。

[code lang=text]
# azure account list
info: Executing command account list
data: Name Id Current State
data: ————– ———————————— ——- ——-
data: TESTSUBSCRIPTION1 11112222-aaaa-bbbb-cccc-ddddddddddd true Enabled
data: TESTSUBSCRIPTION2 33334444-wwww-xxxx-yyyy-zzzzzzzzzzzz false Enabled
info: account list command OK
[/code]

true が現在のサブスクリプションです。

変更する場合は

[code lang=text]
# azure account set TESTSUBSCRIPTION2
info: Executing command account set
info: Setting subscription to TESTSUBSCRIPTION2 with id 33334444-wwww-xxxx-yyyy-zzzzzzzzzzzz.
info: Changes saved
info: account set command OK

[/code]

3.Azure CLI をResources Manager Modeにする
ModeはClassicとResources Managerの2種類があります。

Classicは、Azure Service Manager
Resources Managerは、Azure Resource Manager

Azure Resource ManagerでないとARMテンプレートからのデプロイができないので、Resources Manager Modeにします。

[code lang=text]
# azure config mode arm
info: Executing command config mode
info: New mode is arm
info: config mode command OK
[/code]

4.ARMテンプレートからデプロイする

ARMテンプレートは、作成する事もできますが、Azure クイック スタート テンプレートにARMテンプレートがあるので今回はこちらを利用します。

[code lang=text]
azure group create -n <リソースグループ名> -l <ロケーション> –template-uri <URI>
[/code]

-n : Resources Groupの名前を指定します。

-l : Locationを指定します。
米国東部なら eastus
東日本なら japaneast
インド南部なら southindia
利用可能なLocationはazure location listで確認できます。

–template-uri : jsonが置かれているURIを指定します。ローカルにあるファイルを指定するなら--template-file

Resources Group名をarmtest
Locationをjapaneast
利用するJSONはhttps://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-sshkey/azuredeploy.json

で実行します。公開鍵が必要なので準備しておいてください。

[code lang=text]
# azure group create -n armtest -l japaneast –template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-sshkey/azuredeploy.json
[/code]

sshKeyDataを聞かれるので、事前準備で作成した公開鍵を貼り付けます。

[code lang=text]
# azure group create -n armtest -l japaneast –template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-sshkey/azuredeploy.json
info: Executing command group create
+ Getting resource group armtest
+ Creating resource group armtest
info: Created resource group armtest
info: Supply values for the following parameters
sshKeyData: ssh-rsa AAA—省略—Pn5P <your_user@yourdomain.com>
[/code]

少し待ちます。

[code lang=text]
+ Initializing template configurations and parameters
+ Creating a deployment
info: Created template deployment "azuredeploy"
data: Id: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest
data: Name: armtest
data: Location: japaneast
data: Provisioning State: Succeeded
data: Tags: null
data:
info: group create command OK
[/code]

「Provisioning State: Succeeded」!。できたようです。

コマンドラインから確認してみます。

5.リソースグループを確認する
azure group listを使います。

[code lang=text]
# azure group list
info: Executing command group list
+ Listing resource groups
data: Name Location Provisioning State Tags:
data: ————————- ——— —————— —–
data: armtest japaneast Succeeded null
info: group list command OK

[/code]

armtest が作成されてますね。

6.仮想マシンが作成されたことを確認する

グループ内のリソースを確認するにはazure resource list <リソース グループ名>を利用します。

[code lang=text]
# azure resource list armtest
info: Executing command resource list
+ Listing resources
data: Id Name Resource Group Type Parent Location Tags
data: ————————————————————————————————————————————————– ——————— ————– ————————————— —— ——— —-
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Compute/virtualMachines/sshvm sshvm armtest Microsoft.Compute/virtualMachines japaneast null
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Network/networkInterfaces/sshNIC sshNIC armtest Microsoft.Network/networkInterfaces japaneast null
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Network/networkSecurityGroups/networkSecurityGroup1 networkSecurityGroup1 armtest Microsoft.Network/networkSecurityGroups japaneast null
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Network/publicIPAddresses/sshPublicIP sshPublicIP armtest Microsoft.Network/publicIPAddresses japaneast null
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Network/virtualNetworks/sshVNET sshVNET armtest Microsoft.Network/virtualNetworks japaneast null
data: /subscriptions/11112222-aaaa-bbbb-cccc-ddddddddddd/resourceGroups/armtest/providers/Microsoft.Storage/storageAccounts/vhgf5canowvrcsasshvm vhgf5canowvrcsasshvm armtest Microsoft.Storage/storageAccounts japaneast null
info: resource list command OK
[/code]

NICやIPやら仮想マシンなどが作成できたようです。

7.Azure Portalからも確認する

ss87

Azure Prtalからも作成できていることが確認できました。

8.SSH 接続する

秘密鍵を指定してSSH接続してみます。ユーザー名はazureuserです。

[code lang=text]
# ssh -i /root/.ssh/id_rsa azureuser@IPADDRESS
azureuser@sshvm:~$ uname -a
Linux sshvm 3.19.0-65-generic #73~14.04.1-Ubuntu SMP Wed Jun 29 21:05:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[/code]

問題なく接続できました。

終わりに

今回はAzure CLIからARMテンプレートを利用して仮想マシンをデプロイしてみました。Azure クイックスタートのテンプレートを利用しましたが、作成する
場合はVisual Studioを利用すれば比較的容易に作成することができます。また、仮想マシンを作成してそこからテンプレートをエクスポートするアプローチも良さそうです。

次回は、もう少し複雑はARMテンプレートを作成してみたいと思います。

Be the first to comment

コメント投稿

Your email address will not be published.


*