目前有一个用于存储在 AWS CodeCommit 中的 Terraform 模块的存储库。在 Dev 和 Prod 之间,我们希望为模块使用相同的存储库,但能够让 Dev 和 Prod 使用不同的版本。
我已将标签附加到特定的提交,以便更容易地区分版本。但我似乎找不到任何关于如何引用该标签的文档。
我在 github 上找到了下面的例子来说明它是如何完成的
module "stage_vpc" {
source = "git::git@github.com:gruntwork-io/module-vpc.git//modules/vpc-app?ref=v0.0.4"
vpc_name = "stage"
aws_region = "us-east-1"
num_nat_gateways = 3
cidr_block = "10.2.0.0/18"
}
但尝试对 CodeCommit 做同样的事情似乎并不奏效。它报告“错误的响应代码:401”
试图确定这个 ?ref 是否是在 codecommit 中引用标签的正确方法。
https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules/modules/subnets?ref=subnets-v0.0.1
任何人都可以确认这是否是正确的方法吗?或者还有其他方法吗?
编辑:我现在已经按照设置指南创建了一个 SSH key ,并将其放入我的 IAM 用户中。
module "subnets" {
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules/Modules//subnets.git"
产生了以下错误
bobscutter@git-codecommit.eu-west-1.amazonaws.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
./ssh 文件夹存在正确的凭据,不确定我还缺少什么。我还检查了我可以从 Git Bash 连接并且它有效。
最终编辑:从 https 切换到 SSH 并根据 The AWS documentation 创建 ./ssh 目录后,现在可以正常工作了
我只需要在下面的路径中添加//而不是/
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules//Modules//modules-orchestration//subnets
Terraform 成功找到并应用了模块。
最佳答案
对于任何来到这里想知道您是否可以使用 git-remote-codecommit 的人使用 terraform 从 CodeCommit 克隆。答案是肯定的,你可以!
Terraform installs modules from Git repositories by running
git clone
, and so it will respect any local Git configuration set on your system, including credentials.
这意味着只要您的 AWS 配置文件设置正确,您就可以设置您的模块 source
使用以下任一格式到 codecommmit 存储库
-
codecommit://<profile>@<repository>
-
codecommit::<region>://<profile>@<repository>
它还尊重通过环境变量的配置,如 AWS_PROFILE
和 AWS_DEFAULT_REGION
关于amazon-web-services - Terraform:使用存储在 AWS CodeCommit 中的版本化模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62516401/