コンテンツへスキップ
HexaTransfer
ブログへ戻る
クラウドとストレージ

マルチクラウドのファイル管理:ベンダーロックインを回避

複数クラウドプロバイダーにまたがるファイルを管理し、ベンダーロックインを回避しながらコスト最適化と一貫したアクセスを実現する方法を解説します。

マルチクラウドのファイル管理は、データを2つ以上のプロバイダー(AWS S3・Cloudflare R2・Backblaze B2など)に保存し、それらのいずれかを特定のファイルの有効な置き場所として扱う単一の抽象化の背後に隠します。実際のメリットはベンダー障害に対するヘッジ、契約更新時の交渉力、そしてワークロードに応じた最適なプロバイダーを選ぶことによるEgressコストのほぼゼロ化です。技術的な要素:共通語としてのS3互換API、ポータブルクライアントとしてのrcloneまたはMinIO Gateway、どのプロバイダーが各オブジェクトを保持しているかを記録するメタデータインデックス(PostgresまたはDynamoDB互換)、HashiCorp VaultまたはAWS Secrets Manager経由のCI強制可能な認証情報インベントリです。

ロックインが実際にかかるコスト

ロックインはめったに1つの巨額の請求になりません。100の小さな摩擦です。コードがaws s3 cpを使い、us-east-1をハードコードし、S3 Selectに依存し、DynamoDBストリームに頼ると、移行は書き直しになります。Egressコストが最も目に見えるコストです。AWSは最初の10TBで1GBあたり0.09ドルを課金します。50TBをAWSから移動するには帯域幅だけで約4,000ドルかかり、エンジニアの工数は別です。

気づきにくいもの:Glacier vault lock・S3イベントのLambdaトリガー・IAM Access Analyzerなどの独自機能もすべて移行プロジェクトになります。マルチクラウドはすべてのクラウドですべてのものを使うことではありません。出口を開けておくことで、価格と信頼性が正直に保たれます。

共通基盤としてのS3互換API

現在ほぼすべてのオブジェクトストレージプロバイダーがS3 APIを話します。AWS・Backblaze B2・Cloudflare R2・Wasabi・Google Cloud Storage(相互運用モード)・Azure Blob(サードパーティゲートウェイ経由)・セルフホステッドのMinIOまたはCeph RGW。これは1つのSDKですべてをカバーできることを意味します。

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
const r2 = new S3Client({
  region: 'auto',
  endpoint: 'https://account.r2.cloudflarestorage.com',
  credentials: { accessKeyId, secretAccessKey }
});
await r2.send(new PutObjectCommand({
  Bucket: 'transfers', Key: 'file.zip', Body: stream
}));

S3 APIサブセット(PUT・GET・LIST・DELETE・マルチパート・事前署名URL)に固執することで完全な移植性を得られます。すべてのバックエンドでその機能に対応する計画がない限り、s3:GetObjectLegalHoldのようなプロバイダー固有の呼び出しは避けてください。

ルーターでプロバイダーを抽象化する

論理パスを物理バケットにマッピングする小さなルーターを構築してください。コードでは1つの関数です。

interface Store { put(key, stream); get(key); delete(key); }
class MultiCloudRouter implements Store {
  constructor(private index: Index, private stores: Record<string, Store>) {}
  async put(key: string, stream: ReadableStream) {
    const provider = chooseProvider(key);
    await this.stores[provider].put(key, stream);
    await this.index.record(key, provider);
  }
  async get(key: string) {
    const provider = await this.index.lookup(key);
    return this.stores[provider].get(key);
  }
}

chooseProviderはポリシー駆動にできます。リージョンアフィニティ・コスト層・レプリケーション要件・プロバイダー間のシンプルなラウンドロビンなど。インデックス(PostgresのテーブルまたはDynamoDB)がオブジェクトの場所の唯一の正とします。

プロバイダー間のコスト最適化

価格は大きく異なります。

  • AWS S3 Standard:0.023ドル/GBストレージ、0.09ドル/GBのEgress
  • Cloudflare R2:0.015ドル/GBストレージ、Egressゼロ
  • Backblaze B2:0.006ドル/GBストレージ、0.01ドル/GBのEgress
  • Wasabi:0.0069ドル/GBストレージ、Egress無料(月間保存量の1倍まで)
  • AWS S3 Glacier Deep Archive:0.00099ドル/GBストレージ、0.02ドル/GBのEgress+取り出し料金

賢いルーティングポリシー:

  • ユーザー向けダウンロード:R2(Egressゼロがここでは圧倒的に有利)
  • コールドアーカイブ:S3 Glacier Deep Archive
  • リージョナル冗長性:B2(安価・信頼性高・AWSとは異なる企業リスクプロファイル)
  • 長期保持のコンプライアンスコピー:Object Lock付きWasabi

月50TBのアウトバウンドを処理するファイル転送サービスでは、EgressをS3からR2に切り替えるだけで、他の何もする前に月450万円の節約になります。

プロバイダー間でのデータ同期

レプリケートしたい重要なデータには、rcloneのsyncまたはbisyncを使ってください。

rclone sync r2:transfers b2:transfers-mirror --transfers 16 --checksum

