我将使用外部数据源来创建当前不受支持的AWS资源(AWS Organizations OU) . 我正在做一些创建S3存储桶的测试,因为工作流程类似 . 我正在使用外部数据源来调用bash脚本,并传递参数(例如,桶名称,区域) .
脚本正在检查S3存储桶是否存在,如果不存在,则创建它 . 如果脚本已经存在,则编写该脚本以返回成功等 .
我所看到的是,即使在“terraform plan”阶段也会执行脚本,并且似乎没有传递给脚本的stdin参数或环境变量来指示计划/应用/销毁阶段 . 这可以做/推断吗?理想情况下,脚本将使用“plan”调用,然后在资源已存在时返回 . 然后,如果需要,可以创建“应用”阶段 .
是否有可能在脚本中获得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
中的条目数,如果我更改了一个值但保持条目数相同,则不会注意到 .