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,避免返回不必要的敏感信息。

参考#

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