我在运行terraform application时遇到了一个奇怪的情况。当我第一次运行地形应用程序时,我得到了下面的错误。填充的Terraform输出在一个单独的python脚本中读取,所以当api_gateway_id为null时,python脚本失败。
module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec):从Terraform收集数据…module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec): Traceback(最近一次调用):module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec): File "/home/ec2-user/bin/lambda-deploy"module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec): provide_env('LAMBDA_GATEWAY_ID', 'api_gateway_id')module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec): File "/home/ec2-user/bin/lambda-deploy",第57行,在provide_envmodule.serverless_projects"api/admin.zip".null_resource。Serverless_deployment (local-exec):操作系统。environ[key] = TERRAFORM_OUTPUTS[tf_output]module.serverless_projects"api/admin.zip".null_resource。serverless_deployment (local-exec): KeyError: 'api_gateway_id'
当我第二次重试'terraform apply'时,值(api_gateway_id)正在填充并且执行也成功。
<标题> main.tf h1> 仅api_gateway_id,甚至api_gateway_root, api_gateway_resources也不会在第一次执行时打印。我尝试了地形初始化,地形执行前刷新,但没有运气。 <标题> output.tf h1> div class="one_answers">Terraform仅在应用阶段完成后才完成更新的状态快照,因此尝试从应用阶段期间采取的操作访问状态是不可靠的。
相反,我建议将所需的值直接传递给您正在运行的外部程序,或者使用命令行参数,或者使用仅为该进程设置的环境变量。
例如:
provisioner "local-exec" {
command = "lambda-deploy ${var.package_name}"
environment = {
LAMBDA_GATEWAY_ID = aws_api_gateway_rest_api.gw.id
}
}
在上面的例子中,我使用了一个环境变量名,这个环境变量名是我在你的程序产生的堆栈跟踪中看到的,尽管你可以使用任何你想要的环境变量名,然后在你用来实现这个程序的编程语言中以任何正常的方式访问它们。对于Python程序,您不再需要将它们分配到os.environ
中,因为它们应该已经在那里可用。
标题>标题>