本项目展示了如何将 Infracost 与 Atlantis 结合使用。它会自动在 Atlantis 输出的底部添加一条显示成本估算差异的评论。查看 此拉取请求示例,展开“显示输出”部分并向下滚动即可看到 Infracost 输出。
此集成默认使用最新版本的 Infracost,因为我们会定期添加对更多云资源的支持。如果遇到任何问题,请加入我们的 社区 Slack 频道,我们很乐意为您提供指导。
如 FAQ 中所述,不会向 Cloud Pricing API 发送任何云凭证或机密信息。Infracost 不会对您的 Terraform 状态或云资源进行任何修改。
!示例截图(宽度557,alt="示例截图")
有两种将 Infracost 与 Atlantis 集成的方法:
使用自定义 Docker 镜像,该镜像通过 扩展 Atlantis 的 latest 镜像来添加 Infracost。这是推荐方法。
通过 curl 将 Atlantis 的 $PLANFILE 发送到 Infracost API。尽管此 API 会在处理文件后从服务器删除文件,但在将文件发送到 API 之前删除其中的机密信息是良好的安全实践。例如,AWS 提供了 一个 grep 命令 可用于此目的。
此方法使用 Atlantis 生成的 $PLANFILE 运行 infracost diff。以下步骤说明如何使用此方法:
此 Docker 镜像 通过添加 Infracost 来扩展 Atlantis 镜像。如果您已为 Atlantis 使用自定义 Docker 镜像,可将 此 Dockerfile 中的 RUN 命令复制到您的 Dockerfile 中。
更新 Atlantis 配置,添加 自定义命令 以使用所需环境变量(如 INFRACOST_API_KEY)运行 Infracost。下一节将描述可用的环境变量。以下示例展示了如何实现此操作,也可通过 Server Config 文件或 Server Side Repo Config 文件中的 Atlantis YAML 配置实现类似功能。
bashdocker run infracost/infracost-atlantis:latest server \ --gh-user=MY_GITHUB_USERNAME \ --gh-token=MY_GITHUB_TOKEN \ --gh-webhook-secret=MY_GITHUB_WEBHOOK_SECRET \ --repo-allowlist='github.com/myorg/*' \ --repo-config-json=' { "repos": [ { "id": "/.*/", "workflow": "terraform-infracost" } ], "workflows": { "terraform-infracost": { "plan": { "steps": [ "init", "plan", { "env": { "name": "INFRACOST_API_KEY", "value": "MY_API_KEY" } }, { "env": { "name": "INFRACOST_TERRAFORM_BINARY", "command": "echo \"terraform${ATLANTIS_TERRAFORM_VERSION}\"" } }, { "run": "/home/atlantis/infracost_atlantis_diff.sh" } ] } } } } '
Infracost 会从 Atlantis 的 $PLANFILE(Terraform 二进制文件格式)生成 Terraform 计划 JSON。如果您希望在 Infracost 运行前执行此操作,可使用以下步骤替代上述步骤。infracost_atlantis_diff.sh 脚本会先检查 $PLANFILE.json 文件,再检查 $PLANFILE。
bash- run: terraform show -no-color -json $PLANFILE > $PLANFILE.json - run: /home/atlantis/infracost_atlantis_diff.sh - run: rm -rf $PLANFILE.json
提交新的拉取请求以更改 Terraform 中涉及成本的内容;Atlantis 会在拉取请求上发布评论,展开“显示输出”部分,在底部即可看到 Infracost 输出。若遇到问题,可设置 atlantis_debug=true 环境变量并查看 此页面。
本节描述必填环境变量。其他支持的环境变量详见 此页面。
Terragrunt 用户还应阅读 此页面。Terraform Cloud/Enterprise 用户还应阅读 此页面。
INFRACOST_API_KEY必填 需获取 API 密钥,请 下载 Infracost 并运行 infracost register。
INFRACOST_TERRAFORM_BINARY必填 用于指定当前版本的 terraform 二进制文件路径,应设置为 Atlantis 中使用的 Terraform 或 Terragrunt 二进制文件路径(Infracost 支持 Terraform v0.12 及以上版本)。如果使用 infracost/infracost-atlantis 镜像(基于 runatlantis/atlantis 镜像),可设置为:
/usr/local/bin/terraform0.12.30。<data-dir>/bin/terraform<version>。Terragrunt 用户可使用 'echo "/atlantis-data/bin/terraform${ATLANTIS_TERRAFORM_VERSION}"'。usage_file可选 Infracost 使用文件 的路径,用于指定基于使用量的资源的值,详见 示例文件 中的可用选项。
config_file可选 如需按仓库设置 Terraform 版本,可在 配置文件 中定义,并将此参数设置为文件路径。在此情况下,usage_file 参数不可用,必须在配置文件中定义。
post_condition可选 描述触发拉取请求评论条件的 JSON 字符串,可选值:
'{"has_diff": true}':仅当存在差异时发布评论(默认行为)。'{"always": true}':始终发布评论。'{"percentage_threshold": 0}':触发评论的绝对百分比阈值,例如设为 1 表示当成本估算变化超过 ±1% 时发布评论。show_skipped可选 显示不支持的资源(其中部分可能免费),默认值为 false。
SLACK_WEBHOOK_URL可选 设置此参数可同时将拉取请求评论发布到 Slack Webhook,从而发送到相应的 Slack 频道。
atlantis_debug可选 在 infracost_atlantis_diff.sh 中启用调试模式,在 Atlantis 拉取请求评论中显示运行步骤,默认值为 false。
MY_API_KEY 更新为您的 Infracost API 密钥。也可通过 Server Config 文件或 Server Side Repo Config 文件中的 Atlantis YAML 配置实现类似功能。可选步骤:在将计划 JSON 文件发送到 API 前,添加步骤移除其中的机密信息。bashdocker run infracost/infracost-atlantis:latest server \ --gh-user=MY_GITHUB_USERNAME \ --gh-token=MY_GITHUB_TOKEN \ --gh-webhook-secret=MY_GITHUB_WEBHOOK_SECRET \ --repo-allowlist='github.com/myorg/*' \ --repo-config-json=' { "repos": [ { "id": "/.*/", "workflow": "terraform-infracost" } ], "workflows": { "terraform-infracost": { "plan": { "steps": [ "init", "plan", { "run": "terraform show -json $PLANFILE > $PLANFILE.json" }, { "run": "echo \"#####\" && echo && echo Infracost output:" }, { "run": "curl -s -X POST -H \"x-api-key: MY_API_KEY\" -F \"ci-platform=atlantis\" -F \"terraform-json-file=@$PLANFILE.json\" -F \"no-color=true\" [***]" }, { "run": "rm -rf $PLANFILE.json" } ] } } } } '
欢迎提交拉取请求。对于重大变更,请先打开 issue 讨论您想要修改的内容。
Apache License 2.0
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429