Logic Apps を Configuration as Code する

Logic Apps を画面からポチポチ作るのは楽勝だが、これを再作成するためのスクリプトを作成するためにはどうしたらいいだろう？ CI/CDもやってみたいだろう。

# 戦略を考える

既に既存の Logic Apps があるが、これをどうやって、デプロイ可能にしたらいいだろう。ポータルでポチポチ作成したものを元に作成は可能だ。Logic Apps の設定はARMテンプレートのフォーマットになっていて、実際にデプロイは、ARM テンプレートにこのCode View の内容を入れて Deploy すればよい。ただ問題がある。

<img width="1137" alt="2017-11-06_01h03_32.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/06337de5-7fb6-d35c-96d8-7472ab4029a2.png">

すでに、作成されたLogic Apps では、様々な情報が直接ここに埋め込まれている。だから、そのまま他の環境にデプロイできるようなテンプレートにするためにはクレンジングしないといけない。
　もしそれを手作りでやるとなると、ここの内容をコピーして、ハードコードで書いている部分をパラメータ化するように変えて、これを、Logic Appsをデプロイするときに、Automation Script のリンクから得られる`template.json` にはめ込めばよい。技術的には。ただ、Logic Apps で変更が入った時に毎回このオペレーションをやっていたらやってられないだろう。

# お勧めのソリューション

私は Serverless Conf のキーノートのデモを結構つくったのだが、その中にLogic App を含んでいた。しかし、それは、コード化していないので、リポジトリに乗せていなかったので、乗せたくなった。また自動でデプロイできるようにしたい。しかも変更しやすくしたい。ブランチを作ってみた。

* [customer-car-reviews/CarReviews/logicapps/CreateCar/](https://github.com/Azure-Samples/customer-car-reviews/tree/feature/SPAbackendLogicApps/CarReviews/logicapps/CreateCar/CarReviewDemos)

私は普段は Mac 使いだがこのケースに限ってはWindows に Visual Studio (多分 Community でも良い) をぶち込んで、Logic Apps Tools を extension として追加してそれを使う方法がおすすめだ。いったんリポジトリに入ってしまえば、`template.json` `parameter.json` という JSON ファイルになるので、Mac だろうが、Linux だろうがデプロイできるようになる。ただ、Logic Apps のメンテはポータルではなく、Visual Studio からやるのが一番かっこよく出来る。理由は下記の通り

* テンプレートが常にデプロイ可能なものがバックエンドで生成される
* ポータルと全く同じ操作性でLogic Apps を作成できる
* 強力すぎるインテリセンス

Mac の Visual Studio でも Logic Apps Tools がサポートされたらそっちに乗り換えるといいだろう。現時点では、最高の方法はVSで Logic Apps を開発するのが良い。それをGit などにシェアするとデプロイ自体はどの環境でも出来る。だから、チームで一台だけ Windows マシンを用意しておけばよいだろう。

# VS での開発とマイグレーションの様子

実際に私が簡単な Logic App を VSのものにマイグレーションした作戦を共有したい。最初に、既存の Logic App の Code view から、コード自体は取得しておくのが良い。次に Logic Apps Tools をインストールして、普通にプロジェクトを作成する。

Logic App Tools のインストールは、Visual Studio の `Tools/Extensions and Updates...` から、`Logic Apps Tools` を選んで入れると良い。詳細は[こちら](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-deploy-from-vs)

# 編集作業

 Resource Group の開発を選ぶと、Logic Apps が選べるようになっている。プロジェクトを作って、`LogicApp.json`を右クリックし、 `Open with Logic App Designer` を選ぶ

<img width="348" alt="002.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/646403ad-e969-accc-c465-9aee50da83a3.png">

すると、ポータルで見たのと同じ画面が、同じ操作性で登場する。これ凄い。こちらの画面もコードを見ることができるので、先ほどPortal で取得した json を必要な部分はコピーして作成する。ここでは、めんどくさいスキーマの部分は、私は Portal からコピーした。ハードコードのIDなどが入っているわけではないからだ。

<img width="1368" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/cecbbdff-88be-79c6-d5dc-c1e3fb9ba03d.png">

## デプロイ

試しにここから Azure にデプロイしてみよう。プロジェクトを右クリックすると、Deploy出来るようになっているので、サブスクリプションいれたりして、デプロイしよう。

<img width="397" alt="04.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/780da84d-6bff-ebcb-1dfc-d1c66d74d899.png">


出来ている。同じのが Azure に

<img width="1108" alt="05.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/70d2e68e-5829-9247-caf6-49aa07295485.png">

全く同じ

<img width="1368" alt="06.png" src="https://qiita-image-store.s3.amazonaws.com/0/3470/896afebf-6f65-5aca-1813-57058738cc99.png">

あとは、ここで作成したものをGitリポジトリに格納して終わり。これで、継続的デリバリで自動的に Logic Apps デプロイでもなんでも可能だ。そうやって作ったコードを貼っておく。VSのプロジェクトを作るときに、ちゃんとGitリポジトリを作成するチェックを入れておくと、git init が実行されて、.gitignore が作られるので、それを入れておけば、シークレット系も安心ですね。

* [Logic Apps ARMテンプレート: customer-car-reviews/CarReviews/logicapps/CreateCar/](https://github.com/Azure-Samples/customer-car-reviews/tree/feature/SPAbackendLogicApps/CarReviews/logicapps/CreateCar)

# Resource 

* [Preparing Azure Logic Apps for CI/CD using ARM Templates](https://blog.mexia.com.au/preparing-azure-logic-apps-for-cicd)
* [Create templates for logic apps deployment and release management](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-create-deploy-template)
* [Design, build, and deploy Azure Logic Apps in Visual Studio](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-deploy-from-vs)
* [Azure Logic Apps Tools for Visual Studio 2017](https://marketplace.visualstudio.com/items?itemName=VinaySinghMSFT.AzureLogicAppsToolsforVisualStudio-18551)