【後編】Azure Container Instancesを試してみる

はじめに

前編では、Azure Container Instancesに 専用YAMLファイルを使用してコンテナーをデプロイしてみました。

blog.jbs.co.jp

後編では、Azure Container Instancesのデータを永続化する方法をご紹介します。

データの永続化

Azure Container Instancesはステートレスなサービスのため、 コンテナーを停止・再起動するとデータが失われてしまいます。

まずはデータが失われる動きを見てみましょう。

前回の記事で起動したコンテナーに接続し、データベースにテーブルを1つ作成します。
今回使用するSQLは以下となります。

CREATE TABLE demo_db.TEST_TABLE(
   ID CHAR(10) NOT NULL PRIMARY KEY,
   NAME VARCHAR(200)
);

MySQL WorkbenchでSQLを入力し、稲妻マークをクリックします。

テーブルが作成されました。

この状態で、Azureポータルからコンテナーを再起動します。

再起動中は状態が「更新中」になります。

再起動が完了しました。

もう一度コンテナー接続すると、テーブルが消えていることが確認できました。
このように、Azure Container Instancesは再起動するとデータが消えてしまいます。

データの永続化を実現するには

ストレージアカウントのファイル共有をコンテナーにマウントすることで、 データの永続化を実現することができます。 learn.microsoft.com

それでは、実際にファイル共有をマウントしてみましょう。

ストレージアカウントの作成

まずPowershellを起動し、ストレージアカウントを作成します。
今回はコマンドで作成しますが、Azureポータルから作成しても問題ありません。

az storage account create `
  --name [ストレージアカウント名] `
  --resource-group [リソースグループ名] `
  --location japaneast `
  --sku Standard_LRS

後述する手順でストレージアカウントのアクセスキーが必要となるため、 Azureポータルで確認しておきます。

ファイル共有作成

ストレージアカウントが作成できたら、以下のコマンドを実行しファイル共有を作成します。

az storage share create `
  --name mysql-data `
  --account-name [ストレージアカウント名]

YAMLファイル修正

前編で作成したYAMLファイルを以下のように修正します。

name: demo-mysql-container
apiVersion: '2021-10-01'
location: japaneast
tags: {}
properties:
  containers:
  - name: mysql
    properties:
      image: mysql:8
      resources:
        requests:
          memoryInGB: 1.5
          cpu: 1
      ports:
      - port: 3306
      environmentVariables:
      - name: MYSQL_ROOT_PASSWORD
        value: example
      - name: MYSQL_DATABASE
        value: demo_db
      ## 追加
      volumeMounts:
      - mountPath: /var/lib/mysql # コンテナ内の任意のディレクトリを指定
        name: filesharevolume
  osType: Linux
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: 3306
    dnsNameLabel: [DNS名]
  ## 追加
  volumes:
  - name: filesharevolume # volumeMountsで指定した名前
    azureFile:
      sharename: [ファイル共有名]
      storageAccountName: [ストレージアカウント名]
      storageAccountKey: [ストレージアカウントのアクセスキー]
type: Microsoft.ContainerInstance/containerGroups

デプロイ

修正したYAMLファイルを再度デプロイします。
YAMLファイルを修正した場合は、再度以下のコマンドを実行すると変更が反映されます。

az container create --resource-group [リソースグループ名] --file [YAMLファイル名]

確認

コンテナーに接続し、前述した手順でテーブルを1つ作成します。

テーブル作成後コンテナーを再起動し、再度コンテナーに接続すると、 作成したテーブルが残っていることが確認できました!

ちなみにですが、 コンテナ内の/var/lib/mysqlと、ファイル共有の中身が同じであることも確認できました。 しっかりマウントできているようです。

  • コンテナ内の/var/lib/mysqlの中身
  • ファイル共有の中身

まとめ

後編ではコンテナーにストレージアカウントのファイル共有をマウントして、 データの永続化を実現しました。
ファイル共有だけでなく何通りかデータの永続化をする方法があるようなので、 色々試してみたいと思います!

執筆担当者プロフィール
近藤 結梨香

近藤 結梨香(日本ビジネスシステムズ株式会社)

業務では主にAzureに携わっています。映画好きで良く映画館に籠っています。

担当記事一覧