はじめに
Azure Portal にアクセスして仮想マシンを管理していたのですが、台数が多いと起動停止だけでも手順が少し煩雑に感じられてきました。この記事では Azure CLI 2.0 を使用してどうやったら簡単にパブリッククラウドの必要なときに必要なだけという柔軟なリソースを享受できるのかというのを目的にあれこれ試した備忘録を残しておこうと思います。
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
Azure CLI でバッチ使用するための準備
Azure CLI でログインするための方法あれこれ
Azure CLI で自動化するにあたって、ログインする必要があります。いつも自分でコマンドラインを実行できる環境なら問題無いですが、そもそもコマンドラインから管理したい理由は抜け漏れがないようにしたいことと自動化(macOS のAutomaterあたりで実行できたらいいなと考えている)を視野にいれているため、インタラクティブなログインだと都合が悪い。
コマンドラインでIDとパスを渡す方式は2要素認証が設定されていると使用できないため、サービスプリンシパルを使用することにしました。
検討に際してドキュメントを一読するとよいと思います。
前提環境
サービスプリンシパルの作り方
サービスプリンシパルは Azure CLI で作成します。
詳細はマニュアル(Create an Azure service principal with Azure CLI 2.0)を参考にしてください。
作業前に az login しておきます。(コマンド実行結果は適当に伏せ字です。)
$ az ad sp create-for-rbac --name spuser --password p@ssw0rd
Retrying role assignment creation: 1/36
{
"appId": "abcdefgh-ijkl-mnop-qrst-uvwxyz12345",
"displayName": "spuser",
"name": "http://spuser",
"password": "p@ssw0rd",
"tenant": "12345678-90ab-cdef-ghij-klmnopqrstuv"
}
サービスプリンシパルに権限付与します。
今回はビルトインのOwnerをアサインしました。ビルトインのロールの詳細はこちらのドキュメントBuilt-in roles for Azure role-based access control に記載があります。
$ az role assignment create --assignee abcdefgh-ijkl-mnop-qrst-uvwxyz12345 --role Owner
{
"id": "/subscriptions/...snip.../providers/Microsoft.Authorization/roleAssignments/...snip...",
"name": "...snip...",
"properties": {
"additionalProperties": {
"createdBy": null,
"createdOn": "2018-02-15T10:12:32.6334177Z",
"updatedBy": "...snip...",
"updatedOn": "2018-02-15T10:12:32.6334177Z"
},
"principalId": "...snip...",
"roleDefinitionId": "/subscriptions/...snip.../providers/Microsoft.Authorization/roleDefinitions/...snip...",
"scope": "/subscriptions/...snip..."
},
"type": "Microsoft.Authorization/roleAssignments"
}
サービスプリンシパルでログインします。
az login --service-principal --username abcdefgh-ijkl-mnop-qrst-uvwxyz12345 --password p@ssw0rd --tenant 12345678-90ab-cdef-ghij-klmnopqrstuv
[
{
"cloudName": "AzureCloud",
"id": "...snip...",
"isDefault": true,
"name": "Microsoft Azure ...snip...",
"state": "Enabled",
"tenantId": "...snip...",
"user": {
"name": "...snip...",
"type": "servicePrincipal"
}
}
]
ログイン完了。具体的な操作はまた今度。
参考資料
Create an Azure service principal with Azure CLI 2.0