我将使用外部数据源来创建当前不支持的AWS资源(AWS Organizations OU)。我正在对创建S3存储桶进行一些测试,因为工作流程相似。我正在使用外部数据源调用bash脚本,并传递参数(例如,存储桶名称,区域)。
该脚本正在检查S3存储桶是否存在,如果不存在,则创建它。编写脚本以返回成功等信息(如果它已经存在的话)。
我看到的是,即使在“地形计划”阶段也执行了脚本,并且似乎没有传递stdin参数或环境变量来指示脚本/应用/破坏阶段。这可能做/演绎吗?理想情况下,脚本将使用“计划”进行调用,如果资源已经存在,则返回该脚本。然后,如有必要,可以创建“应用”阶段。
是否可以在脚本中获得Terraform阶段(计划/应用/销毁)?还是其他避免脚本在计划阶段被完全调用的方法?
提醒一下,最终我并不是要创建S3存储桶(因为我知道我已经可以在Terraform中做到这一点),所以我想创建一个Organizations OU,但这是一个更易于测试的工作流程。
示例调用代码:
data "external" "create_bucket" {
program = ["bash", "create_bucket.sh"]
query = {
region = "ca-central-1"
bucket_name = "mytestbucket"
}
}
也尝试使用local-exec:
当我有以下调用代码时:
variable "bucket_name_list" {
type = "list"
default = ["neilp-dummylist-1","neilp-dummylist-2",
"neilp-dummylist-3"]
}
module "local" {
source = "../local"
bucket_name_list = ["${var.bucket_name_list}"]
bucket_region = "ca-central-1"
}
使用模块:
resource "null_resource" "test" {
count = "${length(var.bucket_name_list)}"
provisioner "local-exec" {
command = "aws s3api create-bucket
--bucket
${element(var.bucket_name_list, count.index)}
--create-bucket-configuration
LocationConstraint=${var.bucket_region}"
}
}
这里的问题是,它仅跟踪bucket_name_list
中的条目数,并且如果我更改一个值但保持条目数不变,则不会注意到。