开发者社区 问答 正文

Terraform 中想使用 backend "oss" ,报错

根据terraform推荐的配置了oss,但是由于我的上网是通过代理服务器的。在terraform init时候,别的插件都能下载成功。但是在验证我创建的 oss 时候 报链接不上的错。

原来用ossutil创建oss时候也是 需要设定proxy,但是terraform自身的proxy是设定了的。

https://www.terraform.io/docs/backends/types/oss.html

Error: failed to get existing workspaces : Get https://bucketname.oss-regionname.aliyuncd.com/?encoding-tyoe=url&prefix=env%3a%2f: dial tcp XXXX:443 connectex: a connnection attempt failed because the connect prrty did not properly respond after a period of time

展开
收起
游客yytzkqrvsamrs 2020-09-04 10:44:05 845 分享 版权
阿里云 AI 助理回答

遇到这个问题,看起来是Terraform在尝试与阿里云OSS进行通信时,没有正确使用代理服务器设置。尽管Terraform支持配置HTTP(S)代理,但特定的后端插件(如OSS后端)可能需要直接或通过其他方式指定代理设置。

解决方案

  1. 环境变量配置: 确保你的环境已经设置了标准的HTTP(S)代理环境变量,这些对Terraform本身和很多外部命令都是有效的:

    • http_proxy=http://your-proxy-server:port
    • https_proxy=https://your-proxy-server:port 如果你的代理需要身份验证,格式应为:http://username:password@your-proxy-server:port
  2. Terraform CLI代理设置: Terraform CLI允许你通过CLI配置文件或者直接在命令行中设置代理。但是,请注意这主要影响Terraform核心组件的网络请求,对于后端插件的行为可能有限。

  3. 针对OSS后端的特殊处理: Terraform的OSS后端目前可能不直接支持通过环境变量或配置文件中的代理设置。一个变通方法是在执行Terraform命令之前,临时设置一个全局的代理,确保所有出站连接都通过该代理。

  4. 使用透明代理或系统级代理: 如果可能,配置一个系统级的透明代理,这样所有应用程序(包括Terraform及其调用的所有工具和库)都会自动通过这个代理路由流量。

  5. 自定义脚本或代理转发: 作为最后的手段,你可以编写一个脚本来包装Terraform命令,该脚本设置必要的环境变量,并可能使用像curlwget这样的工具,通过代理获取或上传数据到OSS,然后让Terraform操作本地文件。这种方法更复杂,但提供了最大的控制权。

如果上述方法都不能解决问题,考虑联系阿里云技术支持或在Terraform社区论坛寻求帮助,看是否有其他用户遇到了类似问题并找到了解决方案。同时,检查你的OSS bucket名称、区域名称是否正确无误,以及URL中的拼写错误(例如,你提供的错误信息中aliyuncd.com应该是aliyuncs.com)。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答