Azure Container Instances を触ってみた

"Azure Container Instances を触ってみた" (2021年8月17日掲載)

目次

はじめに

はじめまして。
法人のお客さま向けに各種クラウドの提案、設計、構築を担当している蔦木です。初登場となります。

今回は、AI・機械学習とともに扱われることが多いコンテナー関連のAzure サービスについてご紹介いたします。Azure にもさまざまなコンテナーサービスがございます。その中でも簡単に検証でき、日々の処理に取り入れやすい「Azure Container Instances」について、マイクロソフト社のドキュメントベースで概要に触れ、簡単な環境構築方法をご紹介したいと思います。

コンテナーを活用いただくことで、日々の業務を効率化させ、クリエイティブな作業に集中できる環境を確保いただけたら幸いです。

コンテナーとは

コンテナー (container)は、容器や入れ物などの意味を持つ単語です。IT分野では、アプリケーション及びアプリケーションの実行環境をパッケージ化して提供する機能を指すことが多いです。
まずは、物理サーバ、仮想化、コンテナーの違いをご紹介します。構成コンポーネントを簡易的に表現すると以下の通りになります。

OSから下のレイヤを中心に違いを検討してみます。

物理サーバの特長は、ハードウェアのリソースを十分に発揮できることです。ゲストOSなどの間接リソースを経由しないため、ハードウェアの性能の十分に引き出すことができます。
しかし、サーバのサイジングを誤ると、潤沢なリソースを使いきることができず、無駄にすることとなります。

仮想化の特長はハードウェアのリソースを効率的に活用できることです。リソースをゲストOS単位で割当ることにより、ハードウェアの性能をまんべんなく割当てることができます。
しかし、ホストOSやハイパーバイザ、ゲストOSなどの間接リソースを作成するため、物理サーバほどハードウェアの性能を利用しきることはできません。また、物理サーバの上限を超えた割当てをしないよう、注意が必要となります。

最後にコンテナーの特長です。コンテナーはホストOSのkernelを利用するため、起動や処理速度が速くなります。コンテナーサービス自体も小さいため、オーバーヘッドのリソースをそこまで考慮する必要はございません。また、コンテナーイメージをコードで表現することができ、アプリケーションの実行環境も容易に再現することができるため、DevOpsとの相性も良いです。
しかし、既存システムの多くは物理サーバや仮想化を前提として構築されております。そのため、コンテナーを導入する場合は、既存システムの見直しや運用が複雑化する可能性もございます。また、コンテナーの学習コストもあわせて考慮する必要がございます。

Azure Container Instances とは

Azure Container Instancesは、VMやKubernetesなどのコンテナーオーケストレーションサービスを利用せず、Azureでコンテナーを実行できるサービスです。単純なアプリケーションやバッチ処理で利用されることが多いかと思います。複数コンテナーの連携やオートスケーリングなどの複雑な運用をする場合は、Azure Kubernetes Service が推奨されております。マイクロソフト社がDockerとKubernetesの違いを紹介しておりますので、こちらも参考にしていただければと思います。機会があれば、Azure Kubernetes Service も紹介したいと考えております。
また、マイクロソフト社がユースケースを紹介しております。レポートの生成やファイル形式の変換などのバッチ処理は、他の処理と依存関係が弱いケースが多いかと思われます。簡単な処理をコンテナー化しつつ、コンテナーの学習及び業務の効率化を目指してみてはいかがでしょうか。

環境構築

システム構成

本章からAzure Container Instancesを構築していきます。今回は以下の構成を目指します。
事前準備にてネットワーク関連のリソースと動作確認用のVMを作成します。みなさまの環境にあわせて読み替えていただいても問題ございません。
また、Azure Cloud Shellを事前準備に利用します。Azure Cloud Shell は、ブラウザベースのコマンドライン環境です。マウスによる画面操作が不要となります。操作をコマンドに落とし込むため、操作ミスによるヒューマンエラーの防止や、再現性の向上を見込めます。コマンドラインの学習コストはかかりますが、この機会にぜひ習得してみてはいかがでしょうか。

