銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Azure の Linux 仮想マシンを仮想マシンの内部からdeallocateする

このエントリはこちらのブログの日本語版になります。

developers.redhat.com

AzureにたてたLinux仮想マシンをdeallocateしたい場合、Azure Portalにログインできればそこからログインしたり、REST APIを実行する権限を作って適宜プログラムからdeallocateすることができます。しかし、そのLinuxにログインできる権限しか無い場合、OSのshutdownコマンドを実行してもdeallocateはされないため、仮想マシンの利用料金はかかり続けます。そこで仮想マシンの中からdeallocateするようにしてみたいと思います。

deallocateするにはREST APIを実行する必要があるので、Azure CLI 2.0をインストールして、Azure AD APPでService Principalを作成して認証を行います。もちろんService Principalのパスワードを指定してもいいのですが、パスワードを平文で保存することが懸念の場合は、Managed Service Identity (MSI)を利用してパスワードを利用せずに認証することができます。今回はその方法を紹介することにします。

続きを読む

Azure Stack環境で古いカスタムLinuxイメージ(VHD形式)が起動できない時はWALinuxAgentのバージョンをチェックしよう

Azure Stack環境でカスタムLinuxイメージ(オンプレミスで作っておいたLinux OSのVHDファイル)から仮想マシンを起動しようとしたとき、仮想マシンの作成自体はうまくいくものの起動状態にならなかった場合、WALinuxAgentのバージョンが古いことが問題の可能性があります。 たとえpublic Azure環境では起動できるVHDファイルだったとしてもAzure Stack環境では動かない可能性あるらしく、ドキュメントにも記載があります。

docs.microsoft.com

WALinuxAgentのバージョン2.2.2以上が必要です。かつ、2.2.12 や 2.2.13など特定のいくつかのバージョンは動かないとあります。WALinuxAgent 2.2.2のリリースは2017年1月なので古いといえば古いバージョンですが、念の為うまくいかないときはチェックするといいかもしれません。

Release v2.2.2 · Azure/WALinuxAgent · GitHub

Azure CLI 2.0 でMicrosoft Azure Stack に接続する

これであっているか自信ないのですがとりあえずメモしておきます。

Microsoft Azure Stack*1にAzure CLIで接続したい場合、managementAPIのエンドポイントを指定してcloudを登録します。名前は自由なので、複数Azure Stack環境がある場合などは適宜わかりやすい名前をつけましょう。

$  az cloud register -n AzureStackExample --endpoint-resource-manager "https://management.azurestack.example.com" --suffix-storage-endpoint azurestack.example.com

とりあえず上の2つのエンドポイントだけでよさそうですが、他にも指定できるパラメーターはあるようです。上の例はAzure Stackのユーザー環境を登録している想定で、下のドキュメントの手順1-bに相当します。また、Azure Stack環境の場合は、VPN接続が〜というあたりのドキュメントは無視してよさそうです。

docs.microsoft.com

次にここで登録したcloudを指定して接続先を切り替えます。

$ az cloud set -n AzureStackExample
Switched active cloud to 'AzureStackExample'.
Active subscription switched to 'XXXX (UUID)'.

これでログインできてコマンド実行できるはずですが、1つ忘れてはいけないことがあります。Azure Stack側で提供しているARM Rest APIのバージョンは古いらしく、コマンドを実行するとエラーになることがあります。そのため下記コマンドをまず実行しておく必要があります。

$ az cloud update --profile 2017-03-09-profile

なおこのコマンドは現在Activeなcloudに対して処理が行われます。現在利用可能なcloudの一覧は次のコマンドでリストできます。

$ az cloud list
Name                   Profile             IsActive
---------------------  ------------------  ----------
AzureCloud             latest
AzureChinaCloud        latest
AzureUSGovernment      latest
AzureGermanCloud       latest
AzureStackExample      2017-03-09-profile  True

AzureStackExample以外はデフォルトで利用可能なものです。そのため、例えばAzure Germanyを利用したい場合はazure cloud set -n AzureGermanCloudと実行するだけでよいです。

あとはログインです。次のコマンドを実行して、Azure Stack環境にログインする際の認証情報でログインすればOKなはずです。

$ az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXXXXX to authenticate.

CloudName           IsDefault    Name   State    TenantId
------------------  -----------  -----  -------  ----------
AzureStackExample   True         NNNN   Enabled  UUID

*1:Azure Stack Development Kitではなく、ポータルやAPIエンドポイントをインターネットに公開できる方