Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

Azure, .NET Coreまわりの開発環境でぼちぼち引っかかる話8選

本投稿は、オルターブース Advent Calendar 2019 13日目の記事です。

adventar.org

昨日は榛葉さんのCSS話でした🤗

aadojo.alterbooth.com

本番環境でやらかした話…飲食のバイトでぜんざいを十分に温めず餅がめっちゃ固いまま提供したことがあります。。
今日はそんな私、満園が『Azure, .NET Coreまわりの開発環境でぼちぼち引っかかる話8選』ということで担当します。

更新の早い分野ですので、このままの情報が来年も使えるかどうかわからないのと既に更新入ってるモノもあると思いますが、似たようなトラップは多いのでその辺の見落としを減らせることに役立てれたらいいかなーという感じで、書きます。いくつ踏んだか数えると面白いかも

1. Missing value for AzureWebJobsStorage in local.settings.json.

  • 原因:Azure Functions ローカル開発時に local.settings.json 置き忘れ
  • local.settings.jsonは.gitignoreでは基本的に外されるファイルです
    • 個人のローカルデバッグ用のファイルであるため
  • つまり、git cloneしてきて最初はこのファイルが無い状態
    • プロジェクト作成だと予め含まれているため、これまた見落としやすい
  • 基本的に無いときのエラー見れば一発でわかるのですが、初めてAzure Functions触る場合は「?」という感じだったりなのでこれから触る方は知っておくと良きです
  • 設定ファイルの項目増減は見落としやすいので、READMEやWikiに書いて開発者間で共有しておくのをおすすめします

f:id:mitsuzono-dev:20191213032148p:plain

2. Microsoft.WindowsAzure.Storage.StorageException: '対象のコンピューターによって拒否されたため、接続できませんでした。'

  • 原因:Azure Storage Emulator 起動忘れ
  • コントローラー処理の頭でテーブル読みにかかって即コケるとかよくあります
  • これまた知ってるか知らないか案件で、特にWebアプリケーションとかだといきなり例外画面出てなんじゃこりゃってなりがちですが、バックエンド側をデバッグしてどこで落ちてるかを見れば気づくかと思います
  • Storageを使用しているプロジェクトをデバッグする際はStorage Emulatorが立ち上がっているか確認しておくのが無難です

f:id:mitsuzono-dev:20191213032228p:plain

3. Azure Storage Emulator バージョン古い問題

  • StorageExceptionで「not supported by this release of the Storage Emulator」みたいな例外が出た場合
  • その他、Storageまわりで文句言われてEmulatorも起動してるし別にコードを書き換えたわけでもないといった場合はEmulatorのバージョンも疑ってみましょう
  • 特にAzure Functionsの開発やってるときはときどき引っかかります
    • 昨日までローカルデバッグ動いてたのに…みたいな
  • 最新バージョンがある場合はバージョンアップして、必要に応じて周辺ツールとかもバージョン上げる必要があるかもです

4. Azure Storage Explorer 安直Timestampソートで最新レコードが取れない

  • 最新レコード確認したいからStorage Explorer開いてとりまTimestampポチーっていうのやりがちだと思いますがその際に気をつけるべきことがあります
    • カラムクリックでのソートは取得済みのデータに対してソートがかけられる
      • 一括取得上限を超えたデータがある場合、目的のレコードが抜け落ちた状態でソートがかけられる可能性がある
    • デフォルトでは一括取得上限件数は1000件
  • この場合はクエリで絞り込んでからソートをかけましょう

5. Azure Cosmos Emulator バージョン古い問題&上げたら新旧両立ケンカ問題(仲良くして)

  • Azure Cosmos Emulatorもバージョンアップの影響で、ある日ローカルデバッグで上手く動かなくなることがありました
  • (最近のは古いのが残らないハズ)バージョンを上げると新旧両立して、古い方を消しておかなければこれまた上手く動作しないということもありました

6. Azure Active Directory B2C 自宅の住所書き間違いにより迷子

  • 訳:コールバックURL(&ポート番号)間違えで認証エラー
  • コールバックのURLを異なるものを設定してしまうパターンが割とあります
    • パスまで合っているか
    • サインインに飛ぶ際にクエリパラメータに指定して渡すコールバックURLも正しいか
    • 開発環境などでポートの指定まで必要な場合、番号は合っているか
      • 特にローカル開発環境の場合はデバッグ時のポート番号を揃えておく必要があります
  • クライアントIDとシークレットもちゃんと間違えないようにしましょう
  • 認証系であればAAD B2Cに限らずな話なので、頭に入れておきたい

7. Web Apps 俺の環境では動かないんだけど(怒

  • 訳:環境変数設定抜け
  • スロット別の設定など行っていると抜け落ちる可能性があるので要注意です
    • Azure App Configurationを活用すると良さそう
  • ローカル実行時、環境変数はVisual Studioのプロジェクトデバッグ設定から設定可能です
    • 特にgit cloneして最初とかは気をつけましょう(という意味でもREADMEにまとめとくのがいいかも)
  • 環境変数は項目増減を見落としやすいので共有を怠らぬよう

f:id:mitsuzono-dev:20191213032809p:plain

8. ASP.NET Core 正しく住所書いたつもりがそもそも住所記載欄が変わってたことにより迷子

  • 訳:ApiController作ってV2系までと同じルーティングの書き方してて動かないからおかしいなーと思ってたらV3系からルーティングの定義方法が変わってました
  • .NETまわりのバージョン変更で異変を感じたら基本的にドキュメントを参考にすれば良く、移行系(V2→V3など)のドキュメントまで用意されてるので、そちらを見るだけでも気づきは多いです
  • このときほどHTTP404表示に怒りを覚えたことはあるだろうか(いやない)

docs.microsoft.com

戒め まとめ

  • コード外の依存関係は切り分けましょう
    • 主にAzureリソースやそれに伴うツール周りの話を多くしましたが、上記のような場面でもソースコードを先に疑ってかかってしまい結果原因特定に時間をかけてしまうこともありました
    • データストアなどにアクセスする際にエラーが起きて、その辺のソースコードを触っていなければ使用しているツール(エミュレーターなど)の起動・バージョン確認も行っておきましょう
    • 直接アクセスするコードはなるべく少な目に(リポジトリパターンとかを活用)
      • どこで問題が起きてるか区別がつけやすくなります
  • 開発者間で情報を共有しましょう
    • 環境変数は規則に沿って定義、他の開発者にも共有しやすい環境づくりを(WikiやREADMEの整備など)
  • 各種ツールの起動状態・バージョンは気をつけましょう
  • ドキュメントはちゃんと読みましょう

それでは、オルターブース Advent Calendar 2019 14日目もお楽しみに~😊✨