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

Object Storage Service:カスタムドメイン名マッピングの使用

最終更新日:Aug 06, 2025

オブジェクトが Object Storage Service (OSS) バケットにアップロードされると、バケットのパブリックエンドポイントが組み込まれた URL が自動的に生成されます。カスタムドメイン名でこれらのオブジェクトにアクセスするには、CNAME レコードを追加して、カスタムドメイン名をオブジェクトが格納されているバケットにマッピングする必要があります。

注記

  • 同じリージョン内の他の Alibaba Cloud サービスからバケット内のリソースにアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

サンプルコード

CNAME トークンの生成

CNAME トークンを生成するためのサンプルコードは次のとおりです。

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// CNAME トークンを生成するために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\CreateCnameTokenRequest(
    bucket: $bucket, // バケットの名前。
    bucketCnameConfiguration: new Oss\Models\BucketCnameConfiguration(
        cname: new Oss\Models\Cname(
            domain: 'example.com' // カスタムドメイン名。
        )
    )
);

// createCnameToken メソッドを呼び出して CNAME トークンを生成します。
$result = $client->createCnameToken($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId . PHP_EOL .   // リクエストの一意の ID。
    'cname token:' . var_export($result->cnameToken, true) . PHP_EOL // 生成された CNAME トークン。
);

CNAME トークンのクエリ

CNAME トークンをクエリするためのサンプルコードは次のとおりです。

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// CNAME トークンをクエリするために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\GetCnameTokenRequest(
    bucket: $bucket, // バケットの名前。
    cname: 'example.com' // カスタムドメイン名。
);

// getCnameToken メソッドを呼び出して CNAME トークンをクエリします。
$result = $client->getCnameToken($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId . PHP_EOL .   // リクエストの一意の ID。
    'cname token:' . var_export($result->cnameToken, true) . PHP_EOL // 取得した CNAME トークン。
);

CNAME レコードの構成

カスタムドメイン名マッピング

<?php

// 依存関係ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client(config: $cfg);

// カスタムドメイン名をバケットにマッピングするために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\PutCnameRequest(
    bucket: $bucket, // バケットの名前。
    bucketCnameConfiguration: new Oss\Models\BucketCnameConfiguration(
        cname: new Oss\Models\Cname(
            domain: 'example.com' // カスタムドメイン名。
        )
    )
);

// putCname メソッドを呼び出してカスタムドメイン名をマッピングします。
$result = $client->putCname($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId               // リクエストの一意の ID。
);

カスタムドメイン名マッピングと証明書の関連付け

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

$request = new Oss\Models\PutCnameRequest(
    bucket: $bucketName, // バケットの名前。
    bucketCnameConfiguration: new Oss\Models\BucketCnameConfiguration(
        cname: new Oss\Models\Cname(
            domain: 'www.example.com', // カスタムドメイン名を指定します。
            certificateConfiguration: new Oss\Models\CertificateConfiguration(
                force: true, // 証明書を強制的に上書きするかどうかを指定します。
                certId: '92******-cn-hangzhou', // 証明書 ID を指定します。
                certificate: '-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERT', // 証明書の内容を指定します。
                privateKey: '-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----' // 秘密鍵の内容を指定します。
            )
        )
    )
);

// putCname メソッドを呼び出して、カスタムドメイン名をバケットにマッピングします。
$result = $client->putCname($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId               // リクエストの一意の ID。
);

証明書の関連付けの解除

証明書が不要になった場合は、ドメイン名から証明書の関連付けを解除できます。

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// 証明書の関連付けを解除するために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\PutCnameRequest(
    bucket: $bucketName, // バケットの名前。
    bucketCnameConfiguration: new Oss\Models\BucketCnameConfiguration(
        cname: new Oss\Models\Cname(
            domain: 'www.example.com', // カスタムドメイン名を指定します。
            certificateConfiguration: new Oss\Models\CertificateConfiguration(
                deleteCertificate: true // 証明書の関連付けを解除します。
            )
        )
    )
);

// putCname メソッドを呼び出して、カスタムドメイン名をバケットにマッピングします。
$result = $client->putCname($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId               // リクエストの一意の ID。
);

CNAME レコードの一覧表示

バケットに関連付けられている CNAME レコードを一覧表示するためのサンプルコードは次のとおりです。

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// バケットにマッピングされているカスタムドメイン名を一覧表示するために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\ListCnameRequest(
    bucket: $bucket // バケットの名前。
);

// listCname メソッドを呼び出して、バケットにマッピングされているカスタムドメイン名を一覧表示します。
$result = $client->listCname($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId . PHP_EOL .   // リクエストの一意の ID。
    'cnames:' . var_export($result->cnames, true) . PHP_EOL // バケットにマッピングされているカスタムドメイン名のリスト。
);

CNAME レコードの削除

CNAME レコードを削除するためのサンプルコードは次のとおりです。

<?php

// 依存関係ライブラリをロードするために、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスから OSS にアクセスするためのエンドポイントを定義します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) ターゲットバケットを名前で識別します。
];

// コマンドライン引数を解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの後に続くコロン (:) は、パラメーターが必須であることを示します。
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターを検証します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが構成されていないことを指定します。
        exit(1);
    }
}

// コマンドライン引数の値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数から AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// CNAME レコードを削除するために必要なパラメーターを使用してリクエストオブジェクトを作成します。
$request = new Oss\Models\DeleteCnameRequest(
    bucket: $bucket, // バケットの名前。
    bucketCnameConfiguration: new Oss\Models\BucketCnameConfiguration(
        cname: new Oss\Models\Cname(
            domain: 'example.com' // 削除する CNAME レコード。
        )
    )
);

// deleteCname メソッドを呼び出して CNAME レコードを削除します。
$result = $client->deleteCname($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId               // リクエストの一意の ID。
);

関連情報

関連 API の詳細については、以下のトピックをご参照ください。