1.4.12.1. Ephemeral 资源

临时(Ephemeral)资源是本质上是临时的(Temporary) Terraform 资源。临时资源具有独特的生命周期,Terraform 不会将它们存储在其状态文件中。每个 ephemeral 块描述一个或多个临时资源,例如临时密码或与另一个系统的连接。

ephemeral 块的声明包含了临时资源的类型以及本地名,就像 resource 块那样。 Terraform 使用临时资源的名称来引用同一模块中的该资源,但临时资源的名称在该模块的范围之外没有任何意义。

1.4.12.1.1. 生命周期

ephemeral 的生命周期与 resourcedata 不同。当 Terraform 创建临时资源时,它会执行以下步骤:

  1. 如果 Terraform 需要访问临时资源的结果,它将“打开”该临时资源。例如,如果 Terraform “打开”一个包含了 Vault 机密的临时资源,则 Vault 的 Provider 将获取租约并返回一个机密。
  2. 如果 Terraform 需要访问临时资源的时间比远程系统为机密设置的过期时间还长,Terraform 会要求 Provider 定期续约。例如,如果 Terraform 对包含了 Vault 机密的临时资源续约,则 Vault Provider 程序将调用 Vault 的租约续约 API 来延长到期时间。
  3. 一旦 Terraform 不再需要临时资源,Terraform 就会将其关闭。这种情况发生在依赖于某个临时资源的 Provider 完成当前 Terraform 运行阶段的所有工作之后。例如,关闭 Vault 机密临时资源意味着 Vault Provider 明确吊销租约,从而使得 Vault 立即撤销相关凭证。

Terraform 对于给定配置中的每个临时资源实例都遵循这些生命周期步骤。

1.4.12.1.2. 依赖图

临时资源对应了 Terraform 依赖关系图中的节点,其交互方式与 resourcedata 类似。例如,当 resourcedata 依赖于临时资源的属性时,Terraform 首先自动配置临时资源。

1.4.12.1.3. 临时资源的声明

ephemeral 块中的绝大多数参数是由您正在定义的临时资源类型所决定的。与 resourcedata 一样,Terraform 注册表中的每个 Provider 程序都包含其支持的临时资源(如果有)的文档。临时资源类型的文档列出了可用的参数以及应如何配置的格式。

临时资源由两部分组成:

  • 属性
  • 元参数

ephemeral 块的结构如下:

ephemeral "<resource_type>" "<resource_name>" {
  <attributes>
  <meta-arguments>
}

1.4.12.1.4. 引用临时资源

只允许在特定的临时上下文中引用临时资源,否则 Terraform 会返回错误。以下是可以引用临时资源的上下文:

1.4.12.1.5. 元参数

我们可以将在临时资源块内声明以下元参数,来更改这些资源的行为。以下元参数对于资源、数据源和临时资源的工作方式相同:

临时资源不支持 provisioner 元参数。

1.4.12.1.6. 示例

以下示例使用临时资源的凭据配置 postgresql Provider 程序。由于这些凭据由临时资源管理,因此 Terraform 不会将它们存储在状态或计划文件中。

ephemeral "aws_secretsmanager_secret_version" "db_master" {
  secret_id = data.aws_db_instance.example.master_user_secret[0].secret_arn
}

locals {
  credentials = jsondecode(ephemeral.aws_secretsmanager_secret_version.db_master.secret_string)
}

provider "postgresql" {
  host     = data.aws_db_instance.example.address
  port     = data.aws_db_instance.example.port
  username = local.credentials["username"]
  password = local.credentials["password"]
}

results matching ""

    No results matching ""