事前準備

1. Azure portal にログインします。

2. 【Cloud Shell】を選択します。
※一度でもCloud Shellを実行したことがある場合、コンソール画面が表示されます。Cloud Shellの初期設定をスキップください。

3. 【Bash】を選択します。
※マイクロソフトのログイン画面が表示される場合、任意のアカウントでログインください。

4. 任意のサブスクリプションを設定し、【ストレージの作成】を選択します。

コンソール画面が表示され、ログインに成功したことを確認します。

5. 以下のコマンドを実行し、リソースグループを作成します。


az group create \
 --name test-rg-01 \
 --location japaneast

6. 以下のコマンドを実行し、作成したリソースグループを表示します。


az group show --name test-rg-01 | jq -r .name

以下の通り表示され、リソースグループの作成に成功したことを確認します。


test-rg-01

7. 以下のコマンドを実行し、仮想ネットワークを作成します。


az network vnet create \
 --resource-group test-rg-01 \
 --name test-vnt-01 \
 --address-prefixes 192.168.0.0/24

8. 以下のコマンドを実行し、作成した仮想ネットワークを表示します。


az network vnet list --resource-group test-rg-01 | \
 jq -r ' .[] | {name: .name, addressPrefixes: .addressSpace.addressPrefixes[]}'

以下の通り表示され、仮想ネットワークの作成に成功したことを確認します。


{
  "name": "test-vnt-01",
  "addressPrefixes": "192.168.0.0/24"
}

9. 以下のコマンドを実行し、VM用のネットワークセキュリティグループを作成します。


az network nsg create \
 --resource-group test-rg-01 \
 --name test-nsg-01

10. 以下のコマンドを実行し、コンテナー用のネットワークセキュリティグループを作成します。


az network nsg create \
 --resource-group test-rg-01 \
 --name test-nsg-02

11. 以下のコマンドを実行し、Azure Bastion 用のサブネットを作成します。


az network vnet subnet create \
 --address-prefixes 192.168.0.0/27 \
 --name AzureBastionSubnet \
 --resource-group test-rg-01 \
 --vnet-name test-vnt-01

12. 以下のコマンドを実行し、VM用のサブネットを作成し、ネットワークセキュリティグループを紐づけます。


az network vnet subnet create \
 --address-prefixes 192.168.0.32/27 \
 --name test-snt-01 \
 --resource-group test-rg-01 \
 --vnet-name test-vnt-01 \
 --network-security-group test-nsg-01

13. 以下のコマンドを実行し、コンテナー用のサブネットを作成し、ネットワークセキュリティグループを紐づけます。


az network vnet subnet create \
 --address-prefixes 192.168.0.64/27 \
 --name test-snt-02 \
 --resource-group test-rg-01 \
 --vnet-name test-vnt-01 \
 --network-security-group test-nsg-02

14. 以下のコマンドを実行し、ネットワークセキュリティグループの紐づけ結果を表示します。


az network vnet subnet list \
 --resource-group test-rg-01 \
 --vnet-name test-vnt-01 |\
  jq -r '.[] | {name: .name, networkSecurityGroup: .networkSecurityGroup.id}'

以下ように表示され、ネットワークセキュリティグループの紐づけに成功したことを確認します。


{
  "name": "test-snt-01",
  "networkSecurityGroup": "/<省略>/test-nsg-01"
}
{
  "name": "AzureBastionSubnet",
  "networkSecurityGroup": null
}
{
  "name": "test-snt-02",
  "networkSecurityGroup": "/<省略>/test-nsg-02"
}

15. 以下のコマンドを実行し、VMを作成します。
※コマンドを実行後、admin のパスワードを登録します。


az vm create \
 --resource-group test-rg-01  \
 --location japaneast  \
 --vnet-name test-vnt-01  \
 --subnet test-snt-01  \
 --public-ip-address ""  \
 --nsg ""  \
 --name test-vm-01  \
 --image win2019datacenter  \
 --admin-username azureuser  \
 --size Standard_B1s  \
 --storage-sku StandardSSD_LRS

