はじめに
前編では、Azure Container Instancesに 専用YAMLファイルを使用してコンテナーをデプロイしてみました。
後編では、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の中身
- ファイル共有の中身
まとめ
後編ではコンテナーにストレージアカウントのファイル共有をマウントして、
データの永続化を実現しました。
ファイル共有だけでなく何通りかデータの永続化をする方法があるようなので、
色々試してみたいと思います!