継続的なレプリケーションには、AWS S3クロスリージョンレプリケーション(Lambda経由で外部ターゲットをサポート)またはキューベースのレプリケーター:すべてのPUTをSQS/Kafkaにポストし、コンシューマーがキューから読んでセカンダリプロバイダーに書き込みます。最終整合性で、RPOは数分です。

すべてをレプリケートしないでください。再作成できないものだけレプリケートしてください。ユーザーがアップロードしたバイトはレプリケートすべきですが、ビルドアーティファクトはおそらく不要で、ウェアハウスにも存在する分析ログは確実に不要です。

落とし穴のない認証情報管理

マルチクラウドはより多くの認証情報を意味し、認証情報の漏洩が侵害を引き起こします。2つのプラクティス:

  • 一元化されたシークレットストア:HashiCorp Vault・AWS Secrets Manager・Google Secret Manager。Gitに鍵を絶対にコミットしない。CI/CDでgitleaksでスキャンする。
  • 短命なスコープ付きトークン:永続的なアクセスキーよりSTSトークンを優先する。各認証情報を1つのバケットと必要最小限の動詞にスコープする。

長期間の鍵は90日スケジュールで自動ローテーション、STSは1時間。すべての鍵にownerpurposeexpiryをタグ付けしてください。月次で孤立した鍵をレビューしてください。

統合モニタリングとロギング

プロバイダー間の可観測性は、個々のプロバイダー内よりも重要です。すべてのプロバイダーのアクセスログを単一のシンクに送信してください。

  • S3サーバーアクセスログ → CloudWatch → OpenSearch
  • R2アクセスログ → Cloudflare Logpush → S3 → OpenSearch
  • B2イベント通知 → webhooks → Loki

統合ダッシュボードに表示すべき内容:プロバイダーごとのリクエスト数・エラー率・p99レイテンシ・バケットごとのEgressバイト数・ほぼリアルタイムのコスト発生。いずれかのプロバイダーが予測される日次Egressの2倍を超えたときにアラートを設定してください(漏洩した事前署名URLまたはスクレイパーの良いシグナル)。

マルチクラウド下でのガバナンスとコンプライアンス

マルチクラウドはコンプライアンスの表面積を倍増させます。すべてのプロバイダーは独自のデータ処理契約・サブプロセッサーレビュー・監査証跡が必要です。実用的なステップ:

  • 各データ分類(public・internal・confidential・restricted)を許可されるプロバイダーにマッピングする
  • 居住地を文書化する:GDPR第44条に基づくEU外へのデータ移転には有効なメカニズム(SCC・十分性認定)が必要。EU対象のデータはR2のEUリージョンまたはOVH Object Storageに保持する。個人情報保護法(APPI)の観点でも海外への第三者提供には本人同意または例外要件を確認する。
  • サブプロセッサーを追跡する。プロバイダーが新しいサブプロセッサーを追加した場合、GDPR第28条2項に基づく顧客通知が必要になる場合がある。
  • プライマリプロバイダーから監査ログをレプリケートする。CloudTrailを落とすAWSインシデントが監査履歴まで持ち去ってはいけない。

必要になる前に出口計画を作る

信頼できる出口計画には3つの部分があります。すべての依存関係のインベントリ・テスト済みの移行スクリプト・Egressの予算。インベントリにはコード・IaC(プロバイダー固有リソースにピン留めされたTerraformモジュール)・IAMポリシー・バケット・CDNオリジン設定が含まれます。移行スクリプトは腐らないよう四半期ごとにドライランモードで実行可能であるべきです。Egressの予算:移行中に再処理する可能性があるため、保存容量の1.2倍を計画してください。

プロバイダーを実際に変更しなくても、訓練された計画の存在が契約更新交渉に重みを持たせ、予期せぬ価格上昇やサービス変更がチームを麻痺させません。

HexaTransferは特にプロバイダーの選択肢を開けておくためにS3互換ストレージレイヤーで動作しています。大きなファイルを移動するすべてのチームに等しく有効な戦略です。hexatransfer.com で試せます — 無料、アカウント不要、最大10GB。

マルチクラウドがオーバーキルになる場合

マルチクラウドは無料ではありません。エンジニアリングの複雑さ・重複したツール・運用の表面積というコストを払います。エンジニアが10人未満でプロダクトが1つのチームには、1つのプロバイダーを選び、ボリューム価格を交渉し、節約できた複雑さをプロダクトに投資してください。マルチクラウドは3つの閾値のいずれかを超えた時点でコストに見合います。コンプライアンスが複数の管轄区域にわたるデータ居住地を要求する、信頼性がプロバイダーレベルの冗長性(単なるリージョンではなく)を要求する、または調達のレバレッジが単一ベンダーに対してビジネス上重要である場合です。これらの閾値以下では、クリーンな抽象化レイヤーと文書化された出口計画を持つシングルクラウドが通常は実用的な選択です。

エンドツーエンド暗号化で大容量ファイルを安全に送信

エンドツーエンド暗号化で最大10GBのファイルを無料で転送。アカウント不要。ファイルはアップロード前にブラウザで暗号化されるため、他の誰にも読まれません。

ファイルを送信