どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

Microsoft AzureでWebアプリを公開する

f:id:nogawanogawa:20190805230806p:plain:w500

Microsoft Azureは使ったことなかったので勉強も兼ねてチュートリアルをなぞってみました。 イマイチうまく使えませんでしたが、何事も勉強なので。。。

サービス概要

使用するサービスの構成はこんな感じです。

サインアップ

こちらからどうぞ。

azure.microsoft.com

料金体系としては、最初の1ヶ月は¥22,500 のクレジットが自由に使え、その後1年間は主要サービスが(ある程度は)無料で使用できるようです。 GCPほど太っ腹では、ありませんが試しに使ってみるにはいいかもしれませんね。

準備

まずはcliをインストールして、アカウントにログインします。

docs.microsoft.com

サンプルコード

プログラミング言語は何でも良かったんですが、まずはPythonでやってみました。 参考にしたのはこちら。

docs.microsoft.com

やることのイメージとしてはこんな感じ。

f:id:nogawanogawa:20190807173034j:plain:w500

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

そんでもって、アクセスするとこんな感じ。

f:id:nogawanogawa:20190805232216p:plain:w500

Hello, Azureと出ていますね。

Dockerレジストリを使用したデプロイ

次に、Dockerを使用したデプロイ方法について見ていきます。 こちらの記事を参考にしました。

docs.microsoft.com

あんまり変わんないですけど、やることのイメージとしてはこんな感じです。

f:id:nogawanogawa:20190807173111j:plain:w500

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

アクセスするとこんな感じ。

http://localhost:8000

f:id:nogawanogawa:20190807161916p:plain:w500

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

アクセスしてみると先ほどと同じ画面が出てきたので成功です。

http://myapp20190807.azurewebsites.net

f:id:nogawanogawa:20190807161916p:plain:w500

感想

長いので、一旦今回はここまでにします。

正直、クラウドの開発はオンプレとは勝手が違って大変ですね。 なれてないとめちゃくちゃ大変です。。。