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

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

最終更新日:Mar 14, 2025

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

使用上の注意

  • このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID cn-hangzhou を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

CNAME トークンの作成

次のサンプルコードは、CNAME トークンを作成する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、CNAME トークンを作成する方法について説明します。
parser = argparse.ArgumentParser(description="create cname token sample")

# リージョン、バケット名、エンドポイント、カスタムドメイン名など、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--domain', help='カスタムドメイン名。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # 身元認証のためのアクセス認証情報を環境変数から取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが提供したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットの CNAME トークンを作成するリクエストを送信します。
    result = client.create_cname_token(oss.CreateCnameTokenRequest(
            bucket=args.bucket, # バケットの名前。
            bucket_cname_configuration=oss.BucketCnameConfiguration(
                cname=oss.Cname(
                    domain=args.domain, # カスタムドメイン名。
                ),
            ),
    ))

    # 操作結果のステータスコードとその他の関連情報を表示して、リクエストステータスと CNAME トークンの詳細を確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' cname: {result.cname_token.cname if hasattr(result.cname_token, "cname") else "Not set"},'
          f' token: {result.cname_token.token if hasattr(result.cname_token, "token") else "Not set"},'
          f' expire time: {result.cname_token.expire_time.strftime("%Y-%m-%dT%H:%M:%S.000Z") if hasattr(result.cname_token, "expire_time") else "Not set"},'
          f' bucket: {result.cname_token.bucket if hasattr(result.cname_token, "bucket") else "Not set"},'
          )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

CNAME トークンのクエリ

次のサンプルコードは、CNAME トークンをクエリする方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、CNAME トークンをクエリする方法について説明します。
parser = argparse.ArgumentParser(description="get cname token sample")

# リージョン、バケット名、エンドポイント、CNAME レコードなど、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--cname', help='バケットにマッピングされている CNAME レコードの名前。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # 身元認証のためのアクセス認証情報を環境変数から取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが提供したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットと CNAME レコードの CNAME トークンをクエリするリクエストを送信します。
    result = client.get_cname_token(oss.GetCnameTokenRequest(
            bucket=args.bucket, # バケットの名前。
            cname=args.cname, # カスタムドメイン名の CNAME レコードの名前。
    ))

    # 操作結果のステータスコードとその他の関連情報を表示して、リクエストステータスと CNAME トークンの詳細を確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' cname: {result.cname_token.cname if hasattr(result.cname_token, "cname") else "Not set"},'
          f' token: {result.cname_token.token if hasattr(result.cname_token, "token") else "Not set"},'
          f' expire time: {result.cname_token.expire_time.strftime("%Y-%m-%dT%H:%M:%S.000Z") if hasattr(result.cname_token, "expire_time") else "Not set"},'
          f' bucket: {result.cname_token.bucket if hasattr(result.cname_token, "bucket") else "Not set"},'
          )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

CNAME レコードの追加

次のサンプルコードは、カスタムドメインをバケットにマッピングするために使用される CNAME レコードを追加する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、カスタムドメインをバケットにマッピングするために使用される CNAME レコードを追加する方法について説明します。
parser = argparse.ArgumentParser(description="put cname sample")

# リージョン、バケット名、エンドポイント、カスタムドメイン名など、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--domain', help='カスタムドメイン名。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # 身元認証のためのアクセス認証情報を環境変数から取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが提供したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # SSL 証明書パラメータを指定し、SSL 証明書をカスタムドメイン名に関連付けます。
    cert_id='493****-cn-hangzhou ' # SSL 証明書の ID。
    certificate = '''-----BEGIN CERTIFICATE-----
MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC
**** -----END CERTIFICATE-----''' # SSL 証明書のコンテンツ。
    private_key = '''-----BEGIN CERTIFICATE-----
MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC
**** -----END CERTIFICATE-----''' # 秘密鍵のコンテンツ。
    previous_cert_id='493****-cn-hangzhou ' # 元の SSL 証明書の ID。
    force = True # 元の SSL 証明書を強制的に上書きします。

    # カスタムドメインをバケットにマッピングするために使用される CNAME レコードを追加し、SSL 証明書をカスタムドメイン名に関連付けるリクエストを送信します。
    result = client.put_cname(oss.PutCnameRequest(
            bucket=args.bucket, # バケットの名前。
            bucket_cname_configuration=oss.BucketCnameConfiguration(
                cname=oss.Cname(
                    domain=args.domain, # カスタムドメイン名。
                    certificate_configuration=oss.CertificateConfiguration(
                        certificate=certificate, # SSL 証明書のコンテンツ。
                        private_key=private_key, # 秘密鍵のコンテンツ。
                        previous_cert_id=previous_cert_id, # 元の SSL 証明書の ID。
                        force=force,  # 元の SSL 証明書を強制的に上書きします。
                        cert_id=cert_id, # 新しい SSL 証明書の ID。
                    ),
                ),
            ),
    ))

    # 操作結果のステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

    """
    # オプション。 SSL 証明書を削除する場合は、次のコードの説明を削除してください。
    result = client.put_cname(oss.PutCnameRequest(
            bucket=args.bucket,
            bucket_cname_configuration=oss.BucketCnameConfiguration(
                cname=oss.Cname(
                    domain=args.domain,
                    certificate_configuration=oss.CertificateConfiguration(
                        delete_certificate=True, # SSL 証明書を削除します。
                    ),
                ),
            ),
    ))
    """

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

