永続データストアを扱う
永続的なデータストアを使用することで、 IBM Cloud® Code Engine アプリケーションやジョブに IBM Cloud Object Storage (COS) バケットをマウントすることができます。 この機能により、ワークロードは標準的なファイル操作を使って、ローカルファイルシステムを通してCOSバケットのコンテンツにアクセスすることができます。
Code Engine における永続データストアは、 Code Engine が管理しない既存のデータストアへの参照である。 現在、 IBM Cloud Object Storage がサポートされている唯一のデータ・ストア・タイプである。 COSバケットへの参照を作成することで、アプリケーションやジョブコンテナのファイルシステムに直接マウントすることができます。
開始前に
永続データ・ストアを使用する前に、以下の前提条件が満たされていることを確認してください。
- IBM Cloud Object Storage。
- Object Storage インスタンスで利用可能なバケットが必要です。
- HMAC クレデンシャルを 有効にして、 Object Storage インスタンスのサービス・クレデンシャルを作成する必要があります。 HMAC クレデンシャルは、バケットからの読み込みとバケットへの書き込みを行うために、少なくとも Writer サービスアクセスロールを必要とします。 読み取りアクセスのみが必要な場合は、代わりにコンテンツリーダーサービスアクセスロールを選択してください。
- Code Engine プロジェクト が必要であり、それが現在のコンテキストとして選択されている必要があります。
ステップ 1: HMAC シークレットを Code Engine
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:永続データストアの作成
次に、 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:データストアをワークロードにマウントする
永続データストアを作成したら、アプリケーションやジョブを作成または更新するときに、そのデータストアをマウントできます。 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 ベースのファイル・システム・インタフェースを提供する 以下の制限に注意してください。
- パフォーマンス:
- Object Storage は、タイムトゥファーストバイトのレイテンシーが大きいため、即時アクセスが必要な操作ではローカルファイルシステムより遅くなる。
- ランダム書き込みや追加など、ファイルを変更する操作は、バックエンドでオブジェクト全体を書き換える必要がある。
- ディレクトリのリストアップのようなメタデータ操作は、パフォーマンスが低下する可能性がある。
- 一貫性:
- IBM Cloud Object Storage は、新しいオブジェクトに対しては強力な読み取り後書き込み一貫性を提供するが、オブジェクトの上書きと削除に対しては最終的な一貫性を提供する。 これは、更新や削除の後、読み取り操作が一時的に古いデータを返す可能性があることを意味する。
- マウントの外からバケットに加えられた変更(たとえば、COS APIや他のクライアントから直接)は、すぐには検出されず、しばらくの間表示されないかもしれません。
- ファイルシステムのセマンティクス:
- POSIX の標準ファイルシステム機能は完全にはサポートされていません。 具体的には、ファイルやディレクトリのアトミックなリネームや ハードリンクはない。
- 並行性:
- 同じバケットをマウントする複数のクライアント(例えば、複数のアプリインスタンス)間の連携はない。 異なるインスタンスから同じファイルへの同時書き込みは、データの損失や破損につながる可能性がある。
- イベントのサブスクリプション
- Object Storage バケットにイベントサブスクリプションを設定した場合、マウントによるファイル作成操作によって複数の更新イベントが発生する可能性があることに注意してください。 その結果、 Code Engine のアプリやジョブが、1つのファイル操作に対して複数回トリガーされることになり、ダウンストリーム処理やイベント駆動型ワークフローに影響を与える可能性があります。 これらの制限により、この機能はすべてのワークロードに適しているわけではない。 ディープラーニングやデータ分析など、主に大容量ファイルを読み込むワークロードに最適で、高いスループットを達成できる。 低レイテンシ、頻繁な少量の書き込み、トランザクショナルなファイル操作を必要とするワークロードには推奨されない。
次のステップ
永続データ・ストアの操作方法を理解したところで、さらに高度なトピックを探ります: