[ストーリで理解]Azure Container Instances とは

「コンテナってなに?仮想マシンじゃダメなの?」

[おてて動かそう]のAzure Container Instances入門

会議室の窓から差し込む陽光が、美咲のパソコン画面に反射していた。IT部門に異動して1ヶ月が経ち、少しずつクラウドの知識が身についてきた彼女だが、今日はまた新しい用語で頭を悩ませていた。

「コンテナって何なんですか?仮想マシンとどう違うんですか?」

その質問を聞いていた田中がコーヒーカップを置きながら振り向いた。

「おっ、コンテナに興味あるっすね!簡単に言うと、アプリケーションとその動作環境をまとめてパッケージ化したものっす。仮想マシンよりも軽量で、起動が早いっていう特徴があるんすよ」

「パッケージ…ですか?お弁当箱みたいな感じですか?」

その例えを聞いて、田中が笑顔で拍手した。

「その例え、めっちゃわかりやすいっす!まさにお弁当箱っすね。おかずと一緒にちゃんと箸も入ってるから、どこでも同じように食べられるっていう。コンテナもアプリと必要な環境が全部入ってるから、どの環境でも同じように動くんすよ」

そこに隼人が加わった。「美咲さん、Azure Container Instancesについて調べているのか」

「はい、ドキュメントを読んでいたんですが、ちょっと難しくて…」

「Azure Container Instancesは、Azureで最も簡単にコンテナーを実行できるサービスだ。仮想マシンを管理せずに、数秒でコンテナーを起動できる」隼人は端的に説明した。

コンテナの特徴とメリット

「でも、なんで仮想マシンじゃなくて、コンテナを使うんですか?」美咲の素朴な疑問に、田中が応える。

「仮想マシンは起動に時間がかかるっすけど、コンテナは数秒で立ち上がるんす。しかも、必要なリソースだけ使うから無駄がないっす」

隼人がホワイトボードに図を描きながら補足する。「仮想マシンはOSから含めて仮想化するが、コンテナはOSのカーネルを共有して、アプリケーション層だけを分離する。だから軽量で高速だ」

美咲はメモを取りながら、「Azure Container Instancesの特徴ってどんなものがあるんですか?」と尋ねた。

「大きく分けて次のような特徴があるな」隼人はホワイトボードに箇条書きしていく。

  1. 高速なスタートアップ時間 – 数秒でコンテナ開始
  2. コンテナーアクセス – IPアドレスとFQDNで直接公開
  3. セキュリティ – ハイパーバイザーレベルの分離
  4. カスタムサイズ – 必要なCPUとメモリを柔軟に指定
  5. ストレージ – Azure Filesでの永続ストレージ対応

「特に、秒単位で課金されるから、使った分だけ支払えばいいんだ」

「そんなに早く起動するんですね!」美咲は驚いた。「じゃあ、どうやって使うんですか?」

コンテナの実用性と種類

「Docker Hubやプライベートレジストリからイメージを取り込んで実行するんだ」隼人が説明する。

「イメージ?それって写真とかですか?」美咲が首を傾げる。

田中が笑いながら「いや、ここでいうイメージはアプリとその環境をパッケージ化したものっす。さっきのお弁当箱の例えでいうと、お弁当の中身が詰まった状態のテンプレートみたいなものっす」

「なるほど!それを取り込んで実行するんですね」

隼人が続ける。「Container Instancesでは、標準、機密、スポットの3種類のコンテナーがサポートされている。また、単一インスタンスやNGroupsを使ったマルチインスタンス、さらにはAKSの仮想ノードとしても使える」

「ちょっと難しいですね…」と美咲がつぶやく。

「機密コンテナーは高度なセキュリティが必要なワークロード向けで、スポットコンテナーは割引価格で使える代わりに、Azureに余剰容量がないときは中断されるかもしれないんす」と田中がフォロー。

コンテナグループとネットワーク

「あと、コンテナグループという概念も重要だ」隼人がホワイトボードに新しい図を描き始める。「複数のコンテナーを同じホスト、ネットワーク、ストレージで実行できる。メインアプリとサポート用コンテナーを一緒に動かせるんだ」

「例えば、Webアプリとログ記録用のコンテナーを同時に動かすとかっすね」田中が具体例を挙げる。

「ネットワークも柔軟で、仮想ネットワークにデプロイすれば、オンプレミスのシステムとも安全に通信できる」隼人が説明を続ける。

「それじゃあ、既存のシステムとも連携できるんですね!」美咲が理解を示す。

「そうっす!しかも可用性ゾーンもサポートしてるから、障害対策もバッチリっす」

セキュリティとアイデンティティ

「セキュリティ面はどうなんですか?」美咲が質問する。

隼人が答える。「Container Instancesは、ハイパーバイザーレベルのセキュリティを提供している。また、マネージドIDもサポートしていて、コード内に資格情報を埋め込まなくてもMicrosoft Entraサービスに対して認証できる」

「マネージドIDって何ですか?」

「簡単に言うと、コンテナー自身にIDを割り当てて、パスワードなしで他のサービスと安全に通信できるようにする仕組みっす」田中が説明する。「例えば、コンテナーがAzure Storageにアクセスするとき、ユーザー名とパスワードをコードに書かなくても済むんすよ」

「なるほど!セキュリティ的にもいいんですね」

注意点と制限事項

「でも、使う上で気をつけることもあるな」隼人がホワイトボードを消して、新たに箇条書きしていく。

  1. コンテナーイメージは15GB以下に収める必要がある
  2. コンテナーグループが再起動されるとIPアドレスが変わる可能性がある
  3. 一部のポートはサービス機能用に予約されている
  4. プラットフォームのメンテナンスで再起動されることがある
  5. 特権コンテナー操作は許可されていない

「15GBってかなり大きいですね」美咲がコメントする。

「通常のアプリケーションなら十分な大きさっす。ただ、IPが変わることがあるから、本番環境では静的IPを別途用意したほうがいいっすね」田中がアドバイスする。

【まとめ】Azure Container Instancesのポイント

  • Azure Container Instancesは、仮想マシンを管理せずに最も簡単にコンテナーを実行できるサービス
  • コンテナーはアプリケーションとその動作環境をパッケージ化したもので、仮想マシンより軽量で高速
  • 数秒で起動し、秒単位で課金されるため、コスト効率が高い
  • 標準、機密、スポットの3種類のコンテナーに対応
  • コンテナーグループで複数のコンテナーを同じ環境で実行可能
  • 仮想ネットワークのデプロイ、マネージドID、永続ストレージなどをサポート
  • イメージサイズの制限(15GB)やIPアドレス変更などの制限事項あり

「なるほど!コンテナーのメリットがよくわかりました。小さなアプリケーションをサクッと動かすなら、仮想マシンよりコンテナーの方がいいんですね!」美咲が満面の笑顔で言った。

「そのとおりだ」隼人がうなずく。「小規模なアプリや、スケーラビリティが必要なサービスには特に有効だ」

「次はぜひ実際に動かしてみたいっす!」田中が笑顔で提案した。

美咲も嬉しそうに「はい!やってみたいです!」と返した。


参考

https://learn.microsoft.com/ja-jp/azure/container-instances/container-instances-overview