Argument
→ 리소스 입력값(설정값). 내가 .tf 코드에 적어 주는 것.
예) aws_instance의 ami, instance_type, subnet_id, tags …
Attribute
→ 적용 후 Terraform이 읽어 들인 결과값(출력/상태값). 읽기 전용(보통).
예) aws_instance의 id, public_ip, private_dns, arn, availability_zone …
문서에서 보통 Arguments Reference(입력) / Attributes Reference(출력)로 나뉘어 있어요.
count, for_each : 여러 개 만들기depends_on : 명시적 의존성provider : 특정 프로바이더 인스턴스 사용lifecycle { create_before_destroy, prevent_destroy, ignore_changes, replace_triggered_by } : 생성/교체 전략provisioner, connection : 최후의 수단“→” 오른쪽은 자주 쓰는 Attribute
aws_instanceArguments
ami, instance_type, subnet_idvpc_security_group_ids, key_nameassociate_public_ip_address, iam_instance_profileuser_data/user_data_base64, root_block_device { ... }tagsAttributes → id, arn, availability_zone, public_ip, public_dns, private_ip, private_dns, primary_network_interface_id, ipv6_addresses[*], root_block_device[*].volume_id
aws_vpcArguments
cidr_block, enable_dns_support, enable_dns_hostnames, assign_generated_ipv6_cidr_block, tagsAttributes → id, arn, owner_id, default_route_table_id, default_security_group_id, default_network_acl_id, ipv6_cidr_block, main_route_table_id
aws_subnetArguments
vpc_id, cidr_block, availability_zone(또는 _id)map_public_ip_on_launch, assign_ipv6_address_on_creation, tagsAttributes → id, arn, availability_zone_id, owner_id, ipv6_cidr_block_association_id
aws_internet_gatewayArguments
vpc_id, tagsAttributes → id, arn, owner_id
aws_route_table, aws_route, aws_route_table_associationArguments(라우트 테이블)
vpc_id, tagsArguments(라우트)
route_table_id, destination_cidr_block(또는 ipv6_cidr_block)gateway_id(IGW) / nat_gateway_id / transit_gateway_id / vpc_peering_connection_id …Attributes → aws_route_table.id, aws_route.*는 별도 리소스의 id 없음(플랜에서 존재 유무 확인), aws_route_table_association.id
aws_security_group, aws_security_group_ruleArguments(SG)
name, description, vpc_id, tagsingress { ... }, egress { ... }Arguments(규칙 전용 리소스)
type = "ingress"|"egress", security_group_id,from_port, to_port, protocol, cidr_blocks / ipv6_cidr_blocks / source_security_group_idAttributes → id, arn, name, owner_id
aws_eip, aws_eip_associationArguments(EIP)
domain = "vpc", tagsArguments(연결)
allocation_id + (instance_id 또는 network_interface_id / private_ip_address)Attributes → aws_eip.public_ip, public_dns, association_id, id
aws_s3_bucket (+ 구성 리소스들)Arguments
bucket(또는 bucket_prefix), force_destroyacl(요즘은 정책/구성 리소스 권장)tags자주 함께 쓰는 하위 리소스/블록
aws_s3_bucket_versioning { versioning_configuration { status } }aws_s3_bucket_server_side_encryption_configurationaws_s3_bucket_policy, aws_s3_bucket_public_access_blockaws_s3_bucket_lifecycle_configurationAttributes → id(=bucket), arn, region, hosted_zone_id, website_endpoint(웹 설정 시), bucket_domain_name
aws_lbArguments
name, internal, load_balancer_type = "application"|"network"security_groups(ALB), subnetsip_address_type, enable_deletion_protection, access_logs { ... }, tagsAttributes → id, arn, arn_suffix, dns_name, zone_id
(리스너/타겟그룹은 aws_lb_listener, aws_lb_target_group 참고)
aws_eks_clusterArguments
name, role_arn, versionvpc_config { subnet_ids, security_group_ids, endpoint_private_access, endpoint_public_access, public_access_cidrs }encryption_config { ... }, tagsAttributes → id, arn, endpoint, certificate_authority[0].data, status, identity[0].oidc[0].issuer, platform_version
aws_db_instanceArguments
identifier, engine, engine_version, instance_classallocated_storage(또는 storage_type/iops), username, password(민감)db_subnet_group_name, vpc_security_group_ids, multi_azbackup_retention_period, skip_final_snapshot, publicly_accessible, storage_encrypted, kms_key_id, tagsAttributes → id(=identifier), arn, address, endpoint, port, resource_id, ca_cert_identifier
aws_nat_gatewayArguments
allocation_id(EIP), subnet_id, connectivity_type(Public/Private), tagsAttributes → id, nat_gateway_addresses[*].public_ip, private_ip, network_interface_id
aws_iam_role, aws_iam_policy, aws_iam_role_policy_attachmentArguments(역할)
name, assume_role_policy, permissions_boundary, managed_policy_arns, inline_policy { ... }, tagsAttributes → id(=name), arn, unique_id, create_date
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
}
}
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
}
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"
# ...
}
password 등)은 출력/로그에 노출하지 말고 sensitive = true 사용terraform state show <addr> 혹은 제공 문서의 Attributes Reference 확인outputs.tf에 꼭 필요한 Attribute만 정리(모듈의 공개 API처럼)Argument = 입력, Attribute = 결과.
자주 쓰는 AWS 리소스의 핵심 Argument/Attribute만 기억해도, 리소스 연결과 Output 설계가 훨씬 쉬워진다.