読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

de:code 2017 で App Service on Linux について話しました

久し振りに de:code で話をしてきました。周りの人からはアニメタイトルセッションと茶化されましたが、ちゃんと意味があって付けているのです。多分。

f:id:shiba-yan:20170525005825j:plain

おかげさまで、今回は前回よりも広い部屋が割り当てられ、想像以上の大勢の方に参加していただくことが出来ました。App Service on Linux について知ってもらえたなら幸いです。

危うく私のセッションによって、デプロイ優先順位が左右される展開になるとこでした。

まだプレビューのサービスなので、当日までいろいろとアップデートがあるのではないかとか、スピーカー控室のネット回線が不調でテザリングをする羽目になったとかいろいろありますが、当日のデモは全て上手くいきました。App Service Plan から作成したので、少し時間はかかりましたが。

今回のセッションはシャッター音の鳴るカメラは禁止と最初にアナウンスした関係で、使用したスライドを既に docs.com で公開しています。不要なページは削除してますが、内容は同一です。

最後のデモでは GitHub でホストしているリポジトリに対して CircleCI で Docker Image をビルドし、App Service on Linux に自動デプロイする処理を 4,5 分で構築しました。

自動化してこそクラウドを使うメリットが出てくるというものです。

基本的な流れは以前に書いたエントリと変わってはいないですが、CircleCI 2.0 に切り替えたのと ASP.NET Core アプリのビルドと Azure CLI の実行に Docker を使いました。

デモで使用した circle.yml は以下のようになってます。もう少し最適化は出来ると思いますが、まずは動くものを作ってからの方が良いでしょう。

version: 2
executorType: machine
stages:
  build:
    workDir: ~/app
    steps:
      - type: checkout
      - type: shell
        name: Build Application
        command: docker run -it -v $(pwd):/app --workdir /app microsoft/aspnetcore-build:1.1.2 bash -c "dotnet restore && dotnet publish -c Release -o ../publish/app"
      - type: shell
        name: Build Docker Image
        command: docker build --rm=false -t shibayan/decode-demo:v$CIRCLE_BUILD_NUM ./publish/app
      - type: shell
        name: Run Test
        command: |
          docker run -d -p 8080:80 shibayan/decode-demo:v$CIRCLE_BUILD_NUM
          sleep 5
          curl --retry 10 --retry-delay 5 -v http://127.0.0.1:8080
      - type: deploy
        name: Push to Docker Hub
        command: |
          docker login -u $DOCKER_USER -p $DOCKER_PASS
          docker push shibayan/decode-demo:v$CIRCLE_BUILD_NUM
      - type: deploy
        name: Deploy to App Service
        command: |
          docker run -it azuresdk/azure-cli-python bash -c "az login --service-principal -u $AZURE_USER -p $AZURE_PASS --tenant $AZURE_TENANT && az webapp config container set -c shibayan/decode-demo:v$CIRCLE_BUILD_NUM -n WEBAPP -g RESOURCEGROUP"

2.0 向けのドキュメントは以下のページにまとまっています。まだベータですが使う価値はあります。

CircleCI 2.0 になって CI での各ステップを独自に定義できるようになり、記述が格段にわかりやすくなりました。今回は Docker Image のビルドが必要だったので executorType として machine を指定しましたが、docker を使うと CI の実行に使うイメージを指定できるようになり、更に便利です。

App Service on Linux は今年中には GA するという話もあるので、目が離せませんね。

App Service on Linux の最新アップデートと de:code で久し振りにセッションをする話

先週の Build 2017 のキーノートではさらっと触れられてたぐらいですが、かなり大規模なアップデートが行われました。詳細は Azure Blog に AJ 氏が書いてます。

AJ 氏とは先月に品川の Microsoft で会って少し話をしました。その来日時の記事が公開されてました。

Azure App Service は極めて一般的なアプリケーション実行環境なので、ベンダーロックインのやりようがない感じですね。それは App Service on Linux になっても同じです。

