一度でも Azure Logic Apps を使ったことがある人なら、日本語を使うと文字化けすることを知っているかと思います。地味に長く続いている問題で、プレビューリリース後から今まで直っていません。
あの有名な縄神様も、日本語というかマルチバイト文字の扱いで悩んでいるのが現状です。
てすとぶろぐ: Azure LogicApps で ApiApps を使うまで
噂によると Logic Apps の GA が比較的近いということなので、Azure 界の抱かれたい男 No.1 とフィードバックをしているのですが、直る気配が全くありません。困ったもんです。
今日、久し振りに確認しても直ってなかったので、もうちょっと原因を調べることにしました。
%u7e04%u795e%u69d8
— Tatsuro Shibamura (@shibayan) 2016年1月25日
ちなみに Logic Apps の仕組みは大ざっぱに説明すると、以下のようになってると思います。
- Logic Apps ランタイム
- Gateway サービス
- API Apps (TwitterConnector など)
ランタイム部分は Azure が持っていて、それ以外は App Service 上に展開される仕組みです。
なので、Gateway と API Apps のログを取れば、どのタイミングで文字化けが発生しているのか、確認することが出来るようになっているわけです。Gateway も API Apps なので、簡単にログを出力できます。
ポータルから API Apps として動いている App Service を確認出来れば、後は Web Apps と同じなのでログの設定を行ったり、Kudu を使ってイベントログを見たりと自由自在です。
それはさておき、実際に Gateway の IIS ログを少し拾ってきました。
2016-01-25 10:51:34 SAMPLELOGICAPPR*** GET /api/tokens tokenName=Twitter&api-version=2015-01-14&X-ARR-LOG-ID=3c80547c-baf1-428a-8f2b-99d5e193c4e2 443 - 40.74.134.125 ApiAppsRuntimeSDK ARRAffinity=48b183d493e1728b039a4454cb702d45a8c1e0264d9fd4e5e621d2781502640b - ***.azurewebsites.net 200 0 0 887 2276 234 2016-01-25 10:51:34 SAMPLELOGICAPPR*** POST /api/consent/sign/TwitterConnector api-version=2015-01-14&X-ARR-LOG-ID=883c8121-7b7f-41b8-bb92-5a02afbf6ec1 443 - 40.74.134.125 - - - ***.azurewebsites.net 200 0 0 485 2253 31 2016-01-25 10:51:34 SAMPLELOGICAPPR*** POST /api/service/invoke/TwitterConnector/PostTweet api-version=2015-01-14&X-ARR-LOG-ID=18d5b1a4-d6c2-4280-afb4-245aa2f73580 443 - 40.74.141.235 - - - ***.azurewebsites.net 403 0 0 1532 2526 8930
これだけでは POST されたデータが分かりませんが、失敗したリクエストのログ (FREB) を組み合わせることで、どのようなデータが POST されたのか確認することが出来ます。
GENERAL_REQUEST_ENTITY にバッファリングされたデータが出力されていることが分かります。
JSON なのに URL エンコードが必要なのかというのはとりあえず置いておいて、Logic Apps のランタイムから Gateway に送信されたタイミングでは、正しく URL エンコードされた状態で渡されていました。
Logic Apps ランタイムは問題なかったので、次は TwitterConnector の IIS ログを書き出して確認します。
2016-01-25 16:26:04 TWITTERCONNECTOR*** POST /statuses/update TweetText=%25u7e04%25u795e%25u69d8&X-ARR-LOG-ID=def59ebf-82e2-43c4-86f5-890f8ce094e9 443 - 40.74.134.125 EMA-Gateway - - ***.azurewebsites.net 403 0 0 1260 1379 5303
TweetText を見ると、URL エンコードはされていますが \u を使ったエスケープに変わっていました。どうやら Gateway に問題があることは確定のようです。
Gateway は Site Extensions として実装されているので、Visual Studio を使ったリモートデバッグも行えますが、ソースコードが無いとどうしようもないので、結局のところは中の人待ちになります。
TwitterConnector はサーバーエクスプローラーからリモートデバッグを簡単に行えますが、Gateway は上の記事と同じ方法を使ってアタッチする必要があります。
使う機会はほぼ無いと思いますが、SCM 側へのアタッチは WebJob も対象に出来るので便利です。
追記
この記事を公開したところ、Logic Apps 公式アカウントから回答を貰いました。
@shibayan Thanks for letting us know. We are removing the "gateway" in the architecture in the next few weeks which should help. (1/2)
— Azure Logic Apps (@logicappsio) 2016年1月25日
チームは異なっていますが、帝国兵さんも聞いてくださったとのことで、同じく回答をいただきました。本当に感謝しかありません。
@shibayan このページにある通り次期リリース以降Gatewayは不要になりますので、再デプロイは必要ですがこの問題は解決するはず、とのことでした。すみませんが今しばらくお待ちください https://t.co/jQjQZ8He7c
— 帝国兵 (@superriver) 2016年1月25日
今回、文字化けの原因となっている Gateway が新しいアーキテクチャでは削除されるので、現在の Gateway に起因する問題は発生しなくなるということのようです。
アップデートは next few weeks とのことなので、アップデートを待ちたいと思います。