pygribをAzure Container App Jobsで動かしたメモ

# 概要
queueトリガーで動かしてみる。

# 環境

- azure-cli version: 2.64.0
- az extension containerapp 1.0.0b3

# pygribのローカルでの動作確認

動かす前に`app/data`フォルダに[気象庁](https://www.data.jma.go.jp/developer/gpv_sample.html)から取得したサンプルファイル(`Z__C_RJTD_20171205000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin`)を格納しておく。
dockerで動かして確認する。 `app/src/main.py`がローカルの動作確認用。ContainerAppsで動くのは`app/src/main.py`となる。

```
cd app
./bin/up.sh
```

実行完了すると、`app/dist`フォルダにgribの解析結果のCSVとJSONが格納される。



# cli

[チュートリアル: Azure Container Apps でイベントドリブン ジョブをデプロイする][*1]の手順に従う

## 名前空間の登録確認

```
az provider show --namespace Microsoft.App --query "registrationState"
az provider show --namespace Microsoft.OperationalInsights --query "registrationState"
```

両方ともすでに登録されていた。

## cliで作成できることを確認
bashを残す。

[cliのbash化](https://github.com/hibohiboo/azure-test/blob/a72ddcc3612ec9561dc13a3f2ea0f11e52303535/infra/cli/01_createResourceGropu.sh)

# bicep

## 接続文字列
まずはcliをほぼそのままbicep化
[接続文字列を使って動かしたコード](https://github.com/hibohiboo/azure-test/blob/a72ddcc3612ec9561dc13a3f2ea0f11e52303535/infra/bicep/biceps/core/containerApps/containerJob.bicep)



## 構文エラー
下記のようなエラーが出た。原因の調査法が分からず、かなりハマった。

```

{"code": "InvalidTemplateDeployment", "message": "The template deployment '07_createJob' is not valid according to the validation procedure. The tracking id is 'a4a2de3e-a135-4252-9468-38bb2942e86b'. See inner errors for details."}

Inner Errors:
{"code": "ValidationForResourceFailed", "message": "Validation failed for a resource. Check 'Error.Details[0]' for more information."}

Inner Errors:
{"code": "ContainerAppsJobCreateMustContainContainer", "message": "Error creating container apps job 'my-job'. Must specify atleast one container to create a container apps job"}

```

エラーの原因はシンプルだった。vscodeのbicep拡張は起こってくれないんだなぁ。下記の修正で上記エラーはでなくなった。

```diff
          rules: [
            {
              name: 'queue'
              type: 'azure-queue'

              metadata: {
                accountName: storageAccountName
                queueName: queueName
-                queueLength: 1
+                queueLength: '1'
              }
              auth: [
                {
                  secretRef: 'connection-string-secret'
                  triggerParameter: 'connection'
                }
              ]
            }
          ]
        }
```

## マネージドIDで接続してみる。

マネージドIDで接続がGUIだと出ているが、ドキュメントに記載がない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/e4c7e2b6-f34b-dee2-2b0e-c98a17051808.png)

cliのhelpをみるとプレビュー機能らしい。[release](https://github.com/search?q=repo%3AAzure%2Fazure-cli-extensions%20%20-scale-rule-identity&type=code)

```
az containerapp job update --help
```

```
    --scale-rule-identity --sri [Preview] : Resource ID of a managed identity to
                                            authenticate with Azure scaler resource(storage
                                            account/eventhub or else), or System to use a system-
                                            assigned identity.
        Argument '--scale-rule-identity' is in preview and under development. Reference and
        support levels: https://aka.ms/CLI_refstatus
```

指定方法がわからなかったのでGUIで設定した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/2b141d95-2829-9bbc-49d7-3ec5897f2a88.png)


[この時点のソース](https://github.com/hibohiboo/azure-test/tree/4b2946419a4cc066ea00a01c2029afa591d84c77)

# 参考
[チュートリアル: Azure Container Apps でイベントドリブン ジョブをデプロイする][*1]

[マネージドIDでAzureFunctionsのキュートリガーを動かしたメモ](https://qiita.com/hibohiboo/items/fad30e70c9ee0722adfd)
[pythonのdockerでeccodesのv28のpygribを使って気象庁のgrib2から気温と日射量を取り出したメモ](https://qiita.com/hibohiboo/items/6b360a5c08ff21cee8e0)
[BicepでAzure Container RegisterとAzure Container Appsを作ってAzure Functions をのせてみたメモ](https://qiita.com/hibohiboo/items/d7c5a0177cd2f13e71a2)
[Azure DevOpsのパイプラインからContainerAppsをデプロイしたメモ](https://qiita.com/hibohiboo/items/b7136a2c94a514f03053)

[Container Apps と他の Azure コンテナー オプションの比較](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options)
[Azure Container Apps と PostgreSQL を使用して Python Web アプリを構築してデプロイする](https://learn.microsoft.com/ja-jp/azure/developer/python/tutorial-deploy-python-web-app-azure-container-apps-02?tabs=azure-cli%2Ccreate-database-psql)
[ECC - Releases](https://confluence.ecmwf.int/display/ECC/Releases)
[ECC - Migration to Grib2](https://confluence.ecmwf.int/display/MTG2US/Migration+to+Grib+2+-+User+Space+Home)
[Azure Container AppsのKEDAでService Busのキューに応じたスケーリングを行う](https://techblog.ap-com.co.jp/entry/2022/12/14/203000)

[マネージド ID を使用した Azure Container Apps イメージのプル](https://learn.microsoft.com/ja-jp/azure/container-apps/managed-identity-image-pull?tabs=bash&pivots=bicep)
[よく使う Resource Provider を Azure サブスクリプションに一括登録するスクリプトを書いた](https://blog.shibayan.jp/entry/20210107/1609948542)
[az provider register](https://learn.microsoft.com/ja-jp/cli/azure/provider?view=azure-cli-latest#az-provider-register)
[Azure Container Apps のジョブ](https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli)
[Bicep Container Apps Job](https://learn.microsoft.com/ja-jp/azure/templates/microsoft.app/jobs?pivots=deployment-language-bicep#jobconfigurationeventtriggerconfig)
[Container App Jobs を触ってみた](https://qiita.com/hyatsu/items/603d994efec452fb3bb4)
[【Bicep編】App ServiceのManaged IDを使ってACRからコンテナイメージをpullする](https://qiita.com/shingo_kawahara/items/f88c0cc7d4bc923298e7)
[Azure-Samples/container-apps-jobs](https://github.com/Azure-Samples/container-apps-jobs) [/container-apps-job.bicep](https://github.com/Azure-Samples/container-apps-jobs/blob/main/bicep/jobs/container-apps-job.bicep)
[Bicep の any 関数](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/bicep-functions-any)
[ARM & Yaml](https://learn.microsoft.com/ja-jp/azure/container-apps/azure-resource-manager-api-spec?tabs=arm-template#container-app)
[Azure Container Apps でサイドカーコンテナー構成を展開 (Bicep)](https://qiita.com/YoshiakiOi/items/6f316a63aa66ee59da36)
[StackOverflow](https://stackoverflow.com/questions/78738753/azure-container-apps-job-with-servicebus-and-managed-identity-authentication)

[クイックスタート: Python 用 Azure Queue Storage クライアント ライブラリ](https://learn.microsoft.com/ja-jp/azure/storage/queues/storage-quickstart-queues-python?tabs=passwordless%2Croles-azure-portal%2Cenvironment-variable-windows%2Csign-in-azure-cli)

[*1]:https://learn.microsoft.com/ja-jp/azure/container-apps/tutorial-event-driven-jobs