S3やGCSのデータ転送やリクエストにかかる費用の取り扱いオプション
今やなくてはならないクラウドストレージ
クラウドストレージは、今や生活になくてはならないものになりました。
Google Drive / Dropbox / OneDriveといったSaaSはもちろんですし、AWSのAmazon S3やGoogle Cloud Storage (GCS) のようなIaaS (見方によってはPaaSとも言えるかもしれません) も含めて、大容量ストレージはクラウドに置いておくというのが当たり前になってきたように思います。
特にS3については、非エンジニアに対しても「S3」で伝わるシチュエーションも多いくらい浸透しているように思います。
なんといっても名付けが良い!Simple Storage ServiceでS3って天才的ネーミングだと思います。
実は、そのS3やGCSでデータ共有を行う際、データ転送やリクエストについては要求している側に料金を負担させることが出来るって知ってました?
よく使っている方にとっては常識かもしれませんが、日頃使う機会がなければなかなか知ることがない話かもしれませんので、今回はそのあたりについてまとめてみます。
要求元による支払い(S3: AWS編)
まずAmazon S3からです。
公式ドキュメントは「ストレージ転送と使用量のリクエスタ支払いバケットの使用」です。
「リクエスタ支払い」 が日本語での正式名称です。
公式ドキュメントに
リクエスタ支払いバケットの場合、リクエストおよびバケットからのデータのダウンロードにかかるコストは、所有者でなくリクエストを実行したリクエスタが支払います。データの保管にかかるコストは常にバケット所有者が支払います。
とあるとおり、リクエストとデータ転送にかかる費用が要求元に請求する対象となります。
設定の場所
コンソール画面から設定する場合は、
バケットページの「プロパティ」から…
たしかにリクエスタ支払いの項目があります。
使用する上でのポイント
リクエスタ支払いにおけるポイントは
リクエスタ支払いバケットに関するリクエストはすべて認証する必要があります。リクエストの認証により、Amazon S3 はリクエスタを特定し、リクエスタ支払いバケットの使用に対して課金できるようになります。
ということで
「リクエスタはリクエストとデータダウンロードに対して課金されることを理解している旨を示す」ために、「リクエスタが DELETE、GET、HEAD、POST、PUT リクエストの API リクエストにヘッダーとして x-amz-request-payer
を含めるか、REST リクエストに RequestPayer
パラメータを追加する必要があります。」
たしかにパラメータで明示していないと、予期せぬ課金に繋がりますからね。
ちなみに「Amazon S3 の料金」ページを参照すると、2024年11月時点でS3標準の東京リージョンのデータ転送送信料金は最初の10TB/月に対して $0.114/GB = $114/TB となります。
150TB/月以上の場合でも $0.084/GB = $84/TB ですので、特に大きな容量のファイルを転送する場合には意外とバカにならないものかもしれません。
要求元による支払い(GCS: Google Cloud編)
公式ドキュメントは 「リクエスト元による支払い | Cloud Storage」および「リクエスト元による支払いを使用する | Cloud Storage」です。
こちらの正式名称は 「リクエスト元による支払い」 となります。
こちらも
オペレーション、レプリケーション、データ取得に対するデータ処理料金 データの読み取りに関するネットワーク料金
とあるとおり、転送料金とデータ処理料金が対象です。
データ処理料金というのは、「データ処理」の公式ドキュメントを参照すると、オブジェクトのリストやらコピー、ストレージクラス移行といったリクエストの料金のことなので、大差はないかと思います。
設定の場所
コンソール画面においては、バケットの「構成」のページに「リクエスト元による支払い」の項目があります。
この項目だけ、編集用のペンシルマークではなくそのまま押下してオン・オフを切り替える仕組みになっています。
使用する上でのポイント
こちらについても、公式ドキュメント「リクエスト元による支払いバケットにアクセスする」の項目のとおり、請求先プロジェクト情報をあわせて送信する必要があります。
CLIの場合は下記のような形ですね。
gcloud storage cp gs://BUCKET_NAME/OBJECT_NAME SAVE_TO_LOCATION --billing-project=PROJECT_IDENTIFIER
「料金 | Cloud Storage」ページによるとネットワーク使用量は最初の1TBで$0.12/GB、10TB移行は$0.08/GBと、AWSと大きくは値付けが変わらないですが、GCSのほうが多く利用すればするほど得かもしれません。
ただ、やはり、こちらも大きな量を転送すると意外なコストになりそうです。
まとめ
今回はトリビア的な内容として、S3やGCSのデータ転送およびリクエストの料金は要求元に負担させることが出来るという話でした。
知っている人にとっては常識なのかもしれませんが、使うことがなかったら知ることがない機能とも言えるのかもしれません。まあ、トリビアというのはそういうものですが…
ライフサイクルオプションとかもそうですが、意外とストレージサービスはチューニングの余地があったりして、コスト削減に繋がることも多いので、しっかり見直す機会を設けることは重要かもしれませんね。
利用開始が簡単なので、適当に作って放置してます、みたいなものも多いかと思いますので、ぜひこれを機に見直してみてはいかがでしょうか。