如何使用腾讯云 COS 桶作为 Pulumi 状态后端

Pulumi 可以用任意 s3 协议作为 状态后端 (State Backend),相对于使用 本地目录 作为 状态后端 而言,这样的好处是使用 持续集成 (CI) 执行 Pulumi 命令的时候,不会修改仓库文件,并且 状态文件 中的密码在 Git 仓库 内不可见

我自己实验了一个可行的流程,使用 腾讯云 COS 作为 Pulumi状态后端,并遵循了 最小权限原则

  1. 创建一个 COS 桶iac-state

  2. 创建一个 子账户,叫 bot-iac-state

  3. 使用自定义策略授权 子账户1111111111 改成对应的 腾讯云主账户 AppID

{
    "statement": [
        {
            "action": [
                "cos:GetService"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": [
                "cos:*"
            ],
            "effect": "allow",
            "resource": [
                "qcs::cos::uid/1111111111:iac-state-1111111111/*"
            ]
        }
    ],
    "version": "2.0"
}
  1. Pulumi.yml 中修改 backend.url1111111111 改成对应的 腾讯云主账户 AppID,桶内子路径可以自定义)
backend:
  url: 's3://iac-state-1111111111/any/sub/path?endpoint=cos.ap-guangzhou.myqcloud.com&s3ForcePathStyle=true&region=ap-guangzhou'
  1. 设置环境变量
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

之后,执行 pulumi pre / pulumi up 就可以用腾讯云的 COS 桶作为状态后端了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 首先,需要在腾讯云控制台中创建一个存储,并获取存储的信息,包括存储名称、访问密钥ID、访问密钥Secret、存储所在地域等。 2. 在PHP代码中,使用curl函数调用腾讯云COS API进行操作。具体步骤如下: (1)构造API请求的URL和参数。API请求的URL格式为:http://[bucket-name].cos.[region].myqcloud.com/[object],其中[bucket-name]为存储名称,[region]为存储所在地域,[object]为对象名称(可选)。 (2)生成API请求的签名。签名是用于验证请求合法性的关键信息,需要使用访问密钥ID和访问密钥Secret进行计算。计算签名的具体方法可以参考腾讯云COS API文档中的签名方法。 (3)发送API请求。使用curl函数发送API请求,并在请求头中设置Authorization等相关参数。 (4)处理API响应。根据API返回的HTTP状态码和响应内容进行相应的处理,例如上传文件、下载文件、删除文件等操作。 3. 示例代码如下: ```php // 存储信息 $bucket = "mybucket-1250000000"; $region = "ap-chengdu"; $accessKeyId = "AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $accessKeySecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // API请求参数 $object = "test.txt"; $url = "http://{$bucket}.cos.{$region}.myqcloud.com/{$object}"; $method = "PUT"; $httpHeaders = [ "Content-Type: text/plain", "Content-Length: 11", ]; $httpBody = "Hello World"; // 生成签名 $timestamp = time(); $expired = $timestamp + 3600; // 签名有效期1小时 $sign = md5("{$accessKeySecret}\n{$timestamp}\n{$expired}\n0\n"); $authorization = "q-sign-algorithm=sha1&q-ak={$accessKeyId}&q-sign-time={$timestamp};{$expired}&q-key-time={$timestamp};{$expired}&q-header-list=content-type;content-length&q-url-param-list=&q-signature={$sign}"; // 发送API请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders); curl_setopt($ch, CURLOPT_POSTFIELDS, $httpBody); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: {$authorization}", ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 处理API响应 if ($httpCode == 200) { echo "上传成功"; } else { echo "上传失败,错误码:{$httpCode}"; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农炎可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值