Terraform External Provider
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| HCL | HashiCorp Configuration Language | HashiCorp 配置语言 |
| JSON | JavaScript Object Notation | 一种结构化数据格式 |
用途#
通过 data "external" 调用外部程序,将查询结果交给 Terraform。适合没有原生 data source 的少量数据查询。
示例#
示例使用 Python 3 查询本地环境映射。将以下脚本保存为 lookup.py,与 main.tf 放在同一目录。
import json
import sys
query = json.load(sys.stdin)
regions = {"dev": "ap-east-1", "prod": "ap-southeast-1"}
environment = query.get("environment", "")
if environment not in regions:
print("Unknown environment", file=sys.stderr)
sys.exit(1)
json.dump({"region": regions[environment]}, sys.stdout)terraform {
required_providers {
external = {
source = "hashicorp/external"
version = "~> 2.0"
}
}
}
data "external" "environment" {
program = ["python3", "${path.module}/lookup.py"]
query = {
environment = "dev"
}
}
output "region" {
value = data.external.environment.result.region
}该映射只是演示输入输出协议;实际静态映射直接用 HCL locals 更简单。
注意事项#
- stdin 接收 JSON 对象,stdout 必须只输出 JSON 对象;输入和输出对象的值都必须是字符串。
- 日志写入 stderr,失败时返回非零退出码;复杂结果可编码成 JSON 字符串,再由 HCL
jsondecode()。 - 程序可能在 plan / refresh 时反复执行,必须保持只读,不承担部署、创建或删除操作。
program不自动经过 shell;执行端必须安装所需解释器和依赖。- 查询结果会进入 state,避免返回不必要的敏感信息。