はじめに
どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は我がAzure Container AppsでRabbitMQを立てた際の 注意ポイント を記載していこうかと思う。
我の備忘録程度に書くのであまり期待しないでほしい。
Azure Container Appsとは?
「Azureでコンテナを複数立ててアプリを組みたい!でもkubernetesは触ったことあまりないので自信がない」
こういった層に受けるのがこのサービスではなかろうか?
RabbitMQとは?
メッセージングキューの非同期通信オープンソースである。
上記コンソールである。
環境
2023/05/11での環境である。
開発環境
- Docker 20.10.21
- terraform 3.55.0
本番環境
- Azure Container Apps
- Azure Container Registry
- A Container Apps environment
- Vnet
これだけ書いとけばもうわかる人にはイメージついてるのではないかと思う。
注意ポイント
【ポイント1】コンテナイメージ
これはまぁMac使いの人がハマる瞬間ですね。
MSなのでarm64
でイメージを作るのは止めましょう(偏見)。以下のDockerfileのようにamd64
を明示しておけばいいです。
FROM --platform=linux/amd64 rabbitmq:3.11.15-management
EXPOSE 5672 15672
【ポイント2】Ingress設定
これはHTTP通信を行うコンテナ以外のコンテナを動かす際に注意しなければなりません。
redisの6379
とかもそうですね。
Azure Container Appsでの外部コンテナ間TCP通信を行うには カスタムVnetを用意しないといけません。
外部公開しないのならば別に気にしなくていいのですが、
公開しない設定でもVnet上でコンテナは立てることができるので、どうせならVnetを用意しておいて損はないでしょう。
まぁキューイングサービスは外部公開しないですけどね。
以下参考。
【ポイント3】TerraformでのIngress設定
ポイント2同様、HTTP通信を行うコンテナ以外のコンテナを動かす際に注意しなければなりません。
現在Azure Container Appsでのコンテナ間通信はTCP通信をサポートしていますがTerraformさんがサポートしてくれてません。
TCPサポートしてくれているところなら以下のように書いてる。
なのでAzure Container AppsをTerraformで管理したいなら、一旦手動(Azure Portal上)で立てて以下のようにdata
で取り込むのが良いと思います。
data "azurerm_container_app" "rabbitmq" {
name = "rabbitmq-app"
resource_group_name = "example-resources"
}
【ポイント4】Ingressにおける2Port設定
基本的にAzure Container Appsは1コンテナ1Portの解放構成です。
ターゲットポート
の欄で設定します。
まぁコンテナはプロセスなんで1つの役割でいこうってのもわかります。
でもrabbitmq
の場合は結構困ったりします。以下ように複数Port使ったりするので。
Port Number | 内容 |
---|---|
5672 | メッセージの送受信(非暗号化) |
15672 | 管理画面コンソールアクセス |
この場合、TCPでのIngress設定をしたときのみの解決策があります。
公開されたポート
に2つめのPortを開ければいいです。
まとめ
ただの備忘録デス。
間違ってたら教えてください。
Azure Container Apps何もわからん。