terraform data sources

余铭晨
2023-12-01

Data Sources
data source 主要有以下功能

  • 缓存一些资源信息,如json被其他resource引用。
  • 从aws 加载一些已经存在资源,在plan, apply中被引用。
data "aws_iam_policy_document" "test_resource_role_doc" {
  statement {

    actions = [
      "ssm:DescribeParameters",
      "ec2:DescribeTags",
      "ssm:GetParameters",
      "kms:Decrypt",
      "ecr:GetDownloadUrlForLayer",
      "ecr:BatchGetImage",
      "ecr:CompleteLayerUpload",
      "ecr:GetAuthorizationToken",
      "ecr:UploadLayerPart",
      "ecr:InitiateLayerUpload",
      "ecr:BatchCheckLayerAvailability",
      "ecr:PutImage",
      "cloudwatch:*",
      "ecs:*",
      "iam:*",
      "ec2:*",
      "logs:*",
      "ecr:*",
      "s3:*",
      "events:*"

    ]
    resources = ["*"]
    effect = "Allow"
  }
}

aws_caller_identity
使用此数据源可访问对有效的帐户ID,用户ID和ARN的授权,并在其中授权了Terraform。
属性:

  • account_id -拥有或包含调用实体的账户的AWS账户ID号。
  • arn -与调用实体关联的AWS ARN。
  • user_id -呼叫实体的唯一标识符。
data "aws_caller_identity" "current" {}

aws_arn
将Amazon资源名称(ARN)解析为其组成部分, 从aws上检查并返回指定ARN的资源

data "aws_arn" "db_instance" {
  arn = "arn:aws:rds:eu-west-1:123456789012:db:mysql-db"
}

aws_region
除了验证给定的区域名称之外,此资源还可用于发现提供程序内配置的区域的名称。后者在从其父模块继承AWS提供程序配置的子模块中很有用。
属性:

  • name -所选区域的名称。
  • endpoint -所选区域的EC2端点。
  • description-以以下格式的区域说明:“位置(区域名称)”。
data "aws_region" "current" {}

aws_regions
提供有关AWS区域的信息。可以用于过滤区域,即按启用状态或仅对当前帐户启用的区域。为了获得诸如端点和每个区域的描述之类的详细信息,可以将aws_region数据源与数据源结合使用。
参数:

  • all_regions -(可选)如果为true,则无论可用性如何,源都将查询所有区域。
  • filter-(可选)用作过滤器的配置块。详细如下。
    name-(必填)过滤器字段的名称。有效值可在describe-regions AWS CLI参考中找到。
    values-(必需)给定过滤器字段接受的一组值。如果任何给定值匹配,将选择结果。

属性:
names -符合条件的地区名称

data "aws_regions" "current" {}

aws_ip_ranges
使用此数据源获取各种AWS产品和服务的IP范围。有关此数据源内容和必需的JSON语法
参数:

  • regions-(可选)按区域过滤IP范围(如果省略,则包括所有区域)。有效项目为global(适用于cloudfront)以及所有AWS区域(例如eu-central-1)
  • services-(必需)按服务过滤IP范围。有效的项目是amazon (对于amazon.com) ,amazon_connect,api_gateway,cloud9,cloudfront, codebuild,dynamodb,ec2,ec2_instance_connect,globalaccelerator, ,route53 和。有关其他可能的值,请参阅 属性文档。route53_healthcheckss3workspaces_gatewaysservice
  • url-(可选)源JSON文件的自定义URL。语法必须与AWS IP地址范围文档一致。默认为https://ip-ranges.amazonaws.com/ip-ranges.json。
    属性:
  • cidr_blocks -按字母顺序排列的CIDR块列表。
  • ipv6_cidr_blocks -IPv6 CIDR块的按字母顺序排列的列表。
  • create_date-IP范围的发布时间(例如2016-08-03-23-46-05)。
  • sync_token-IP范围的发布时间,以Unix纪元时间格式(例如1470267965)。
data "aws_ip_ranges" "european_ec2" {
  regions  = ["eu-west-1", "eu-central-1"]
  services = ["ec2"]
}

