Azure認定資格 WEB問題集&徹底解説
AZ-104:Microsoft Azure Administrator
問題文と選択肢
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "aci-tokiwa-report",
"location": "japaneast",
"properties": {
"containers": [
{
"name": "report-api",
"properties": {
"image": "tokiwa.azurecr.io/report-api:linux",
"ports": [
{ "protocol": "TCP", "port": 80 }
],
"resources": {
"requests": { "memoryInGB": 1, "cpu": 1 }
}
}
}
],
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{ "protocol": "TCP", "port": 80 }
]
},
"osType": "Linux"
}
}
ただし、report-api のイメージに含まれるアプリケーションは、テンプレートの宣言とは異なり TCP 8080 番で待ち受けています。インターネットからこのコンテナーグループへのアクセスについて、正しい記述はどれですか。 - パブリック IP のポート 80 番へアクセスしても、report-api コンテナーは 8080 番でしかリッスンしていないため、接続を確立できない
- パブリック IP のポート 8080 番へアクセスすると、report-api に到達できる
- ipAddress.type が Public に設定されているため、コンテナー側で明示していないポートも含めてすべて外部公開される
- Azure Container Instances がパブリック IP の 80 番への通信を report-api の 8080 番へ自動的に転送するため、80 番で report-api に到達できる
A. パブリック IP のポート 80 番へアクセスしても、report-api コンテナーは 8080 番でしかリッスンしていないため、接続を確立できない
パブリック IP で開いているのは ipAddress.ports の TCP 80 番だけです。ACI にはポートマッピングが無いため、80 番への通信はコンテナーグループの同じ 80 番にそのまま届きます。
ところが report-api のアプリは8080 番でしか待ち受けておらず、80 番には受け手がいません。テンプレートでコンテナーの ports に 80 を宣言していても、それはアプリの待ち受けポートを変えるものではないため、接続は確立できません。よってこの記述が正解です。
B. パブリック IP のポート 8080 番へアクセスすると、report-api に到達できる
アプリは確かに 8080 番で待ち受けていますが、外部クライアントがグループ内のコンテナーに到達するには、そのポートをグループの IP アドレス側(ipAddress.ports)でも公開する必要があります。
このテンプレートの ipAddress.ports には80 番しか無いため、インターネットから 8080 番への通信はコンテナーまで届きません。8080 番は、同じグループ内の他のコンテナーから localhost 経由で使えるだけです。
C. ipAddress.type が Public に設定されているため、コンテナー側で明示していないポートも含めてすべて外部公開される
ipAddress.type を Public にする設定は、コンテナーグループにパブリック IP を割り当てるという指定にすぎません。外部に開くのは ipAddress.ports に列挙したポートだけで、すべてのポートが公開されるわけではありません。
本問で外部に開いているのは TCP 80 番のみであり、「明示していないポートも含めてすべて公開」という記述は誤りです。
D. Azure Container Instances がパブリック IP の 80 番への通信を report-api の 8080 番へ自動的に転送するため、80 番で report-api に到達できる
Docker の -p 80:8080 のようなポート変換を ACI に期待した誤答です。ACI のコンテナーグループにはポートマッピングの仕組みが無く、IP の 80 番への通信は同じ 80 番に届くだけで、8080 番へ書き換えられることはありません。
外部の 80 番でアプリに到達させたいなら、アプリ自体を 80 番で待ち受けるように直すか、80 番で待ち受けるリバースプロキシを同じグループに置いて localhost:8080 へ中継するなど、構成側で対処する必要があります。
ACI は「外の番号=中の番号」。80→8080 の変換は無いので、届いた番号で待ち受けていなければつながらない。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| ipAddress.ports に TCP 80 のみ(type は Public) | パブリック IP から到達できるのは列挙された 80 番だけ。8080 番は外から届かない →選択肢(B)を消す |
| ipAddress.type が Public であることの意味 | パブリック IP を割り当てるだけで、全ポートを開放する設定ではない →選択肢(C)を消す |
| 外部の 80 番とアプリの 8080 番の食い違い | ACI にはポートマッピングが無い。80 番への通信は同じ 80 番に届くだけで 8080 番へは転送されない →選択肢(D)を消す |
| アプリは TCP 8080 番で待ち受け(80 番は待ち受けなし) | 80 番に届いた通信には受け手がいないため接続は確立できない →選択肢(A)が正解 |
ひっかけポイント
- コンテナーの ports に 80 と書いてあっても、それは公開ポートの宣言であってアプリの待ち受けポートを変えない。テンプレートの宣言と、イメージ内のアプリが実際に listen しているポートを分けて読む
- 選択肢 D は Docker の
-p 80:8080の感覚でポート変換を期待するひっかけ。ACI のグループ IP のポートは、同じ番号のコンテナーポートへ届くだけ - 選択肢 B は「アプリが 8080 番で待っているなら 8080 番で入れる」と考えると選びたくなるが、IP 側(ipAddress.ports)で開いていないポートには外から届かない
- 選択肢 C の「Public だから全部公開」は誤解。開くのは ipAddress.ports に列挙したポートだけ
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「アプリを80 番で待ち受けるように修正した」 | テンプレートはそのままで、パブリック IP の 80 番から report-api に到達できる。 |
| 「コンテナーの ports と ipAddress.ports を両方とも 8080 に変更した」 | アプリの待ち受けと一致するので、クライアントはパブリック IP の 8080 番で接続できる(80 番では接続できない)。 |
| 「コンテナーの ports が 8080、ipAddress.ports が 80 だった(どのコンテナーも 80 を公開していない)」 | ipAddress のポートをどのコンテナーも使っていない構成としてデプロイ時に拒否される(「Following ports '…' in the 'ipAddress' are not used by any container in container group」のエラー)。 |
| 「アプリは変更できないが、外部には80 番で公開したい」 | ACI に変換機能は無いので、80 番で待ち受けるリバースプロキシのコンテナーを同じグループに追加し、localhost:8080 へ中継するなど構成で対処する。 |
| 「同じグループ内の別コンテナーから report-api を呼び出したい」 | グループ内のコンテナーは、IP やコンテナーで公開していないポートでも localhost:8080 で到達できる。 |
リファレンス
この問題を解くために必要な知識を扱う公式ドキュメントです。| 知識項目 | 公式ドキュメント |
|---|---|
| 外部クライアントが到達するには IP アドレスのポートをコンテナーから公開する必要があること・グループ内は localhost で任意ポートに到達できること | コンテナー グループの概要 - Azure Container Instances |
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "aci-tokiwa-report",
"location": "japaneast",
"properties": {
"containers": [
{
"name": "report-api",
"properties": {
"image": "tokiwa.azurecr.io/report-api:linux",
"ports": [
{ "protocol": "TCP", "port": 80 }
],
"resources": {
"requests": { "memoryInGB": 1, "cpu": 1 }
}
}
}
],
"restartPolicy": "Always",
"ipAddress": {
"type": "Public",
"ports": [
{ "protocol": "TCP", "port": 80 }
]
},
"osType": "Linux"
}
}
ただし、report-api のイメージに含まれるアプリケーションは、テンプレートの宣言とは異なり TCP 8080 番で待ち受けています。インターネットからこのコンテナーグループへのアクセスについて、正しい記述はどれですか。 - パブリック IP のポート 80 番へアクセスしても、report-api コンテナーは 8080 番でしかリッスンしていないため、接続を確立できない
- パブリック IP のポート 8080 番へアクセスすると、report-api に到達できる
- ipAddress.type が Public に設定されているため、コンテナー側で明示していないポートも含めてすべて外部公開される
- Azure Container Instances がパブリック IP の 80 番への通信を report-api の 8080 番へ自動的に転送するため、80 番で report-api に到達できる
次の問題前の問題
会員機能
お役立ち情報
姉妹サイト
AWS
- CLF:クラウドプラクティショナー
- SAA:ソリューションアーキテクト-アソシエイト
- AIF:AIプラクティショナー
- SOA:CloudOpsエンジニア-アソシエイト
- DVA:デベロッパー-アソシエイト
- DEA:データエンジニア-アソシエイト
- MLA:機械学習エンジニア-アソシエイト
- SAP:ソリューションアーキテクト-プロフェッショナル
- DOP:DevOpsエンジニア-プロフェッショナル
- AIP:生成AIデベロッパー-プロフェッショナル
- SCS:セキュリティ-専門知識
Microsoft Azure
- AZ-900:Microsoft Azure Fundamentals
- AZ-104:Microsoft Azure Administrator
- AI-901:Microsoft Azure AI Fundamentals
- DP-900:Microsoft Azure Data Fundamentals