すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:リクエスト元による支払い

最終更新日:Nov 04, 2024

Object Storage Service (OSS) のバケットに対してpay-by-requesterが有効になっている場合、バケット所有者ではなく、要求者にリクエストとトラフィック料金が請求されます。 バケット所有者には、ストレージ料金のみが請求されます。 バケットのpay-by-requesterを有効にして、バケットへのアクセスによって発生したリクエストとトラフィック料金を支払うことなく、バケット内のデータを共有できます。

pay-by-requesterの有効化

次のコードは、バケットのpay-by-requesterを有効にする方法の例を示しています。

const OSS = require('ali-oss')

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of your bucket.
  bucket: 'yourBucketName',

});

async function setBucketRequestPayment(bucket, Payer) {
  try {
    // Specify the name of the bucket for which you want to enable pay-by-requester. 
    // Set Payer to Requester or BucketOwner. 
    // If Payer is set to Requester, pay-by-requester is enabled for the bucket. The requester is charged the traffic and request fees that are generated when the requester reads data in the bucket. 
    // If Payer is set to BucketOwner, pay-by-requester is disabled for the bucket. This is the default configuration for the bucket. In this case, the bucket owner is charged the generated request fees. 
    const result = await client.putBucketRequestPayment(bucket, Payer);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

setBucketRequestPayment('bucketName', 'Requester')

pay-by-requester設定の照会

次のコードは、バケットのpay-by-requester設定を照会する方法の例を示しています。

const OSS = require('ali-oss')

const client = new OSS({
   // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of your bucket.
  bucket: 'yourBucketName',
});

async function getBucketRequestPayment(bucket) {
  try {
    // Query the pay-by-requester configurations of the bucket. 
    const result = await client.getBucketRequestPayment(bucket);
    console.log(result.payer);
  } catch (e) {
    console.log(e);
  }
}

getBucketRequestPayment('bucketName')

サードパーティがオブジェクトにアクセスするときに課金されることを指定します

バケット内のオブジェクトへのアクセスに対してサードパーティが課金されるように指定した場合、リクエスト元はHTTPリクエストにx-oss-request-payer:requesterヘッダーを含めて、オブジェクトに対する操作を実行する必要があります。 このヘッダーが含まれていない場合は、エラーが返されます。

次のコードでは、サードパーティがPutObject、GetObject、およびDeleteObjectリクエストのオブジェクトにアクセスするときに課金されるように指定する方法の例を示します。 サードパーティが他のリクエストのオブジェクトに対して同様の方法で読み取りおよび書き込み操作を実行するときに、サードパーティが課金されるように指定できます。

次のコードでは、サードパーティがオブジェクトにアクセスするときに課金されるように指定する方法の例を示します。

const OSS = require('ali-oss');
const bucket = 'bucket-name';
const payer = 'Requester';

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of your bucket.
  bucket: 'yourBucketName',

});

async function main() {
  await put();
  await get();
  await del();
}

async function put() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // Specify the payer when a third party calls the PutObject operation. 
  const response = await client.put('fileName', path.normalize('D:\\localpath\\examplefile.txt'), {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('put:', response);
}

async function get() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // Specify the payer when a third party calls the GetObject operation. 
  const response = await client.get('fileName', {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('get:', response);
}

async function del() {
  const result = await client.putBucketRequestPayment(bucket, payer);
  console.log('putBucketRequestPayment:', result);
  // Specify the payer when a third party calls the DeleteObject operation. 
  const response = await client.delete('fileName', {
    headers: {
      'x-oss-request-payer': 'requester'
    }
  });
  console.log('delete:', response);
}

main();

関連ドキュメント

  • pay-by-requesterの設定に使用する完全なサンプルコードについては、GitHubをご覧ください。

  • pay-by-requesterを有効にするために呼び出すことができるAPI操作の詳細については、「PutBucketRequestPayment」をご参照ください。

  • pay-by-requester設定を照会するために呼び出すことができるAPI操作の詳細については、「GetBucketRequestPayment」をご参照ください。