16. 以下のコマンドを実行し、VMの作成状況を表示します。


az vm show  \
 --resource-group test-rg-01  \
 --name test-vm-01 |  \
  jq -r '{provisioningState: .provisioningState}'

以下の通り表示され、VMの作成に成功したことを確認します。


{
  "provisioningState": "Succeeded"
}

17. 以下のコマンドを実行し、Azure Bastion 用のパブリックIPアドレスを作成します


az network public-ip create  \
 --resource-group test-rg-01  \
 --name test-pip-01  \
 --sku Standard  \
 --location japaneast

18. 以下のコマンドを実行し、Azure Bastion を作成します。
※本コマンドは約5分かかります。


az network bastion create  \
 --name AzureBastion  \
 --public-ip-address test-pip-01  \
 --resource-group test-rg-01  \
 --vnet-name test-vnt-01  \
 --location japaneast

19. 以下のコマンドを実行し、Azure Bastion の作成状況を表示します。


az network bastion show  \
 --resource-group test-rg-01  \
 --name AzureBastion |  \
  jq -r '{provisioningState: .provisioningState}'

以下の通り表示され、Azure Bastion の作成に成功したことを確認します。


{
  "provisioningState": "Succeeded"
}

Container Instancesの構築

1. 【リソースの作成】を選択します。

2. 【コンテナー】を選択します。

3. 【Container Instances】を選択します。

4. 基本情報を入力し、【次:ネットワーク > 】を選択します。

5. ネットワーク情報を入力し、【次:詳細】を選択します。

6. 詳細情報を入力し、【確認及び作成】を選択します。

7. 検証に成功したことを確認し、【作成】を選択します。

8. 【デプロイが完了しました】と表示された後、【リソースに移動】を選択します。

9. リソース情報の【IP アドレス (Private)】の内容をメモします。本IPアドレスを動作確認時に利用します。

動作確認

本節では、Azure Container Instancesの動作確認をしていきます。本手順ではAzure Bastion でVMにログインし、ブラウザで動作確認用の画面を表示させます。

1. 左メニューから【Virtual Machies】を選択します。

2. 【test-vm-01】を選択します。

3. 【接続】 > 【Bastion】の順に選択します。

4. 【Bastion を使用する】を選択します。

5. 認証情報を入力し、【接続】を選択します。

※使用しているBastionが【Azure Bastion】、プロビジョニングの状態が【Succeeded】になっていることを確認ください。
※ポップアップをブロックしている場合、許可ください。

6. Internet Explorer を起動します。

7. ブラウザのURL欄に【IP アドレス (Private)】を入力し、アクセスします。

8. 【Welcom to Azure Container Instances!】の画面が表示され、動作確認に成功したことを確認します。

9. 【test-vm-01】からログアウトします。

必要に応じて、検証用リソース【test-rg-01】を削除ください。削除しないと、課金が継続されるのでご注意ください。

まとめ

「Azure Container Instances」の利用方法について解説しました。今回は、Azure Portalで環境を構築しましたが、コマンドベースで構築することも可能です。また、他のAzure サービスと連携することで、通常業務の自動化などにも活用できるかと思います。

これまでアプリケーションを導入する際、Azure Virtual Machines を利用されるケースが多かったかと思います。Azure Virtual Machines はアプリケーションの実行環境を自由に設定できる反面、その管理が煩雑になることが多いです。ミドルウェアのバージョンアップやセキュリティパッチの適用などがよくあるケースかと思います。「Azure Container Instances」 を利用することで管理対象を少しでも減らし、その煩雑さを軽減できると考えます。環境を簡単に構築できるため、コンテナーに興味のある方は利用を検討されてみてはいかがでしょうか。

以上、最後までお読みいただきありがとうございました。

あわせて読みたい記事

Azure上に作成した仮想マシンのディスク拡張方法

Azure API Managementを触ってみた!

Azure Synapse Analyticsはじめの一歩