将terraform模块迁移到更新的提供程序格式
我继承了一个代码库,其中所有提供程序都存储在模块中,并且在将提供程序移出以便删除模块中创建的资源时遇到了很多问题 当前的设计违反了这里概述的规则:并且使删除模块成为不可能 我对迁移步骤的理解是:将terraform模块迁移到更新的提供程序格式,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我继承了一个代码库,其中所有提供程序都存储在模块中,并且在将提供程序移出以便删除模块中创建的资源时遇到了很多问题 当前的设计违反了这里概述的规则:并且使删除模块成为不可能 我对迁移步骤的理解是: 创建一个在顶级使用的提供程序 更新模块资源以使用存储在模块外部的提供程序 删除模块(保留顶级提供程序) 示例模块 例如/route53别名记录/main.ts: 变量“评估目标健康状况”{ 默认值=真 } 数据“地形”远程状态“环境”{ backend=“s3” 配置={ bucket=“” key=“
/route53别名记录/main.ts
:
变量“评估目标健康状况”{
默认值=真
}
数据“地形”远程状态“环境”{
backend=“s3”
配置={
bucket=“”
key=“infra-${var.environment}-${var.target}.tfstate”
region=“”
}
}
提供商“aws”{
region=data.terraform\u remote\u state.env.outputs.region
允许的\u帐户\u ID=data.terraform\u remote\u state.env.outputs.allowed\u帐户
担任{
角色\u arn=data.terraform\u remote\u state.env.outputs.aws\u account\u角色
}
}
资源“aws\U路由53\U记录”“别名”{
zone_id=data.terraform_remote_state.env.outputs.public_zone_id
name=var.fqdn
type=“A”
别名{
name=var.alias\u name
分区id=变量分区id
evaluate\u target\u health=var.evaluate\u target\u health
}
}
开始使用
模块“api dns别名”{
source=“../environment/infra/modules/route53别名记录”
environment=“${var.environment}”
zone_id=“${module.service.lb_zone_id}”
alias_name=“${module.service.lb_dns_name}”
fqdn=“${var.environment}.example.com”
}
提供程序重写
##与模块内部相同
提供商“aws”{
region=data.terraform\u remote\u state.env.outputs.region
允许的\u帐户\u ID=data.terraform\u remote\u state.env.outputs.allowed\u帐户
担任{
角色\u arn=data.terraform\u remote\u state.env.outputs.aws\u account\u角色
}
}
模块“api dns别名”{
source=“../environment/infra/modules/route53别名记录”
environment=“${var.environment}”
zone_id=“${module.service.lb_zone_id}”
alias_name=“${module.service.lb_dns_name}”
fqdn=“${var.environment}.example.com”
提供者={
aws=aws###“当我删除模块时,握手仍然失败,并且无法删除资源”您看到的这种行为的证据是什么?看起来您确实采取了正确的迁移步骤。@MattSchuchard 1.按原样部署,2.显式添加提供程序,3.删除模块(保留提供程序)-->错误与我刚删除模块时的错误相同。“找不到…的提供程序,因为提供程序已随模块一起删除”如果自己无法与配置交互,最好的猜测是您需要开始手动编辑您的状态。使用cli工具手动编辑,或者只是手动删除/修改s3上构建对象中的引用?--我以前没有这样做过。有什么快速提示吗?