Linux上で使えるAzureの便利ツール

#はじめに
Linux 環境で利用できるAzureのUtility Toolsについて公式・非公式問わず整理します。
加えてマニュアルでセットアップするのは面倒なので、Azure上のLinux VM にCloud-initで全部セットアップしてみます。

#Tools For Linux
##1. Azure CLI
Cross Platform（Mac, Windows, Linux）で利用できるAzureリソースをシェルベースで操作できるコマンドラインツール。（ポータルやPowerShellでできることをシェルで書けるツール）。Open Sourceでgithub上にリポジトリがありpythonベースで作られています。

Azure/azure-cli :https://github.com/Azure/azure-cli

通常Linuxにインストールする場合は、aptやyumなどのパッケージ管理ソフトでインストールします。
[Azure CLI のインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest)

Dokcer Imageもあるので、環境を独立させたい場合はこちらを使えます。

microsoft/azure-cli : https://hub.docker.com/r/microsoft/azure-cli

※公式ドキュメントにはなかったがsnapでも使える模様 > [Azure CLI Snap](https://snapcraft.io/azure-cli)


##2. Azcopy v10
Azure Storageに対するデータ操作を実行できるGoベースのツール。2019/4にGAされました。

AzCopy v10 を使用してデータを転送する
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10

こちらもOpen Sourceでgithub上にリポジトリが公開されている。
Azure/azure-storage-azcopy : https://github.com/Azure/azure-storage-azcopy

ローカル<=>Azure Storage、
Azure Storage<=>Azure Storage, 
AWS S3 =>Azure Storage
でデータ操作ができる。

個人的には、azcopy loginでAzure サブスクリプションへのユーザアカウントでログインして使える点が便利（以前のv8などはストレージアカウントのキーベースで認証する必要があった）。Data Lake Storage Gen2も扱えます。


##3. armclient-go
Azureリソースを管理するREST-APIをLinux環境から叩きやすくしてくれるツール。
ツール自体は非公式だが、一応作っている人はMSの中の人

https://github.com/yangl900/armclient-go

元々、Windows環境で[Chocolatey]( https://chocolatey.org/)経由でインストールできる、[ARM-client]( https://github.com/projectkudu/armclient)があったので、それのLinux版として作っているという位置づけ。

Azure CLI も実体はREST APIを発行して管理しているだけなので、できることはかぶっている。
ただ、直接RESTにリクエストしたいとき、認証ヘッダとかの処理が面倒だったりするので、さくっと試したいときには便利だと思う。

Azure REST API Reference
https://docs.microsoft.com/en-us/rest/api/azure/

# Azure VMに全部インストールしてデプロイする。
環境を作っては削除し作っては削除するタイプの人間なので、手作業でセットアップしたくない。Ubuntu VM上にcloud-initで上のツールをインストールして作成するスクリプトを作成してみた。

https://github.com/gutzeit1106/azure-samples/tree/master/110_vm_cloudinit-Linux

まず端末にAzure CLIだけは動作するようにしておき、cloud_init_config.txt の同一階層で以下のコマンドを実行する。
作成されるUbuntu VMの初期ユーザは、コマンドを実行したユーザとなり、sshのキーペアは自動的に生成されて公開鍵が初期ユーザに紐づいている。秘密鍵はローカルの.ssh配下に配置されるなので実行して、VMが作成できたらそのままsshすればOK。

Azure CLI Script

```sh
az group create --name DevTools --location japaneast
az vm create --resource-group DevTools --name ubuntu-dev-server --image UbuntuLTS --custom-data cloud_init_config.txt --generate-ssh-keys
```

Cloud-init-config

```
package_upgrade: true
packages:
  - tree
runcmd:
  - sudo apt-get install apt-transport-https lsb-release software-properties-common dirmngr -y
  - AZ_REPO=$(lsb_release -cs)
  - echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
  - sudo apt-key --keyring /etc/apt/trusted.gpg.d/Microsoft.gpg adv --keyserver packages.microsoft.com --recv-keys BC528686B50D79E339D3721CEB3E94ADBE1229CF
  - sudo apt-get update
  - sudo apt-get install azure-cli
  - sudo apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu60 -y
  - sudo wget https://aka.ms/downloadazcopylinux64 -O /opt/azcopy.tar.gz -r
  - sudo tar -xf /opt/azcopy.tar.gz -C /opt/
  - sudo /opt/install.sh
  - sudo wget https://aka.ms/downloadazcopy-v10-linux -O /opt/azcopyv10.tar.gz -r
  - sudo tar -xzf /opt/azcopyv10.tar.gz -C /opt/
  - sudo apt-get install curl -y
  - sudo curl -sL https://github.com/yangl900/armclient-go/releases/download/v0.2.3/armclient-go_macOS_64-bit.tar.gz | sudo tar xz -C /opt/
```