terraform state backend를 외부로 설정하고 외부에서 인프라를 수정했을 때 외부의 tfstate와 로컬의 tfstate를 state pull/push를 통해 일관성을 유지할 수 있다. 다만, 이와 달리 terraform에서 전혀 다루지 않고 Web GUI에서만 생성한 경우 terraform import를 통해 infra를 코드로 정의할 수 있다. 사용법 terraform [global options] import [options] ADDR ID ADDR - import하는 대상에게 부여하는 리소스 주소 ID - import 대상의 고유 값 import를 수행하기 위해서는 대상을 위한 provider를 구성하여 init까지 완료되어야한다. 이후 Security Group을 예시로 들자면, ..
Amazon VPC CNI plugin for kubernetes EKS의 각 EC2에 배포되어 추가적인 ENI를 attach 함으로써각 Pod 및 서비스에 할당한다. 즉 EKS에서 실행시킨 pod의 내부 IP 주소(ex. 10.0.0.4)를 할당하기 위해 ENI를 추가한다는 것이다. 장점 기존에 사용하던 overlay network처럼 IP를 할당하는 데에 캡슐화하는 overhead가 발생하지 않는다. 단점 instance 유형에 따라 ENI를 attach 할 수 있는 상한선이 정해져있으므로 각 instance에 대해서 이를 극복하는 추가적인 할당이 불가능하다. Terraform에서 구성 방법 module "vpc_cni_irsa" { source = "terraform-aws-modules/iam/a..
기존 terraform 스크립트에서 aws_ami를 검색한 다음 사용하도록 구성하였는데, 오랜만에 apply하니까 이러한 메시지가 떴다. The architecture 'x86_64' of the specified instance type does not match the architecture 'arm64' of the specified AMI원인은 위 에러 메시지가 무색하게도 단순히 검색되는 이미지가 없을 때 발생하는데, 이럴 때에는 그냥 terraform docs에서 제공하는 형식으로 aws_ami data 블록을 구성하자 data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubun..
Moved 테라폼에서 기존 리소스의 이름이 변경되는 등의 상황이 발생하면 기존 리소스가 삭제되고 새로운 리소스가 생성된다. 다만 이때 삭제되고 생성되는 리소스가 정지되면 안되거나 내용이 삭제되면 안되는 경우가 대다수인데 이때 유용하게 쓸 수 있는 블록이 moved이다. None-moved resource "local_file" "a" { content = "hello!" filename = "hello.txt" } output "file_content" { value = local_file.a.content }위 tf파일에서 local_file.a의 이름을 b로 바꾸길 원할 때 resource "local_file" "b" { content = "hello!" filename = "hello.txt" }..
수명주기 terraform에서 resource를 선언할 때 블럭 내부에 배치하여 수명주기를 설정할 수 있다. 인수로는 다음 목록들을 입력할 수 있다. create_before_destroy (bool) 리소스 수정 시 수정된 리소스를 먼저 생성. 이후 기존 리소스 삭제 resource "local_file" "abc" { content = "lifecycle" lifecycle { create_before_destroy = true } } prevent_destroy (bool) 해당 리소스를 삭제하려할 때 거부 resource "local_file" "abc" { content = "lifecycle" lifecycle { prevent_destroy = true } } ignore_changes (l..