
1. 배경 상황
데이터 파이프라인 생성을 위해 Kinesis Data Streams + Data Firehose + S3 조합의 인프라 구성 요청을 받았는데, Kinesis Data Streams는 이미 해당 팀에서 생성해주신 상황이었다. 우리는 가능하면 모든 AWS 리소스를 Terraform에서 관리하려고 하는 상황이기 때문에 이미 생성된 리소스를 terraform import를 통해 가져온 후, 나머지 리소스는 코드로 생성하기로.
2. terraform import 사용 방법
테라폼에서는 terraform import 명령어를 통해 이미 콘솔 등을 이용해 생성한 리소스(모듈이 아니고 리소스다)의 상태값을 가져올 수 있다. 최신 정보는 공식 문서 참조.
1. 가져오고자 하는 리소스의 리소스 블록을 작성한다(terraform import는 상태값을 가져와주는 것이라 리소스 블록에 대한 코드는 직접 작성해야함).
resource "aws_kinesis_stream" "test_stream" {
name = "terraform-kinesis-test"
shard_count = 1
retention_period = 48
shard_level_metrics = [
"IncomingBytes",
"OutgoingBytes",
]
stream_mode_details {
stream_mode = "PROVISIONED"
}
tags = {
Environment = "test"
}
}
2. terraform import 명령어를 실행해 리소스의 상태값을 위에서 작성한 리소스 블록에 매핑한다.
# terraform import <테라폼 aws 서비스명>.<리소스명> <실제 생성된 리소스 이름/id>
terraform import aws_kinesis_stream.test_stream terraform-kinesis-test
3. terraform plan을 실행해 import가 제대로 수행했는지 검증한다. 작성한 코드와 실제 AWS 서비스의 상태값이 일치한다면 변경점이 없다고 나오고, 변경점이 있다면 작성한 코드 값을 적용하기 위한 변경점이 출력된다.
이번에는 다행히 모듈이 아니라 리소스로 작성한 코드라(Kinesis는 AWS 공식 모듈이 없다;;) 금방 import할 수 있었는데, module의 경우 엮인 resource를 한땀한땀 import 해와야 해서 굉장히 불편하다. terraforming 을 활용하면 더 간단히 가져올 수 있다고 하는데 안타깝게도 한참 전부터 업데이트가 중지되고 프로젝트가 아카이빙 상태다. 다음에 import 할 일이 있을 수 있으니 다른 프로젝트가 있는지 찾아봐야겠다.