CNAME レコードのリスト表示

次のサンプルコードは、バケットの CNAME レコードをリスト表示する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、バケットの CNAME レコードをリスト表示する方法について説明します。
parser = argparse.ArgumentParser(description="list cname sample")

# リージョン、バケット名、エンドポイントなど、コマンドラインパラメータを指定します。 endpoint パラメータはオプションです。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')

def main():
    # コマンドラインパラメータを解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # 身元認証のためのアクセス認証情報を環境変数から取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが提供したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # バケットの CNAME レコードをリスト表示するリクエストを送信します。
    result = client.list_cname(oss.ListCnameRequest(
            bucket=args.bucket, # バケットの名前。
    ))

    # 操作結果のステータスコード、リクエスト ID、およびその他の関連情報を表示して、リクエストステータスと CNAME レコードを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' bucket: {result.Bucket},' # バケットの名前。
          f' owner: {result.owner},' # バケットの所有者。
          )

    # CNAME レコードが存在する場合は、各 CNAME レコードの詳細を走査して表示します。
    if result.cnames:
        for r in result.cnames:
            # CNAME レコードのドメイン名、最終更新時刻、ステータス、および SSL 証明書情報 (存在する場合) を表示します。
            certificate_info = (f"fingerprint: {r.certificate.fingerprint}, "
                                f"valid start date: {r.certificate.valid_start_date}, "
                                f"valid end date: {r.certificate.valid_end_date}, "
                                f"type: {r.certificate.type}, "
                                f"cert id: {r.certificate.cert_id}, "
                                f"status: {r.certificate.status}, "
                                f"creation date: {r.certificate.creation_date}") if r.certificate else "証明書なし"
            print(f'domain: {r.domain}, '
                  f'last modified: {r.last_modified}, '
                  f'status: {r.status}, '
                  f'certificate: {certificate_info}'
                  )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

CNAME レコードの削除

次のサンプルコードは、カスタムドメインをバケットにマッピングするために使用される CNAME レコードを削除する方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、カスタムドメインをバケットにマッピングするために使用される CNAME レコードを削除する方法について説明します。
parser = argparse.ArgumentParser(description="delete cname sample")

# リージョン、バケット名、エンドポイント、カスタムドメイン名など、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--domain', help='カスタムドメイン名。', required=True)

def main():
    # コマンドラインパラメータを解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # 身元認証のためのアクセス認証情報を環境変数から取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが提供したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # CNAME レコードを削除するリクエストを送信します。
    result = client.delete_cname(oss.DeleteCnameRequest(
            bucket=args.bucket, # バケットの名前。
            bucket_cname_configuration=oss.BucketCnameConfiguration(
                cname=oss.Cname(
                    domain=args.domain, # カスタムドメイン名。
                ),
            ),
    ))

    # 操作結果のステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。

参照

  • ドメイン所有権検証のために CNAME トークンを作成するために使用される完全なサンプルコードについては、create_cname_token.py をご覧ください。

  • CNAME トークンをクエリするために使用される完全なサンプルコードについては、get_cname_token.py をご覧ください。

  • CNAME レコードを追加するために使用される完全なサンプルコードについては、put_cname.py をご覧ください。

  • CNAME レコードをリスト表示するために使用される完全なサンプルコードについては、list_cname.py をご覧ください。

  • CNAME レコードを削除するために使用される完全なサンプルコードについては、delete_cname.py をご覧ください。