話を戻します。一度ブログの記事が取り下げられた気もしますが、復活したので良かったです。

実行中のコンテナへの SSH が機能的に一番目立ちますが、個人的には Azure Portal から Restart を実行すると、ちゃんとコンテナが再起動するようになった点を強調したいですね。

これまでは時々、完全に Docker Container が起動せずに詰むケースがあったのですが、再起動を実行できなかったので作り直しをしていました。しかし、これからは大丈夫。

f:id:shiba-yan:20170516213854p:plain

GA までに必要だと思っていた機能として Deployment Slot がありますが、きっちりと実装されてきました。Docker Image をダウンロードするのに少し時間がかかりますが、スロットを上手く使って解決できます。

そして、既にチケット売り切れてますが de:code で App Service on Linux について話すことになっています。

de:code (decode) 2017 | 日本マイクロソフトの開発者/アーキテクト/IT Pro 向けイベント - Microsoft Events & Seminars

f:id:shiba-yan:20170516212832p:plain

前に話した時は Azure Web Apps だったので、基本的に Azure に関することばかりやってる気がします。

当然ながら Build 2017 で発表された機能についても紹介しますし、いろいろと実用的なシナリオベースの話が出来ればいいかなと思っています。

de:code 2017 が終わった次の週には、Open Source Summit Japan で Microsoft Corp の帝国兵殿と Nazim 氏が来日して App Service on Linux について話をするらしいです。

非常に面白そうな話が聴けそうなんですが、参加難しそうなのでスライドが出てくるのを待つ予定です。

正直、後ろにこの 2 人のセッションが控えてるとかプレッシャーがやばいですね。

Azure Cloud Shell に ACS Engine をインストールする

昨日の Build 2017 Keynote で Scott Hanselman がデモをしていた Azure Cloud Shell が、自分のサブスクリプションでもやっと使えるようになったので、最近はまっている ACS Engine をインストールしてみました。

前に試した時は Docker を使ってサクッと動かしましたが、Azure Cloud Shell 自体が Docker 内で動いているようなので、今回は手動でビルドしてみました。

ただし Azure Cloud Shell には予め git と go が入っているので手順は少ないです。

f:id:shiba-yan:20170512010209p:plain

後はドキュメントに書いてある通り、GOPATH が定義されていないので .profile を弄ったり、go get で acs-engine と関連するパッケージをダウンロードしてきたりします。

go get all を実行すると一部エラーになりましたが、ビルドと実行は問題なかったので今回はスルーしました。もうちょっと調べたいところではありますが。

f:id:shiba-yan:20170512005854p:plain

ACS Engine のコードは $GOPATH/src/github.com/Azure/acs-engine に保存されているので、そこまで移動してから go build を実行すると acs-engine が完成です。

コマンドを実行すると問題なく動作することが確認できます。これでインストールは完了です。

f:id:shiba-yan:20170512005954p:plain

Azure Cloud Shell は vim などのエディタも使えるので、最後に実際に ARM Template を ACS Engine で生成してみたいと思います。examples にある json を適当に選びます。

Managed Disk で楽したいので、Swarm + VMSS + Managed Disk なサンプルを選びました。

f:id:shiba-yan:20170512010752p:plain

dnsPrefix と SSH Key は必須なので、エディタで修正しておく必要があります。修正したファイルを acs-engine に食わせると、ARM Template 一式が生成されます。

この ARM Template をデプロイする方法は前回書いたのと全く同じです。

しかも Azure Cloud Shell には Azure CLI 2.0 がログインされた状態でインストール済みなので、ACS Engine を使ったテンプレート生成から、Azure へのデプロイまで完結させることが出来ます。

f:id:shiba-yan:20170512010930p:plain

ログイン済みというのが最高に便利ですね。Azure CLI 2.0 になって Python が必要になったので、Windows に入れるのが面倒だったのですが、大体のことは Azure Cloud Shell で賄えそうです。

まだ iOS 版 Azure アプリからの Cloud Shell は有効になってません。アプリの更新を待ちたいと思います。