terraform-aws-ec2-instance v5→v6 — root_block_device 형식 변경
EC2 인스턴스는 직접 aws_instance 를 쓰지 않고 커뮤니티 모듈
(terraform-aws-modules/ec2-instance)로 찍어내고 있었습니다. 인스턴스 정의가
여러 개라 공통 설정을 모듈에 몰아두는 쪽이 편했기 때문입니다.
Provider 를 최신으로 올리고 나서 배포하는데 지원하지 않는 인자라는 에러가 났습니다.
Error: Unsupported argument
on ../main.tf line 696, in resource "aws_instance" "this":
cpu_core_count = null
cpu_threads_per_core = null
spot_block_duration_minutes = null
Provider와 모듈의 버전 불일치
환경은 이랬습니다.
OpenTofu v1.10.3
AWS Provider v6.21.0
terraform-aws-ec2-instance v5.6.0
모듈 v5.6.0 은 cpu_core_count, cpu_threads_per_core,
spot_block_duration_minutes 를 리소스에 항상 넣습니다. 값이 null
이어도 인자 자체는 들어갑니다.
문제는 AWS Provider v6 이 이 인자들을 더 이상 받지 않는다는 겁니다. 모듈이 넣으려는 인자를 Provider 가 모르니 “Unsupported argument” 가 납니다.
버전을 올릴 때 Provider 만 최신으로 가고 모듈은 예전 걸 그대로 두면 이렇게 어긋납니다. 모듈 v6.1.4 는 이 인자들을 Nitro 기반 인스턴스일 때만 조건부로 넣기 때문에 Provider v6 과 맞습니다.
업그레이드 후 root_block_device 형식 변경
모듈을 v6.1.4 로 올리자 이번엔 다른 게 깨졌습니다. root_block_device 가
리스트에서 객체로 바뀌었습니다.
# v5.6.0 — 리스트
root_block_device = [
{
encrypted = true
volume_type = "gp3"
volume_size = 50
},
]
# v6.1.4 — 객체
root_block_device = {
encrypted = true
volume_type = "gp3"
volume_size = 50
}
이건 바뀐 쪽이 오히려 맞습니다. EC2 인스턴스의 root block device 는 항상 하나뿐인데, 리스트는 여러 개를 담을 수 있는 것처럼 보입니다. 객체로 바뀌면서 “하나뿐”이라는 실제 제약이 타입에 그대로 드러났습니다.
메이저 버전을 올릴 때 이런 형식 변경은 changelog 의 breaking change 에 적혀 있습니다. 에러를 보고 역추적하는 것보다 올리기 전에 breaking change 부터 읽는 게 빠릅니다.
인스턴스 정의 파일이 여러 개면 전부 같은 방식으로 바꿔야 합니다. 바꿀 건 괄호뿐입니다.
root_block_device = [ → root_block_device = {
{ ... }, → ...
] → }
댓글 0