You need to enable JavaScript to run this app.
导航

管理镜像回源(C++ SDK)

最近更新时间2024.02.04 18:31:04

首次发布时间2023.01.29 15:35:46

镜像回源主要用于数据无缝迁移到 TOS 的场景。例如 Web 服务已经在您自建的源站或者在其他云产品上运行,现需要将服务迁移至 TOS,您可以在迁移过程中使用镜像回源规则获取未迁移至 TOS 的部分数据,可以保证迁移时服务的正常运行。

设置镜像回源规则

注意

  • 要为桶设置镜像回源规则,您必须为桶所有者。
  • 一个存储桶仅支持创建一条回源规则。
  • 镜像回源最大能够支持 5GiB 的对象。如果需要请求超过 5GiB 的对象,请使用范围下载功能。
  • 重定向回源最大能够支持 300GiB。

示例代码

以下代码用于设置指定桶 examplebucket 的镜像回源规则。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 设置桶的镜像回源
    PutBucketMirrorBackInput input(bucketName);
    // 设置镜像回源规则 rule1
    MirrorBackRule rule1;
    // 设置镜像回源 Condition: 触发回源规则的错误码,目前只支持 404
    auto condition = rule1.getCondition();
    condition.setHttpCode(404);
    rule1.setCondition(condition);
    
    // 设置镜像回源 Redirect:
    auto redirect = Redirect();
    // 指定跳转的类型。
    redirect.setRedirectType(RedirectType::RedirectMirror);
    // 指定镜像回源的源站地址。例如https://www.example.com/。
    SourceEndpoint endpoint;
    endpoint.setPrimary({"https://www.example.com/"});
    endpoint.setFollower({"https://www.example.com/"});
    PublicSource publicSource(endpoint);
    redirect.setPublicSource(publicSource);
    
    // 执行跳转时是否携带请求参数  
    redirect.setPassQuery(true);
    // 镜像回源结果是 3XX 时, 是否跳转到 Location 获取数据
    redirect.setFollowRedirect(true);
    // 重定向后是否去配置源站拉取数据
    redirect.setFetchSourceOnRedirect(true);
    
    // 设置MirrorHeader,表示允许和禁止透传哪些Header到源站
    // 是否透传除以下Header之外的其他Header到源站。只有设置RedirectType为Mirror时生效。
    MirrorHeader mirrorHeaders;
    mirrorHeaders.setPassAll(false);
    // 透传指定的Header到源站。只有设置RedirectType为Mirror时生效。
    mirrorHeaders.setPass({"header-1", "header-2"});
    // 禁止透传指定的Header到源站。只有设置RedirectType为Mirror时生效。
    mirrorHeaders.setRemove({"header-3", "header-4"});
    redirect.setMirrorHeader(mirrorHeaders);
    
    // 设置镜像回源规则。
    std::vector<MirrorBackRule> rules{rule1};
    input.setRules(rules);
    
    auto output = client.putBucketMirrorBack(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "PutBucketMirrorBack failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    std::cout << "PutBucketMirrorBack success." << std::endl;
    
    // 释放网络等资源
    CloseClient();
    return 0;
}

获取镜像回源规则

注意

要获取桶的镜像回源规则,您必须为桶所有者。

示例代码

以下代码用于获取指定桶 examplebucket 的镜像回源规则。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 获取桶的镜像回源配置
    GetBucketMirrorBackInput input(bucketName);
    auto output = client.getBucketMirrorBack(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "GetBucketMirrorBack failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }

    // 打印桶的镜像回源配置
    auto mirrorBackRules= output.result().getRules();
    for (auto& rule : mirrorBackRules){
        // 打印规则 ID
        std::cout << "rule:" << rule.getId() << std::endl;

        // 打印 conditon,查看触发回源规则的错误码,目前只支持 404
        auto conditon = rule.getCondition();
        std::cout << "http code conditon:" << conditon.getHttpCode() << std::endl;

        // 打印 redirect,查看回源规则跳转类型、重定向后是否去配置源站拉取数据、执行跳转时是否携带请求参数、镜像回源结果是 3XX 时, 是否跳转到 Location 获取数据
        auto redirect = rule.getRedirect();
        std::cout << "redirect:" << redirect.getStringFormatRedirectType() << "," << redirect.isFetchSourceOnRedirect() << "," <<
                redirect.isPassQuery() << "," <<  redirect.isFollowRedirect() << std::endl;

        // 打印 mirrorHeader,查看是否透传全部 HTTP HEADER 到源端、透传和禁止透传的 HEADER
        auto mirrorHeader = redirect.getMirrorHeader();
        std::cout << "redirect-mirrorHeader:" << mirrorHeader.isPassAll() << std::endl;
        std::cout << "redirect-mirrorHeader-pass:" << std::endl;
        for(auto& pass : mirrorHeader.getPass()){
            std::cout << pass << std::endl;
        }
        std::cout << "redirect-mirrorHeader-remove:" << std::endl;
        for(auto& remove : mirrorHeader.getRemove()){
            std::cout << remove << std::endl;
        }
        // 打印可访问的源端地址
        auto publicSource = redirect.getPublicSource();
        auto sourceEndpoint = publicSource.getSourceEndpoint();
        std::cout << "redirect-publicSource-sourceEndpoint:" << std::endl;
        std::cout << "redirect-publicSource-sourceEndpoint-primary:" << std::endl;
        for(auto& primary : sourceEndpoint.getPrimary()){
            std::cout << primary << std::endl;
        }
        std::cout << "redirect-publicSource-sourceEndpoint-follower:" << std::endl;
        for(auto& follower : sourceEndpoint.getFollower()){
            std::cout << follower << std::endl;
        }
    }

    // 释放网络等资源
    CloseClient();
    return 0;
}

删除桶的镜像回源规则

注意

要删除桶的镜像回源规则,您必须为桶所有者。

示例代码

以下代码用于删除指定桶 examplebucket 的镜像回源规则。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 删除桶的镜像回源配置
    DeleteBucketMirrorBackInput input(bucketName);
    auto output = client.deleteBucketMirrorBack(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "DeleteBucketMirrorBack failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    std::cout << "DeleteBucketMirrorBack success." << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}

相关文档

关于镜像回源的更多信息,请参见设置回源规则