Terraform:使用存储在 AWS CodeCommit 中的版本化模块
Terraform: Using versioned modules stored in AWS CodeCommit
目前有一个 terraform 模块存储库存储在 AWS CodeCommit 中。在 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 密钥,并将其放入我的 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 成功找到并应用了模块。
为了解决这个问题,请按照 AWS documentation 设置 SSH 连接
然后使用下面的子网模块路径格式。
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules//Modules//modules-orchestration//subnets
然后在执行 Terraform init 之后,Terraform 成功获取了正确的模块。
此外,在使用名称 subnets-v0.0.1 标记提交并将其添加为参考后,您可以将部署锁定到特定提交。
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules//Modules//modules-orchestration//subnets?ref=subnets-v0.0.1"
对于任何来到这里想知道您是否可以使用 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
等环境变量进行配置
为了能够成功设置我的模块源,我必须这样定义它:
module = "example" {
source. = "git::codecommit::<region>://<repository-name>"
example_var = "<fancy-var>"
providers = {
aws = aws.<provider-alias>
}
此外,在执行任何 terraform 命令之前,我必须导出在 codecommit 存储库上授予的 AWS_PROFILE
,并且必须安装 @tedsmitt git-remote-codecommit 中提到的。
目前有一个 terraform 模块存储库存储在 AWS CodeCommit 中。在 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 密钥,并将其放入我的 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 成功找到并应用了模块。
为了解决这个问题,请按照 AWS documentation 设置 SSH 连接
然后使用下面的子网模块路径格式。
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules//Modules//modules-orchestration//subnets
然后在执行 Terraform init 之后,Terraform 成功获取了正确的模块。
此外,在使用名称 subnets-v0.0.1 标记提交并将其添加为参考后,您可以将部署锁定到特定提交。
source = "git::ssh://git-codecommit.eu-west-1.amazonaws.com/v1/repos/reddwarf-terraform-infrastructure-modules//Modules//modules-orchestration//subnets?ref=subnets-v0.0.1"
对于任何来到这里想知道您是否可以使用 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
为了能够成功设置我的模块源,我必须这样定义它:
module = "example" {
source. = "git::codecommit::<region>://<repository-name>"
example_var = "<fancy-var>"
providers = {
aws = aws.<provider-alias>
}
此外,在执行任何 terraform 命令之前,我必须导出在 codecommit 存储库上授予的 AWS_PROFILE
,并且必须安装 @tedsmitt git-remote-codecommit 中提到的。