Microsoft Azureは使ったことなかったので勉強も兼ねてチュートリアルをなぞってみました。 イマイチうまく使えませんでしたが、何事も勉強なので。。。
サービス概要
使用するサービスの構成はこんな感じです。
サインアップ
こちらからどうぞ。
料金体系としては、最初の1ヶ月は¥22,500 のクレジットが自由に使え、その後1年間は主要サービスが(ある程度は)無料で使用できるようです。 GCPほど太っ腹では、ありませんが試しに使ってみるにはいいかもしれませんね。
準備
まずはcliをインストールして、アカウントにログインします。
サンプルコード
プログラミング言語は何でも良かったんですが、まずはPythonでやってみました。 参考にしたのはこちら。
やることのイメージとしてはこんな感じ。
1. サンプルコードをクローン
git clone https://github.com/Azure-Samples/python-docs-hello-world
cd python-docs-hello-world
これはまあいいでしょう。
2. デプロイ
ローカルで動かすとかはすっ飛ばして、デプロイします。
application.pyの一部を書き換えます。
return "Hello Azure!"
プロジェクトフォルダ直下で下記のコマンドによってデプロイします。
az webapp up -n <app-name> -l <location-name>
試しにこんな感じでやってみました。
az webapp up -n test20190805-2 -l japaneast
そんでもって、アクセスするとこんな感じ。
Hello, Azureと出ていますね。
Dockerレジストリを使用したデプロイ
次に、Dockerを使用したデプロイ方法について見ていきます。 こちらの記事を参考にしました。
あんまり変わんないですけど、やることのイメージとしてはこんな感じです。
1. Docker Imageのビルド
とりあえずサンプルのプロジェクトをcloneします。
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
cd docker-django-webapp-linux
Dockerイメージをビルドします。
docker build --tag mydockerimage .
Dockerコンテナを起動します。
docker run -p 8000:8000 mydockerimage
アクセスするとこんな感じ。
2. レジストリを作成
コンテナをレジストリにプッシュします。 まず、リソースグループを作成します。
$ az group create --name myResourceGroup --location japaneast { "id": "/subscriptions/32f4bcf3-99a7-4a34-a96d-e7f462c77744/resourceGroups/myResourceGroup", "location": "japaneast", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": null }
作成したリソースグループの中に、コンテナレジストリを作ります。レジストリ名は一意でないといけないようなので、なんかあったら日付とか後ろにつけたらいいと思います。 今回は"myregistory20190807"って名前で作成しました。
$az acr create --name myregistory20190807 --resource-group myResourceGroup --sku Basic --admin-enabled true { "adminUserEnabled": true, "creationDate": "2019-08-07T07:27:03.278549+00:00", "id": "/subscriptions/32f4bcf3-99a7-4a34-a96d-e7f462c77744/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistory20190807", "location": "japaneast", "loginServer": "myregistory20190807.azurecr.io", "name": "myregistory20190807", "networkRuleSet": null, "provisioningState": "Succeeded", "resourceGroup": "myResourceGroup", "sku": { "name": "Basic", "tier": "Basic" }, "status": null, "storageAccount": null, "tags": {}, "type": "Microsoft.ContainerRegistry/registries" }
レジストリにログインします。作成したレジストリのパスワードを確認します。
$ az acr credential show --name myregistory20190807 < "passwords": [ { "name": "password", "value": "{password}" }, { "name": "password2", "value": "{password}" } ], "username": "<registry-username>" }
こんな感じに表示されたのを控えておいて、 ログインします。パスワードを聞かれるので、上で聞かれたパスワードを入力します。
$ docker login myregistory20190807.azurecr.io --username myregistory20190807 Password: Login Succeeded
3. プッシュ
Dockerイメージにタグ付けします。
$docker tag mydockerimage myregistory20190807.azurecr.io/mydockerimage:v1.0.0
そしたらPushです。
$docker push myregistory20190807.azurecr.io/mydockerimage:v1.0.0
次にサービスグループってやつを作るみたいです。
$az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku B1 --is-linux
そしたらサービスグループにwebアプリを作成します。
$az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name myapp20190807 --deployment-container-image-name myregistory20190807.azurecr.io/mydockerimage:v1.0.0
Web アプリにレジストリの資格情報を構成します。(パスワードだけ伏せました)
az webapp config container set --name myapp20190807 --resource-group myResourceGroup --docker-custom-image-name myregistory20190807.azurecr.io/mydockerimage:v1.0.0 --docker-registry-server-url https://myregistory20190807.azurecr.io --docker-registry-server-user myregistory20190807 --docker-registry-server-password {password}
最後に環境変数を構成します。
az webapp config appsettings set --resource-group myResourceGroup --name myapp20190807 --settings WEBSITES_PORT=8000
アクセスしてみると先ほどと同じ画面が出てきたので成功です。
感想
長いので、一旦今回はここまでにします。
正直、クラウドの開発はオンプレとは勝手が違って大変ですね。 なれてないとめちゃくちゃ大変です。。。