iMind Developers Blog

iMind開発者ブログ

CLIでAzureの操作

概要

AzureをCLIで扱った経験がなかったもんで、下記などの基本的な操作を実行してみる。

  • インスタンスの開始・終了
  • ストレージの作成とattach
  • ファイルストレージの操作

バージョン情報

  • azure-cli 2.0.54-1
  • Ubuntu 18.04.1 LTS

導入

MSのサイトを参考にazure-cliを入れる。

https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest

ログイン

とりあえずログイン。

$ az login

ブラウザが立ち上がるのでログインを実行すると下記のようなJSONが返る。

[
  {
    "cloudName": "AzureCloud",
    "id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
    "isDefault": true,
    "name": "Azure  プラン",
    "state": "Enabled",
    "tenantId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
    "user": {
      "name": "xxxxxx@xxx.jp",
      "type": "user"
    }
  }
]

~/.azure 配下にTokenとかの情報が保存される。

VMの立ち上げ

VMを一個作って立ち上げてみる。コマンドは下記のような感じ。

$ RESOURCE_GROUP=your_resource_group_name

$ az vm create --resource-group $RESOURCE_GROUP \
  --name example-vm \
  --image UbuntuLTS \
  --generate-ssh-keys \
  --output json \
  --verbose 

利用できるイメージは下記で一覧が出せる。(結果は一部抜粋)

$ az vm image list

[
  {
    "offer": "CentOS",
    "publisher": "OpenLogic",
    "sku": "7.5",
    "urn": "OpenLogic:CentOS:7.5:latest",
    "urnAlias": "CentOS",
    "version": "latest"
  },
  {
    "offer": "RHEL",
    "publisher": "RedHat",
    "sku": "7-RAW",
    "urn": "RedHat:RHEL:7-RAW:latest",
    "urnAlias": "RHEL",
    "version": "latest"
  },
  {
    "offer": "UbuntuServer",
    "publisher": "Canonical",
    "sku": "16.04-LTS",
    "urn": "Canonical:UbuntuServer:16.04-LTS:latest",
    "urnAlias": "UbuntuLTS",
    "version": "latest"
  }
]

UbuntuLTSを指定した場合、バージョンは16.04になるらしい(2019年1月時点)。

--generate-ssh-keys を指定しておくと ~/.ssh/id_rsa に自動で鍵が作られる。

az vm create を実行するとJSONが返ってきて中にpublic ip addressが記載されている。

"publicIpAddress": "xxx.xxx.xxx.xxx"

鍵は設定されているのでこのIPアドレスにsshすれば入れる。ユーザー名もaz createを実行したユーザーの名前になっている。

$ ssh xxx.xxx.xxx.xxx

VMの停止と再開

まずはdeallocate。

$ az vm deallocate \
    --resource-group $RESOURCE_GROUP \
    --name example-vm

これで停止した。

再開する場合はstart。

$ az vm start \
    --resource-group  $RESOURCE_GROUP \
    --name example-vm

再開するとIPアドレスが変わってしまうので確認。

$ az vm list-ip-addresses \
    --output table

vmの削除

vmのみの削除であればdeleteで実行できる。

$ az vm delete \
    --resource-group  $RESOURCE_GROUP \
    --name example-vm

az vm deleteだけだとこの辺は残ったままになる。

  • ディスク
  • ネットワーク セキュリティ グループ
  • パブリック IP アドレス
  • ネットワーク インターフェイス
  • 仮想ネットワーク

az resouce listで現状のリソースの一覧が出てくる。

$ az resource list \
    --resource-group $RESOURCE_GROUP \
    --output table

jqを使ってnameにexample-vmを含むリソースのIDだけを取ってみる。

$ az resource list | jq -c '.[] | select(any(.name; contains("example-vm"))) | .id'

これらも削除する場合はタグ付けしておいてコマンドで一気に削除できると便利。とりあえず今回は個別に削除。

$ az resource delete --ids {スペース区切りで消したいリソースのIDを記述する}

