公式dockerイメージを使ったazコマンド実行方法
Azure CLIには公式のDockerイメージがあります。
mcr.microsoft.com/azure-cli
このイメージを使って、docker runでazコマンド実行しようと思ったんですが、使い方を見てみるとazのコマンドプロンプトが立ち上がるだけで、そのあと手動でコマンド実行しないといけない仕様でした。
使い方はこんなイメージ。
- docker run実行
$ docker run -it mcr.microsoft.com/azure-cli
bash-4.4#
- az login手動実行
bash-4.4# az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code xxxxxxx to authenticate.
- 任意のazコマンド実行
bash-4.4# az vm list
このように対話式だと、Botから実行したり、CIにのせたりできないので、docker run時に目的のコマンドを実行して破棄するようなイメージを作りました。
azコマンドをdocker runと同時に実行してコンテナを破棄する
- Dockerfileを作ります。
- サービスプリンシパルは事前に作っておいてください。過去に記事を書いたのでご参考まで。(権限は要件に合わせて設定してください)
サービスプリンシパル作成
FROM mcr.microsoft.com/azure-cli:latest
CMD /usr/local/bin/az login --service-principal \
-u $AZURE_APPLICATION_ID \
-p $AZURE_SECRET \
--tenant $AZURE_TENANT_ID > /dev/null && \
$CMD
- buildします。
$ docker build -f Dockerfile -t azurecli:v1.0 .
- azコマンドを実行します。Secretとかべた書きすると履歴が残っちゃうので、別ファイルに書いておいて実行時に読み込むなりしたほうがよいですね。
$ docker run --rm -e AZURE_APPLICATION_ID=[Your Application ID] \
-e AZURE_SECRET=[Your Secret] \
-e AZURE_TENANT_ID=[Your Tenant ID] \
-e CMD="/usr/local/bin/az vm start -g [ResourceGroup] -n [VM Name]" azurecli:v1.0
- Jenkinsで実行する場合は以下の記事を参考ください。
https://qiita.com/shingo_kawahara/items/393f3723045644572a85