Skip to main content
The data block is a read-only lookup of existing cloud resources. Data block outputs are always Pending<T>. Equivalent to Terraform’s data source.

Syntax

data "resource_type" "name" {
  attribute = value
}

Examples

data "aws_vpc" "main" {
  filters = { "tag:Name" = "prod-vpc" }
}

data "aws_ami" "ubuntu" {
  most_recent = true
  filters     = { "name" = "ubuntu/images/*" }
  owners      = ["099720109477"]
}

data "aws_caller_identity" "current" {}

Referencing Data Sources

Always Pending<T> — always require ~:
unit "aws_instance" "app" {
  ami    = ~data.aws_ami.ubuntu.id
  vpc_id = ~data.aws_vpc.main.id
}

Generated TypeScript

const main = pulumi.output(aws.ec2.getVpc({
    filters: [{ name: "tag:Name", values: ["prod-vpc"] }],
}));

const ubuntu = pulumi.output(aws.ec2.getAmi({
    mostRecent: true,
}));

const current = pulumi.output(aws.getCallerIdentity({}));

Function Name Mapping

ubx typeTypeScript function
aws_vpcaws.ec2.getVpc()
aws_amiaws.ec2.getAmi()
aws_subnetaws.ec2.getSubnet()
aws_caller_identityaws.getCallerIdentity()
aws_s3_bucketaws.s3.getBucket()

filters Attribute

data "aws_vpc" "main" {
  filters = { "tag:Name" = "prod-vpc" }
}
Compiled to Pulumi’s filter array format:
filters: [{ name: "tag:Name", values: ["prod-vpc"] }]

Error Cases

# Undefined reference — compile error
unit "aws_s3_bucket_v2" "b" {
  bucket = ~data.aws_vpc.missing.id
}
# ✗  ~data.aws_vpc.missing references an undeclared data block;
#    add: data "aws_vpc" "missing" { ... }