sizeやlocationを指定してVMを立ち上げる

デフォルトではStandard_DS1_v2(1コア、メモリ3.5G)でVMは立ち上がる。 --sizeで他のsizeを指定して立ち上げてみる。またlocationはデフォルトではresource groupの指定と同じ値になるが、試しに別のlocationを指定してみる。

下記はsizeはBシリーズでコア2つ、メモリ4GBのB2Sで、locationはeastusを指定した例。ついでに--admin-usernameも自分の名前を指定しておく。

$ az vm create --resource-group $RESOURCE_GROUP \
  --name example-vm \
  --image UbuntuLTS \
  --generate-ssh-keys \
  --output json \
  --size Standard_B2s \
  --location eastus \
  --admin-username masato.watanabe \
  --verbose 

ディスクの追加とattach

デフォルトのディスクでは足りなくなることも多いので追加のディスクをcreateしてattachしてみる。

先程作ったVMに合わせてeastusに作成する。

$ az disk create --resource-group  $RESOURCE_GROUP \
  --name example-disk \
  --os-type Linux \
  --sku StandardSSD_LRS
  --location eastus \
  --size-gb 64

これで64GBのSSDが確保できた。

続いてattach。

$ az vm disk attach --resource-group $RESOURCE_GROUP \
   --vm-name example-vm \
   --disk example-disk

VMにsshしてdmesgでattachされたディスクを確認。

$ dmesg | grep SCSI

[    3.326313] sd 0:0:0:0: [sda] Attached SCSI disk
[    3.695336] sd 1:0:1:0: [sdb] Attached SCSI disk
[ 6360.476606] sd 3:0:0:0: [sdc] Attached SCSI disk

上記ログでは最後にsdcがアタッチされたっぽい。

/dev配下にsdcが出来ていることを確認。

$ ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sdb  /dev/sdb1  /dev/sdc

fdiskでパーティションを作成。nで新規作成、pでPrimaryを選んで、Partition numberは1にして、sectorはデフォルトのままで、最後にwで終了。

$ sudo fdisk /dev/sdc

Command (m for help): n

Partition type
Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-134217727, default 2048): 

Last sector, +sectors or +size{K,M,G,T,P} (2048-134217727, default 134217727): 

Command (m for help): w

sdc1ができていることを確認。

$ ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1

ext4でフォーマット。

$ sudo mkfs -t ext4 /dev/sdc1

mount

$ sudo mount -t ext4 /dev/sdc1 /mnt/data

dfで/dev/sdc1がマウントされていることを確認。

$ df -h

/dev/sdc1        63G   52M   60G   1% /mnt/data

ファイルストレージの操作

Web UIから下記の3つの作業が行われているものとする。

  • ストレージアカウントを生成
  • 「アクセスキー」からストレージアカウントのキーを取得
  • 「ファイルストレージ」の「ファイル共有」から共有を生成済み

下記の値を変数に設定。

ACCOUNT_NAME=ストレージのアカウント名
ACCOUNT_KEY=アカウントキー
SHARE_NAME=ファイル共有の名前

ディレクトリを生成

$ az storage directory  create \
    --name example \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME

ファイルをアップロード

$ az storage file upload \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME \
    --source example.txt \
    --path example/example.txt

ファイル一覧を取得

$ az storage file list \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME \
    --path example \
    --output table

実行結果

Name         Content Length    Type    Last Modified
-----------  ----------------  ------  ---------------
example.txt  8                 file

ファイルのダウンロード

$ az storage file download \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME \
    --path example/example.txt

ディレクトリごとダウンロード

$ az storage file download-batch \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --source $SHARE_NAME/example \
    --destination .

ファイル削除

$ az storage file delete \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME \
    --path example/example.txt

ディレクトリ削除

$ az storage directory delete \
    --account-name $ACCOUNT_NAME \
    --account-key $ACCOUNT_KEY \
    --share-name $SHARE_NAME \
    --name example

改定履歴

Author: Masato Watanabe, Date: 2019-02-26, 記事投稿