DRYな備忘録

Don't Repeat Yourself.

Azure CLIを使ってインスタンスの作成、sshまで

前回 Azureことはじめ - DRYな備忘録 をやったので、今回はCLIをやります。

とりあえずbrewでやるか

% brew update
% brew search azure-cli
% brew install azure-cli
% which az
/usr/local/bin/az
% az --version
pyenv: python3.6: command not found

The `python3.6' command exists in these Python versions:
  3.6.1

うーん、Python。とりあえずローカルで動くようにしてみるか。

% pyenv install 3.6.0
% cd /tmp
% pyenv local 3.6.0
% az --version
azure-cli (2.0.22)

# 以下略

とりあえずローカルでazコマンドがうごくようになった。

というのがだるいので

docker使お?ね?

% docker run -it --rm azuresdk/azure-cli-python
Unable to find image 'azuresdk/azure-cli-python:latest' locally
latest: Pulling from azuresdk/azure-cli-python
# 中略
Status: Downloaded newer image for azuresdk/azure-cli-python:latest
bash-4.3#
bash-4.3# az --version
azure-cli (2.0.23)

# 以下略
bash-4.3# exit
% docker 

これで十分である。

ということで、brew uninstall azure-cliしてめでたしめでたし。

ログインをする必要がある

% docker run -it azuresdk/azure-cli-python
bash-4.3#
bash-4.3# az login
To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XXXXXXX to authenticate.

ほう。gcloud init とかでは、callback付きのURLを開かせて、ブラウザで表示されたワンタイムトークンをCLIに食わせるタイプだったけど、az loginだと、CLIが表示するワンタイムトークンをブラウザに食わせて認証を完了させるタイプなのか。

で、ブラウザで https://aka.ms/devicelogin に行き、 XXXXXXX を食わせると、認証が完了し、

bash-4.3# az account list

で、確認できる。

Computeインスタンスをつくるまでのみちのり

まず、location idのリストがインターネッツに一切無いという...

bash-4.3# az account list-locations | grep -B1 -A6 Japan
  {
    "displayName": "Japan West",
    "id": "/subscriptions/caa7f0e9-5fbf-4ba0-971d-4e038b0deaff/locations/japanwest",
    "latitude": "34.6939",
    "longitude": "135.5022",
    "name": "japanwest",
    "subscriptionId": null
  },
  {
    "displayName": "Japan East",
    "id": "/subscriptions/caa7f0e9-5fbf-4ba0-971d-4e038b0deaff/locations/japaneast",
    "latitude": "35.68",
    "longitude": "139.77",
    "name": "japaneast",
    "subscriptionId": null
  },

japaneast やね。

Resource Groupをつくる

bash-4.3# az group create -n myRG -l japaneast
bash-4.3# az group list

できてることが確認できる。

Computeインスタンスつくる。

まずssh keyつくって

bash-4.3# mkdir -p ~/.ssh/azure
bash-4.3# ssh-keygen -f ~/.ssh/azure/id_rsa
bash-4.3# chmod 600 ~/.ssh/azure/id_rsa.pub

いざ

bash-4.3# az vm create -n TestTestHoge \
  -g myRG \
  --size Standard_A0 \
  --image debian \
  --admin-username otiai10 \
  --ssh-key-value ~/.ssh/azure/id_rsa.pub

レスポンス↓

{
  "fqdns": "",
  "id": "/subscriptions/xxxxxx/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/TestTestHoge",
  "location": "japaneast",
  "macAddress": "00-0D-3A-50-66-07",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "52.243.44.159",
  "resourceGroup": "myRG",
  "zones": ""
}

確認

bash-4.3# az vm list

sshしてみる

bash-4.3# ssh -i ~/.ssh/azure/id_rsa otiai10@52.243.44.159
otiai10@TestTestHoge:~$
otiai10@TestTestHoge:~$ uname -a
Linux TestTestHoge 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u5 (2017-09-19) x86_64 GNU/Linux
otiai10@TestTestHoge:~$
otiai10@TestTestHoge:~$ exit
bash-4.3# uname -a
Linux 58218864392b 4.9.49-moby #1 SMP Fri Dec 8 13:40:02 UTC 2017 x86_64 Linux
bash-4.3#

いい感じ。

あとかたづけ

まずリソース一覧を取得したい

bash-4.3# az resource list -g myRG -l japaneast

つぎに、消せるものから消していく。

まずはVM

bash-4.3# az resource list -g myRG -l japaneast --resource-type=Microsoft.compute/virtualmachines
[
  {}
]
bash-4.3# az vm delete -g myRG -n TestTestHoge
bash-4.3# az resource list -g myRG -l japaneast --resource-type=Microsoft.compute/virtualmachines
[]

done。

Public IP Address消す。

bash-4.3# az resource list -g myRG -l japaneast --resource-type=Microsoft.Network/publicIPAddresses
bash-4.3# az network public-ip list -g myRG
[
  {}
]
bash-4.3# az network public-ip delete -n TestTestHogePublicIP -g myRG
# ネットワークインターフェースを先に削除しろというエラー
bash-4.3# az network nic list -g myRG
[
  {}
]
bash-4.3# az network nic delete -n TestTestHogeVMNic -g myRG
bash-4.3# az network nic list -g myRG
[]
bash-4.3# az network public-ip delete -n TestTestHogePublicIP -g myRG
bash-4.3# az network public-ip list -g myRG
[]

done。

Disk消すか。

bash-4.3# az disk list -g myRG
[
  {}
]
bash-4.3# az disk delete -n TestTestHoge_OsDisk_1_86297f169b6045618fb6c40fe2172657 -g myRG
bash-4.3# az disk list -g myRG
[]

done。

SecurityGroup消す。

bash-4.3# az resource list -g myRG --resource-type=Microsoft.Network/networkSecurityGroups
[
  {}
]
bash-4.3# az resource delete -n TestTestHogeNSG -g myRG --resource-type=Microsoft.Network/networkSecurityGroups
bash-4.3# az resource list -g myRG --resource-type=Microsoft.Network/networkSecurityGroups
[]

ラスト、VN消す。

bash-4.3# az resource list -g myRG
[
  {}
]
bash-4.3# az resource delete -n TestTestHogeVNET -g myRG --resource-type=Microsoft.Network/virtualNetworks
bash-4.3# az resource list -g myRG
[]

これで綺麗になった。

f:id:otiai10:20171217185431p:plain

雑感

  • azure cli、べんり。というか親切。--helpが充実している。
  • 5000兆円とか言わないので、200万円ぐらいほしい。

DRYな備忘録として