Object Storage Service (OSS) は、画像、音声ファイル、動画ファイルなどの非構造化データに対して、大規模で安全、コスト効率が高く、信頼性の高いストレージを提供します。このトピックでは、OSS ボリュームを Elastic Container Instance (ECI) にマウントする方法について説明します。
注意事項
-
OSS は使用量に基づいて課金され、従量課金、リソースプラン、ストレージ容量ユニット (SCU) などの課金方法をサポートしています。詳細については、「OSS の課金の概要」をご参照ください。
-
OSS は共有ストレージを提供します。単一の OSS バケットを複数のインスタンスにマウントできます。
-
1 つのマウントディレクトリに保存するファイルは 1,000 個以下にしてください。
ファイル数が多すぎると、OSS クライアントが大量のメモリを消費し、インスタンスでメモリ不足 (OOM) イベントが発生する可能性があります。
前提条件
-
OSS バケットを作成します。
-
権限付与のメソッドを選択します。
-
RAM ロールを使用した権限付与 (推奨)
RAM ロールを作成し、権限を付与します。詳細については、「RAM ロールの作成」および「RAM ロールへの権限付与」をご参照ください。
ロールを作成する際、[信頼できるエンティティタイプ] を [Alibaba Cloud サービス] に、[ロールタイプ] を [通常のサービスロール] に、[信頼できるサービス] を [Elastic Compute Service (ECS)] に設定します。AliyunOSSFullAccess ポリシーをロールにアタッチします。
-
AccessKey ペアを使用した権限付与 (非推奨)
AccessKey ID と AccessKey シークレットを取得します。詳細については、「AccessKey ペアの取得」をご参照ください。
-
設定 (API)
CreateContainerGroup API オペレーションを呼び出して ECI を作成する際に、Volume 関連のパラメーターを使用してボリュームを指定し、次に Container.VolumeMount 関連のパラメーターを使用してボリュームをコンテナにマウントできます。関連パラメーターを以下に示します。詳細については、「CreateContainerGroup」をご参照ください。
ボリュームの宣言
Volume 関連のパラメーターを使用してボリュームを指定する場合、まずボリュームのタイプと名前を指定する必要があります。次に、Volume.N.Type パラメーターの値に基づいて、他の Volume 関連のパラメーターを設定する必要があります。
|
パラメーター |
タイプ |
例 |
説明 |
|
Volume.N.Name |
String |
oss-demo |
ボリュームの名前。 |
|
Volume.N.Type |
String |
FlexVolume |
FlexVolume プラグインを使用してマウントされるボリュームを作成するには、FlexVolume に設定します。 |
|
Volume.N.FlexVolume.Driver |
String |
alicloud/oss |
FlexVolume プラグインのドライバー。OSS ボリュームをマウントするには、 |
|
Volume.N.FlexVolume.Options |
String |
{"bucket":"test-*","url":"oss-cn-hangzhou.aliyuncs.com","ramRole":"ram-*"} |
FlexVolume オブジェクトのオプションの JSON 文字列。 FlexVolume を使用して OSS ボリュームをマウントする場合、
|
ボリュームのマウント
ボリュームを指定した後、VolumeMount 関連のパラメーターを使用してボリュームをコンテナにマウントできます。
パラメーター | タイプ | 例 | 説明 |
Container.N.VolumeMount.N.Name | String | test-volume | コンテナ N にマウントするボリューム N の名前。この値は Volume.N.Name の値です。 |
Container.N.VolumeMount.N.MountPath | String | /usr/share | ボリュームをマウントするコンテナ内のパス。このディレクトリ内のデータは、ボリューム上のデータによって上書きされます。 |
Container.N.VolumeMount.N.SubPath | String | /usr/sub | ボリュームのサブディレクトリ。このパラメーターは、インスタンスが同じボリュームの異なるサブディレクトリをコンテナの異なるサブディレクトリにマウントできるように指定します。 |
Container.N.VolumeMount.N.ReadOnly | Boolean | false | マウントディレクトリが読み取り専用かどうかを指定します。デフォルト値: false。 |
Container.N.VolumeMount.N.MountPropagation | String | None | ボリューム N のマウントプロパゲーション設定。マウントプロパゲーションを使用すると、1 つのコンテナにマウントされたボリュームを、同じ ECI 内の他のコンテナや、同じホスト上の他の ECI と共有できます。有効な値:
デフォルト値: None。 |
ボリュームは init コンテナにもマウントできます。必要なパラメーターは前の表のパラメーターと似ています。Container を InitContainer に変更するだけです。
設定 (コンソール)
Elastic Container Instance 購入ページで Elastic Container Instance を作成する際、[コンテナグループ設定] セクションでボリュームを指定し、次に [コンテナ設定] セクションでコンテナにボリュームをマウントできます。
ボリュームの宣言
-
[コンテナグループ設定] セクションで、[詳細設定] を展開します。
-
[ストレージ] セクションの [OSS 永続化] タブで、[追加] をクリックします。
-
OSS ボリュームのパラメーターを設定します。
-
名前: OSS ボリュームの名前。
-
バケット:OSS バケットの名前です。
-
RAM ロール:OSS へのアクセス権限を持つ RAM ロールです。
-
ボリュームのマウント
-
[コンテナ設定] セクションで、コンテナを選択し、その詳細設定を展開します。
-
[ストレージ] スイッチをオンにして、[追加] をクリックします。
利用可能なボリュームは、コンテナグループの設定で宣言したものです。
ストレージ設定の行で、[ボリューム] を宣言済みのボリューム (例:
oss-demo) に設定し、ストレージタイプ (例: [OSS 永続化]) を選択し、[コンテナ内のマウントパス] (例:/data) を入力します。オプションで、[サブパス] (例:test) を指定し、[読み取り専用] チェックボックスを選択します。
複数のコンテナにボリュームをマウントする場合は、さらにコンテナを選択して上記の手順を繰り返します。
設定例
-
ECI のインスタンス A を作成し、OSS ボリュームをマウントします。
次の例は、CreateContainerGroup オペレーションを呼び出してインスタンス A を作成するために使用されるパラメーターを示しています。詳細については、「CreateContainerGroup」をご参照ください。
ContainerGroupName=test-oss-a # ボリュームの宣言 Volume.1.Name=oss-demo Volume.1.Type=FlexVolume Volume.1.FlexVolume.Driver=alicloud/oss Volume.1.FlexVolume.Options={"bucket":"test-***","url":"oss-cn-hangzhou-internal.aliyuncs.com","ramRole":"ram-***"} # ボリュームをコンテナにマウント Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=oss-demo Container.1.VolumeMount.1.MountPath=/data-a -
インスタンス A に接続し、マウントディレクトリにファイルを作成します。
ECI への接続方法については、「ワークベンチを使用して ECI インスタンスに接続する」をご参照ください。
root@test-oss-a:/# cd data-a root@test-oss-a:/data-a# ls root@test-oss-a:/data-a# echo "hello" >test root@test-oss-a:/data-a# ls test root@test-oss-a:/data-a# cat test hello -
インスタンス A を削除します。
-
別の ECI であるインスタンス B を作成し、同じ OSS ボリュームをマウントします。
ContainerGroupName=test-oss-b # ボリュームの宣言 Volume.1.Name=oss-demo Volume.1.Type=FlexVolume Volume.1.FlexVolume.Driver=alicloud/oss Volume.1.FlexVolume.Options={"bucket":"test-***","url":"oss-cn-hangzhou-internal.aliyuncs.com","ramRole":"ram-***"} # ボリュームをコンテナにマウント Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=oss-demo Container.1.VolumeMount.1.MountPath=/data-b -
インスタンス B に接続し、マウントディレクトリ内のファイルを確認します。
OSS は永続ストレージを提供するため、インスタンス A が削除された後でも、インスタンス B からインスタンス A によって書き込まれたファイルにアクセスできます。
root@test-oss-b:/# cd data-b root@test-oss-b:/data-b# ls test root@test-oss-b:/data-b# cat test hello