[AWS] TERRAFORM EC2 생성, 변경

고구마양갱·2025년 5월 10일

AWS CLOUD

목록 보기
27/32
post-thumbnail

테라폼을 활용해 AWS 서비스를 구성해보자
간단하게 EC2 를 생성, 변경, 삭제 해볼 것이다.

순서는
- ACCESS KEY, SECRET KEY 발급
- 테라폼 설치 및 환경변수 설정
- EC2 배포 (EC2 설치 및 변경, 삭제)
로 진행할 것이다.

1. ACCESS KEY 발급 및 인증

테라폼을 AWS에 연동하여 사용하기 위해선, ACCESS KEY 를 발급받아
AWS 접근 권한을 획득해야 한다. 그래야 테라폼 실행 시 본인 계정을 통해 AWS에 반영될 것이기 때문이다.

IAM USER 에서 계정 선택, CREDENTIAL 의 ACCESS KEYS에서 create access key를 선택한다.

command line interface (cli) 를 선택, next 로 넘어간다.

tag value 는 따로 입력할 필요가 없고, create access key 를 선택해서 access key 를 생성한다.

생성하면 access key , secret key를 확인할 수 있다. 여기서 복사해서 사용하거나,
csv 파일로 다운받아 활용한다. access key, secret key 를 확인했다면 done 을 눌러 완료한다.

발급받은 access key 를 활용해, 계정 권한을 획득해야 하는데

aws configure

명령어를 입력하고, 발급 받은 access key, secret access key 를 입력한다.
region 은 서비스, 리소스를 컨트롤 할 리전을 선택하는데, 디폴트가 본인이 사용하던 리전이면 입력 없이 엔터로 넘어간다. format 은 json 으로 하면 되므로 이것도 엔터를 눌러 넘어간다.

2. 테라폼 설치 및 기초 설정

테라폼 공식홈페이지에서 다운 받을 수 있다.
테라폼은 exe 파일로서 명령어로 옵션과 함께 실행하는 방식이지, 따로 인스톨해서 생성된 프로그램을 사용하는 방식이 아니다. 만약 cmd 실행 경로와 관계없이 테라폼 명령어를 쓸려면, 환경변수 등록을 해야 한다.

64비트 운영체제면 amd64를, 32비트 운영체제면 386을 선택한다.
테라폼 exe 파일이 있는 경로에서 cmd 를 실행하면, 테라폼 명령어를 쓸 수 있다. (cmd 경로에 관계 없이 사용하려면, 환경변수를 등록해야 한다.)

cmd 에서 terraform 명령어를 입력하면, 사용가능한 명령어들이 출력된다.
테라폼 명령어를 쓰기 전 init 옵션을 써서 초기화를 해줘야 한다.

3. EC2 배포

  테라폼으로 AWS 를 컨트롤 하기 위해, tf 확장자를 갖는 스크립트를 작성한다.
우선 EC2 를 특정 서브넷에 생성하고, 그 후 태그 이름 변경 및 삭제를 진행할 것이다.

1) 테라폼으로 EC2 생성

  하기의 스크립트로 EC2를 생성한다.

provider "aws" {
region = "ap-northeast-2"
}

resource "aws_instance" "terra_EC2" {
ami = "ami-0f605570d05d73472"
instance_type = "t2.micro"
subnet_id = "subnet-00247575d0be0286c"
availability_zone = "ap-northeast-2a"
associate_public_ip_address = true
}

스크립트가 위치한 경로에서 cmd 를 실행하고 init 옵션 > plan 옵션 > apply 옵션 순으로 테라폼 명령어를 실행할 것이다.

tf 확장자 스크립트 파일이 있는 경로에서 init 을 수행하면, 테라폼 수행에 불필요한 파일들이 정리된다.

plan 옵션 명령어를 수행하면, 실제 적용되는 값들이 출력된다.

apply 옵션 명령을 수행하고, enter a value 에 yes 입력하면 tf 스크립트 파일을 실행하여 클라우드에 반영한다.

EC2 가 생성되고 있음을 확인할 수 있다.

AWS 콘솔에서 생성된 EC2 를 확인 가능하다.

2) EC2 tags Name 변경 배포

EC2 를 생성했으니, EC2 의 설정을 변경하여 배포해보자. 쉽고 간단한 tags 의 Name 부분을 변경할 것이고, 이를 위해 하기의 스크립트를

tags = {
Name="이름"
}

기존 스크립트에 추가한다.

provider "aws" {
region = "ap-northeast-2"
}

resource "aws_instance" "terra_EC2" {
ami = "ami-0f605570d05d73472"
instance_type = "t2.micro"
subnet_id = "subnet-00247575d0be0286c"
availability_zone = "ap-northeast-2a"
associate_public_ip_address = true

tags = {
Name = "test1234"
  }
}

그리고 terraform plan 명령를 실행하면, + - 가 나오는데 + 는 추가되는 설정(값), - 는 삭제되는 설정(값)이다. - 가 있는 이유는 처음에 테스트를 잘못해서 tags 의 name 을 수정하려 했기 때문이다. tags 의 Name 이지, name 이 아니므로 유의한다.

plan 확인 후 terraform apply 명령을 실행, enter a value 에 yes 입력 한다.
(yes 입력 없이 자동으로 yes 입력되게 하려면, 명령어 끝에 -auto-approve 옵션을 주면 된다.) 상기 이미지의 하단 부분은 보면 MODIFIYING 즉 수정 중 이라는 메시지가 보인다.

명령어 실행 후 aws 콘솔로 돌아가면

앞에서 입력한 tag Name 이 test1234 로 변경되었음을 알 수 있다.

3) 테라폼으로 배포한 서비스,리소스 삭제

이제 삭제를 할 것인데 destroy 명령이며, 이 명령은 테라폼으로 배포된 모든 모듈을 삭제한다. 특정 인스턴스만 삭제하고 싶다면, state list 옵션을 통해 테라폼으로 생섣한 모듈을 확인하고, -target [모듈명] 을 통해 특정 모듈을 삭제한다.

그 외 state rm 옵션도 있으나 기능이 다르다. 이 명령어는 terrform의 상태저장소에서 삭제하고 aws 에서는 그대로 남겨둔다. 즉 테라폼으로 관리는 안하되 aws 에서는 남겨두고 싶을 때 쓴다.

state list 명령어로 테라폼으로 생성한 모듈 리스트를 확인하고

destroy -tartget [모듈명] 명령어를 쓰면, 특정 모듈로 생성된 서비스, 리소스를 삭제할 수 있다.

enter a value 에 yes 를 입력한다. 하단에 resources: 1 destroyed 메시지는 모듈로 생성된 하나의 리소스가 삭제 완료 되었음을 알려준다.

aws 콘솔의 EC2 인스턴스 리스트를 보면, 생성한 EC2 인스턴스 상태가 terminated 삭제됨을 확인 할 수 있다.

테스트 완료 후 access key를 사용하지 않는다면, IAM 에서 ACCESS KEY를 삭제하여 오남용을 막는다

0개의 댓글