永続データストアを扱う
永続的なデータストアを使用することで、 IBM Cloud® Code Engine アプリケーションやジョブに IBM Cloud Object Storage (COS) バケットをマウントすることができます。 この機能により、ワークロードは標準的なファイル操作を使って、ローカルファイルシステムを通してCOSバケットのコンテンツにアクセスすることができます。
Code Engine における永続データストアは、 Code Engine が管理しない既存のデータストアへの参照である。 現在、 IBM Cloud Object Storage がサポートされている唯一のデータ・ストア・タイプである。 COSバケットへの参照を作成することで、アプリケーションやジョブコンテナのファイルシステムに直接マウントすることができます。
開始前に
永続データ・ストアを使用する前に、以下の前提条件が満たされていることを確認してください。
- IBM Cloud Object Storage。
- HMAC クレデンシャルを 有効にして、 Object Storage インスタンスのサービス・クレデンシャルを作成する必要があります。 HMAC クレデンシャルは、バケットからの読み込みとバケットへの書き込みを行うために、少なくとも Writer サービスアクセスロールを必要とします。 読み取りアクセスのみが必要な場合は、代わりにコンテンツリーダーサービスアクセスロールを選択してください。
- Object Storage インスタンスで利用可能なバケットが必要です。 詳細については、 新しいバケツの作成を 参照してください。
- Code Engine プロジェクト が必要であり、それが現在のコンテキストとして選択されている必要があります。
ステップ1:コンソールを使って Code Engine、HMACシークレットを作成する
COS バケットに安全にアクセスするために、 Code Engine は Object Storage インスタンスに関連付けられている HMAC 認証情報を必要とします。 これらのクレデンシャルは、 Code Engine プロジェクト内のシークレットに保存する。
コンソールからHMACシークレットの作成に従って、 HMAC という形式のシークレットを作成する。
プロンプトが表示されたら、COSサービス・クレデンシャルの対応する値を入力してください。
ステップ2:コンソールを使用して永続データストアを作成する
次に、 Code Engine に永続データストア・リソースを作成します。 このリソースは、あなたのCOSバケットへの参照として機能し、あなたが作成したHMACシークレットとリンクします。
- Code Engine プロジェクトページでプロジェクト名をクリックします。
- コンポーネント]ページで[ 永続データストア ]をクリックします。
- 永続データストア]ページで[ 作成 ]をクリックします。
- Create a persistent data store(永続データストアの作成)ページから、以下の手順を実行します:
- 名前を指定してください。例:
mysecret-hmac。 - 既存の COSバケットを選択するか、 手動で追加するかを指定します。
- COSインスタンスを選択するか、手動でその名前を指定する。
- バケットを選択するか、その名前を手動で指定します。
- COSインスタンスへの認証に必要なHMAC アクセス・シークレットを選択する。
- Create ]をクリックして、永続データストアを作成します。
- 名前を指定してください。例:
ステップ3:コンソールを使ってデータストアをワークロードにマウントする
永続データストアを作成したら、アプリケーションやジョブを作成または更新するときに、 ボリュームマウントとしてマウントできます。
アプリケーションへの実装
-
アプリに移動する。
- 「 Code Engine プロジェクトページ 」から、自分のプロジェクト名をクリックします。 アプリケーションを操作するには、 「アプリケーション」 をクリックします。
- アプリケーション]ページで、更新するアプリケーションの名前をクリックするか、[ 作成] をクリックして新しいアプリケーションを作成します。
-
[ 構成 ] タブを選択します。
-
ボリュームマウント] タブで [追加 ]をクリックします。
-
ボリュームのタイプを「 Persistent data stores(永続データストア) 」に選択する。
-
永続データストアを選択してください。
-
相対 Bucket サブパス (オプション) を指定します。アプリケーションが、そのサブパスのプレフィックスを持つ Bucket 内のオブジェクトにのみアクセスしたい場合、例えば
path/in/bucketのように指定します。 これは、バケツ内の特定のフォルダへのアクセスを隔離したい場合に便利です。 サブパスはCOSバケット内の有効なプレフィックスでなければならない。 マウントされたディレクトリからアクセスできるのは、そのパスの下にあるコンテンツだけである。 -
マウントパスを指定します。 これは、ボリュームマウントのデータにアクセスできるアプリケーションコンテナ内のディレクトリで、例えば
/mnt/bucket。 -
アクセス許可 ( Read-write または Read-only )の値を選択します。
-
ボリュームマウントを作成するには、 [追加]をクリックします。
-
[ デプロイ ] をクリックして変更を保存し、アプリのリビジョンをデプロイします。
アプリケーションを更新すると、アプリケーションは新しいリビジョンを作成し、そのインスタンスにトラフィックをルーティングします。
仕事への取り付け
-
「ジョブ」ページに移動します。
- 「 Code Engine プロジェクトページ 」から、自分のプロジェクト名をクリックします。 ジョブとジョブ実行を操作するには、 [ジョブ] をクリックします。
- ジョブ」ページで「 ジョブ」 タブをクリックし、更新したいジョブ名をクリックするか、「 作成 」をクリックして新規作成します。
-
[ 構成 ] タブを選択します。
-
ボリュームマウント] タブで [追加 ]をクリックします。
-
ボリュームのタイプを「 Persistent data stores(永続データストア) 」に選択する。
-
永続データストアを選択してください。
-
ジョブの実行が、そのサブパスの接頭辞を持つバケツ内のオブジェクトにのみアクセスする必要がある場合は、相対バケツサブパス (オプション) を指定します。例えば、
path/in/bucket. これは、バケツ内の特定のフォルダへのアクセスを隔離したい場合に便利です。 サブパスはCOSバケット内の有効なプレフィックスでなければならない。 マウントされたディレクトリからアクセスできるのは、そのパスの下にあるコンテンツだけである。 -
マウントパスを指定します。 これは、例えば
/mnt/bucketのように、ボリュームマウントのデータにアクセスできるジョブ実行コンテナ内のディレクトリである。 -
アクセス許可 ( Read-write または Read-only )の値を選択します。
-
ボリュームマウントを作成するには、 [追加]をクリックします。
-
Deploy をクリックして変更を保存し、ジョブをデプロイします。
-
**「ジョブの実行依頼」**をクリックします。
開始前に
永続データ・ストアを使用する前に、以下の前提条件が満たされていることを確認してください。
- IBM Cloud Object Storage。
- HMAC クレデンシャルを 有効にして、 Object Storage インスタンスのサービス・クレデンシャルを作成する必要があります。 HMAC クレデンシャルは、バケットからの読み込みとバケットへの書き込みを行うために、少なくとも Writer サービスアクセスロールを必要とします。 読み取りアクセスのみが必要な場合は、代わりにコンテンツリーダーサービスアクセスロールを選択してください。
- 以下のコマンドを実行して、 IBM Cloud Object Storage プラグインをインストールする必要があります:
ibmcloud plugin install cloud-object-storage - Object Storage インスタンスで利用可能なバケットが必要です。 詳細については、 新しいバケツの作成を 参照してください。
- Code Engine プロジェクト が必要であり、それが現在のコンテキストとして選択されている必要があります。
ステップ1:CLIを使って Code Engine、HMACシークレットを作成する
COS バケットに安全にアクセスするために、 Code Engine は Object Storage インスタンスに関連付けられている HMAC 認証情報を必要とします。 これらのクレデンシャルは、 Code Engine プロジェクト内のシークレットに保存する。
フォーマット hmac のシークレットを作成するには secret create コマンドを使う。
ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt
コマンドのプロンプトが表示されたら、COSサービス・クレデンシャルの対応する値を入力してください。 secret create コマンドでプロンプトが表示されたら
ステップ2:CLIを使用して永続データストアを作成する
次に、 Code Engine に永続データストア・リソースを作成します。 このリソースは、あなたのCOSバケットへの参照として機能し、あなたが作成したHMACシークレットとリンクします。
ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
my-cos-bucket-pds、データストアのユニークな名前に置き換えてください。my-cos-bucketを COS バケツの正確な名前に置き換えてください。my-hmac-secretをHMACシークレットの名前に置き換える。
ステップ3:CLIを使用してデータストアをワークロードにマウントする
永続データストアを作成したら、アプリケーションやジョブを作成または更新するときに、そのデータストアをマウントできます。 MOUNT_PATH=PDS_NAME の形式で --mount-data-store オプションを使用する。
アプリケーションへの実装
以下のコマンドは、 myapp という名前のアプリケーションを作成し、 my-cos-bucket-pds データストアをアプリケーションコンテナ内の /mnt/bucket ディレクトリにマウントする。
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
仕事への取り付け
同様に、このコマンドは myjob という名前のジョブを作成し、同じデータストアを /mnt/bucket ディレクトリにマウントする。
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
バケット内のサブパスのマウント
マウント定義にコロン (:) を使って相対パスを追加することで、COS バケット内の特定のサブパスをマウントすることもできます。これは、Bucket 内の特定のフォルダへのアクセスを隔離したい場合に便利です。
例えば、 my-cos-bucket-pds データストアから path/in/bucket ディレクトリだけを /mnt/bucket にマウントする:
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
仕事のためでもいい:
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
注:
path/in/bucketは、COSバケットで有効なプレフィックスでなければなりません。 マウントされたディレクトリからアクセスできるのは、そのパスの下にあるコンテンツだけである。
ステップ4:マウントされたデータストア内のファイルへのアクセス
アプリケーションやジョブが実行されると、コードはマウントされたCOSバケットをローカルディレクトリのように扱うことができます。 標準的なファイルシステム操作はすべてサポートされている。
たとえば、コンテナ内では、ファイルをリストアップしたり、コンテンツを読み込んだり、新しいファイルを書き込んだりすることができる:
# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt
制限
マウントは s3fsマウントは、 S3-compatible ストレージへの FUSE ベースのファイル・システム・インタフェースを提供する 以下の制限に注意してください。
- 永続データストアの数:
- アプリケーションまたはジョブごとに、最大2つの永続データ・ストアのマウントを許可する制限があります。
- パフォーマンス:
- Object Storage は、タイムトゥファーストバイトのレイテンシーが大きいため、即時アクセスが必要な操作ではローカルファイルシステムより遅くなる。
- ランダム書き込みや追加など、ファイルを変更する操作は、バックエンドでオブジェクト全体を書き換える必要がある。
- ディレクトリのリストアップのようなメタデータ操作は、パフォーマンスが低下する可能性がある。
- 一貫性:
- IBM Cloud Object Storage は、新しいオブジェクトに対しては強力な読み取り後書き込み一貫性を提供するが、オブジェクトの上書きと削除に対しては最終的な一貫性を提供する。 これは、更新や削除の後、読み取り操作が一時的に古いデータを返す可能性があることを意味する。
- マウントの外から (たとえば COS API や他のクライアントから直接) バケットに加えられた変更は、すぐには検出されず、しばらくの間表示されないかもしれません。
- ファイルシステムのセマンティクス:
- POSIX の標準ファイルシステム機能は完全にはサポートされていません。 具体的には、ファイルやディレクトリのアトミックなリネームや ハードリンクはない。
- 並行処理:
- 同じバケットをマウントしている複数のクライアント(例えば、複数のアプリ・インスタンス)間の連携はない。 異なるインスタンスから同じファイルへの同時書き込みは、データの損失や破損につながる可能性がある。
- イベントの購読:
- Object Storage バケットにイベントサブスクリプションを設定した場合、マウントによるファイル作成操作によって複数の更新イベントが発生する可能性があることに注意してください。 その結果、 Code Engine のアプリやジョブが、1つのファイル操作に対して複数回トリガーされることになり、ダウンストリーム処理やイベント駆動型ワークフローに影響を与える可能性があります。
これらの制限により、この機能はすべてのワークロードに適しているわけではない。 ディープラーニングやデータ分析など、主に大容量ファイルを読み込むワークロードに最適で、高いスループットを達成できる。 低レイテンシ、頻繁な少量の書き込み、トランザクショナルなファイル操作を必要とするワークロードには推奨されない。
次のステップ
永続データ・ストアの操作方法を理解したところで、さらに高度なトピックを探ります: