[Terraform/AWS] Argument vs Attribute 정리

도은호·2025년 9월 24일

terraform

목록 보기
22/32

1) 개념

  • Argument
    → 리소스 입력값(설정값). 내가 .tf 코드에 적어 주는 것.
    예) aws_instanceami, instance_type, subnet_id, tags

  • Attribute
    → 적용 후 Terraform이 읽어 들인 결과값(출력/상태값). 읽기 전용(보통).
    예) aws_instanceid, public_ip, private_dns, arn, availability_zone

문서에서 보통 Arguments Reference(입력) / Attributes Reference(출력)로 나뉘어 있어요.


2) 모든 리소스에서 공통으로 쓰는 메타 인자

  • count, for_each : 여러 개 만들기
  • depends_on : 명시적 의존성
  • provider : 특정 프로바이더 인스턴스 사용
  • lifecycle { create_before_destroy, prevent_destroy, ignore_changes, replace_triggered_by } : 생성/교체 전략
  • (필요 시) provisioner, connection : 최후의 수단

3) 리소스별 핵심 Argument & Attribute

“→” 오른쪽은 자주 쓰는 Attribute

3.1 EC2 인스턴스 — aws_instance

Arguments

  • ami, instance_type, subnet_id
  • vpc_security_group_ids, key_name
  • associate_public_ip_address, iam_instance_profile
  • user_data/user_data_base64, root_block_device { ... }
  • tags

Attributesid, arn, availability_zone, public_ip, public_dns, private_ip, private_dns, primary_network_interface_id, ipv6_addresses[*], root_block_device[*].volume_id


3.2 VPC — aws_vpc

Arguments

  • cidr_block, enable_dns_support, enable_dns_hostnames, assign_generated_ipv6_cidr_block, tags

Attributesid, arn, owner_id, default_route_table_id, default_security_group_id, default_network_acl_id, ipv6_cidr_block, main_route_table_id


3.3 서브넷 — aws_subnet

Arguments

  • vpc_id, cidr_block, availability_zone(또는 _id)
  • map_public_ip_on_launch, assign_ipv6_address_on_creation, tags

Attributesid, arn, availability_zone_id, owner_id, ipv6_cidr_block_association_id


3.4 인터넷 게이트웨이 — aws_internet_gateway

Arguments

  • vpc_id, tags

Attributesid, arn, owner_id


3.5 라우트 테이블/연결 — aws_route_table, aws_route, aws_route_table_association

Arguments(라우트 테이블)

  • vpc_id, tags

Arguments(라우트)

  • route_table_id, destination_cidr_block(또는 ipv6_cidr_block)
  • gateway_id(IGW) / nat_gateway_id / transit_gateway_id / vpc_peering_connection_id

Attributesaws_route_table.id, aws_route.*는 별도 리소스의 id 없음(플랜에서 존재 유무 확인), aws_route_table_association.id


3.6 보안 그룹 — aws_security_group, aws_security_group_rule

Arguments(SG)

  • name, description, vpc_id, tags
  • (인라인 규칙) ingress { ... }, egress { ... }

Arguments(규칙 전용 리소스)

  • type = "ingress"|"egress", security_group_id,
    from_port, to_port, protocol, cidr_blocks / ipv6_cidr_blocks / source_security_group_id

Attributesid, arn, name, owner_id


3.7 EIP & 연결 — aws_eip, aws_eip_association

Arguments(EIP)

  • domain = "vpc", tags

Arguments(연결)

  • allocation_id + (instance_id 또는 network_interface_id / private_ip_address)

Attributesaws_eip.public_ip, public_dns, association_id, id


3.8 S3 버킷 — aws_s3_bucket (+ 구성 리소스들)

Arguments

  • bucket(또는 bucket_prefix), force_destroy
  • acl(요즘은 정책/구성 리소스 권장)
  • tags

자주 함께 쓰는 하위 리소스/블록

  • aws_s3_bucket_versioning { versioning_configuration { status } }
  • aws_s3_bucket_server_side_encryption_configuration
  • aws_s3_bucket_policy, aws_s3_bucket_public_access_block
  • aws_s3_bucket_lifecycle_configuration

Attributesid(=bucket), arn, region, hosted_zone_id, website_endpoint(웹 설정 시), bucket_domain_name


3.9 ALB/NLB — aws_lb

Arguments

  • name, internal, load_balancer_type = "application"|"network"
  • security_groups(ALB), subnets
  • ip_address_type, enable_deletion_protection, access_logs { ... }, tags

Attributesid, arn, arn_suffix, dns_name, zone_id

(리스너/타겟그룹은 aws_lb_listener, aws_lb_target_group 참고)


3.10 EKS 클러스터 — aws_eks_cluster

Arguments

  • name, role_arn, version
  • vpc_config { subnet_ids, security_group_ids, endpoint_private_access, endpoint_public_access, public_access_cidrs }
  • encryption_config { ... }, tags

Attributesid, arn, endpoint, certificate_authority[0].data, status, identity[0].oidc[0].issuer, platform_version


3.11 RDS 인스턴스 — aws_db_instance

Arguments

  • identifier, engine, engine_version, instance_class
  • allocated_storage(또는 storage_type/iops), username, password(민감)
  • db_subnet_group_name, vpc_security_group_ids, multi_az
  • backup_retention_period, skip_final_snapshot, publicly_accessible, storage_encrypted, kms_key_id, tags

Attributesid(=identifier), arn, address, endpoint, port, resource_id, ca_cert_identifier


3.12 NAT 게이트웨이 — aws_nat_gateway

Arguments

  • allocation_id(EIP), subnet_id, connectivity_type(Public/Private), tags

Attributesid, nat_gateway_addresses[*].public_ip, private_ip, network_interface_id


3.13 IAM — aws_iam_role, aws_iam_policy, aws_iam_role_policy_attachment

Arguments(역할)

  • name, assume_role_policy, permissions_boundary, managed_policy_arns, inline_policy { ... }, tags

Attributesid(=name), arn, unique_id, create_date


4) Arguments/Attributes 사용 예제

(A) Attribute를 Output으로 노출

resource "aws_instance" "web" {
  ami           = var.ami
  instance_type = "t3.micro"
  subnet_id     = var.public_subnet_id
  vpc_security_group_ids = [aws_security_group.web.id]
  tags = { Name = "web" }
}

output "web_ips" {
  value = {
    public  = aws_instance.web.public_ip
    private = aws_instance.web.private_ip
  }
}

(B) 다른 리소스의 Argument에 Attribute를 전달

resource "aws_lb_target_group_attachment" "web" {
  target_group_arn = aws_lb_target_group.app.arn        # ← Attribute
  target_id        = aws_instance.web.id                 # ← Attribute
  port             = 80
}

(C) 데이터 소스(Attribute만 제공) 활용

data "aws_ami" "al2023" {
  most_recent = true
  owners      = ["137112412989"]
  filter { name = "name"; values = ["al2023-ami-*-x86_64"] }
}

resource "aws_instance" "bastion" {
  ami           = data.aws_ami.al2023.id    # ← data의 Attribute
  instance_type = "t3.micro"
  # ...
}

5) 체크리스트 & 팁

  • Arguments는 내가 코드에 설정하는 입력, Attributes생성/조회 후의 결과
  • Attribute는 적용 후(또는 data 조회 후)에만 값이 생김 → 플랜/의존성 그래프를 통해 자동 정렬
  • 민감값(password 등)은 출력/로그에 노출하지 말고 sensitive = true 사용
  • 리소스 간 연결은 Arguments ←(참조)— Attributes 패턴으로
  • 모르는 속성은 terraform state show <addr> 혹은 제공 문서의 Attributes Reference 확인
  • 리소스가 많아지면 outputs.tf에 꼭 필요한 Attribute만 정리(모듈의 공개 API처럼)

요약

Argument = 입력, Attribute = 결과.
자주 쓰는 AWS 리소스의 핵심 Argument/Attribute만 기억해도, 리소스 연결과 Output 설계가 훨씬 쉬워진다.

profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글