aws_partition
使用此数据源查找有关Terraform在其中运行的当前AWS分区的信息。
属性:

  • partition 设置为当前分区的标识符。
  • dns_suffix设置为当前分区的基本DNS域名(例如,amazonaws.com在AWS Commercial,amazonaws.com.cnAWS China中)。
data "aws_partition" "current" {}
data "aws_iam_policy_document" "s3_policy" {
  statement {
    sid = "1"

    actions = [
      "s3:ListBucket",
    ]

    resources = [
      "arn:${data.aws_partition.current.partition}:s3:::my-bucket",
    ]
  }
}

aws_availability_zones
可用区数据源允许访问AWS可用区列表,可以通过提供程序中配置的区域内的AWS帐户来访问该列表。
参数:

  • all_availability_zones-(可选)设置为true包括所有可用区域和本地区域,而不管您的选择启用状态如何。
  • filter-(可选)用于过滤的配置块。详细如下。
  • exclude_names -(可选)要排除的可用区名称列表。
  • exclude_zone_ids -(可选)要排除的可用区ID列表。
  • state-(可选)允许根据可用区的当前状态过滤列表。可以是"available",“information”,"impaired"或 - “unavailable”。默认情况下,该列表包括基础AWS帐户可以访问的一组完整的可用区,无论其状态如何。
    过滤器配置块
  • filter配置块支持以下参数:
    name-(必填)过滤器字段的名称。有效值可以在《EC2 DescribeAvailabilityZones API参考》中找到。
    values-(必需)给定过滤器字段接受的一组值。如果任何给定值匹配,将选择结果。

属性:

  • group_names一组可用区组名称。对于可用区,此值与地区名称相同。对于“本地区域”,为关联组的名称,例如us-west-2-lax-1。
  • names -该帐户可用的可用区名称列表。
  • zone_ids -该帐户可用的可用区ID的列表。
data "aws_availability_zones" "example" {
  all_availability_zones = true

  filter {
    name   = "opt-in-status"
    values = ["not-opted-in", "opted-in"]
  }
}

resource "aws_subnet" "primary" {
  availability_zone = data.aws_availability_zones.available.names[0]
 ...
}

resource "aws_subnet" "secondary" {
  availability_zone = data.aws_availability_zones.available.names[1]

 ...
}

aws_billing_service_account
使用此数据源获取AWS Billing and Cost Management Service账户的账户ID,以允许在S3存储桶策略中使用。
属性:

  • id -AWS计费服务帐户的ID。
  • arn -AWS计费服务帐户的ARN。
data "aws_billing_service_account" "main" {}

参数:

  • all_availability_zones-(可选)设置为true包括所有可用区域和本地区域,而不管您的选择启用状态如何。
  • filter-(可选)用于过滤的配置块。详细如下。
  • name -(可选)要选择的可用区的全名。
  • state-(可选)特定的可用区状态。可在任何的"available",“information"或"impaired”。
  • zone_id -(可选)要选择的可用区域的区域ID。
  • filter配置块支持以下参数:
    name-(必填)过滤器字段的名称。有效值可以在《EC2 DescribeAvailabilityZones API参考》中找到。
    values-(必需)给定过滤器字段接受的一组值。如果任何给定值匹配,将选择结果。

属性:

  • group_name-对于可用区,此值与地区名称相同。对于“本地区域”,为关联组的名称,例如us-west-2-lax-1。
  • name_suffix -AZ名称出现在区域名称之后的部分,唯一标识其区域内的AZ。
  • network_border_group -从中发布地址的位置名称。
  • opt_in_status-对于可用区,此值始终为opt-in-not-required。对于本地区域,这是选择启用状态。可能的值为opted-in和not-opted-in。
    region-所选可用区所在的区域。这始终是在提供程序上选择的区域,因为此数据源仅在该区域内搜索。
data "aws_availability_zone" "example" {
  filter {
    name   = "opt-in-status"
    values = ["not-opted-in", "opted-in"]
  }
  all_availability_zones = true
  state = "available"
}
 类似资料:

相关阅读

相关文章

相关问答