AWS를 통한 효과적인 데브옵스 구축 2/e
테라폼, 앤서블, 깃허브, AWS 코드 파이프라인 등을 활용한 데브옵스 구축을 위한 지침서다.
www.acornpub.co.kr
요즘 백엔드 개발자에게 요구되어지는 역량은 무엇일까? 라고 했을때 단순 비즈니스에 대한 서버 개발만을 요구한다고 말하기는 힘든 부분이있다. 인프라 구축 또한 요구되어지고 있는것이 현 개발업계의 상황인듯 싶다. DevOps 와 Backend 관의 관계가 분명 나뉘어져 있는 회사라도 DevOps 가 어떻게 구축되어있고, 어느정도는 다룰줄 알아야 효과적인 개발 및 운영을 할 수 있다고 생각되어진다. 이러한 업계의 요구사항에 맞춰 요즘 인기를 끌고 있는것이 바로 IaC(Infrastructure as Code) 이다. '인프라 운영 관리 효율성을 높이고, 개발과 운영 프로세스를 자동화하는 등 유기적인 개발체계를 구현'하기 위해 사용되는 기술로 코드로 인프라를 구축할 수 있게 해준다. 대표적으로 Terraform 과 Ansible 이 대세라고 볼 수 있다.
이러한 IaC Tool 은 멱등성을 제공하기에 인프라 운영 관리를 효과적으로 할 수 있다.
이 글에서 우리는 Terraform 을 통해 AWS Ec2 Instance 를 생성하는 실습을 해보자.
1. Terraform 을 설치하자
- Terraform 설치는 검색으로 쉽게 할 수 있기에 생략하도록 하겠다.
설치가 완료되고 $ terraform -v 를 통해 설치된 terraform 버전을 볼 수 있다.
2. ~.tf 파일을 만들자
$ mkdir ev2v01
ec2.tf 파일을 만들자
$ vim ec2.tf
provider "aws" {
access_key="AKIAV*****************"
secret_key="CmDNdaa2bV*********************"
region="ap-northeast-2"
}
resource "aws_instance" "myserver" {
ami = "ami-058165de3b7202099"
instance_type = "t2.micro"
key_name = "EffectiveDevOpsAWS"
vpc_security_group_ids = ["sg-0971426539b528a69"]
tags = {
name = "helloworld"
}
provisioner "remote-exec" {
connection {
user = "ubuntu"
private_key = file("~/.ssh/EffectiveDevOpsAWS.pem")
host = self.public_ip
}
inline = [
"pwd"
]
}
}
먼저 AWS 접속정보를 provider 를 통해 구성해준다. ( 또는 다음과 같이 환경변수를 통해 구성해주어도 된다.)
export AWS_ACCESS_KEY_ID="<AWS_ACCESS_KEY_ID>"
export AWS_SECRET_ACCESS_KEY="<AWS_SECRET_ACCESS_KEY>"
export AWS_DEFAULT_REGION="ap-northeast-2"
terraform 은 aws_instance resource 를 통해 ec2 를 생성할 수 있다. 여기서 필수적으로 요구되어지는 것은 ami 와 instance_type 두가지이다. 여기서는 ubuntu ami 를 사용해주었다. key_name 을 ssh 접속으로 지정해주고 보안그룹인 vpc_security_group_ids 는 이전 게시물에서 생성했던 보안그룹을 지정해주었다.
[ (key_name, vpc_security_group_ids) 이전 게시글 참고 ]
ec2 가 생성되고나면 terraform 의 remote-exec provisioner 를 통해 ec2 에 접속해 명령어를 실행할 수 있다.
connection 을 구성해 접속정보를 입력해준다.(ubuntu ami 를 사용했기에 사용자는 ubuntu 이다.)
private_key 의 파일 또한 이전 게시글을 참고하자. [이전 게시글 참고]
host 정보는 self.public_ip(self 는 프로비저닝되는 리소스의 속성에 접근할 수 있게 해준다.) 를 통해 가져올 수 있고, aws_instance.myserver.public_ip 를 통해서도 가져올 수 있다.
inline 을 통해 인스턴스 생성 후 실행할 명령어들을 선언해줄 수 있다.(이를 UserData 라고도 한다.) 이때 "until [ -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done" 를 추가해 인스턴스가 생성되고나서 inline 이 실행될 수 있도록 보완적으로 넣어줄 수 있다. [참고1 , 참고 깃헙]
inline = [
"until [ -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done",
"pwd"
]
3. 실행해보자
$ terraform init 명령어를 통해 필요한 resource 들을 terraform 이 구성한다.
$ terraform validate 명령어를 통해 terraform 의 문법 오류를 체크할 수 있다.
$ terraform plan 명령어를 통해 terraform 이 수행할 정보들을 출력해 볼 수 있다.
$ terraform apply 또는 terraform apply --auto-approve 명령어를 통해 구성한 terraform 을 실행 할 수 있다.
실행 후
$ cat terraform.tfstate 명령어를 통해 실행한 리소스에 대한 모든 상태를 볼 수 있다.
(terraform 은 생성한 모든 리소스 상태를 저장한다.)
$ terraform show 명령어를 통해 상태를 json 형태로 보기 쉽게 볼 수 있다.
5. 생성한 ec2 를 종료하자
$ terraform destory 명령어를 통해 생성한 모든 리소스를 제거할 수 있다. 이를 통해 리소스를 통해 올린 ec2 인스턴스 또한 종료되게 된다.
'DevOps' 카테고리의 다른 글
Docker container 를 활용해 CI/CD 실습해보자 feat(Jenkin, Ansible, Minikube) (0) | 2022.09.14 |
---|---|
Kubernetes 구조 이해하기 (0) | 2022.08.10 |
최신 (k8s - 2022.07 기준) kubernetes 설치 (0) | 2022.07.31 |
AWS를 통한 효과적인 데브옵스 구축 2/e 2장 중 AWS CLI 로 EC2 구성하기 (0) | 2022.07.20 |
IaaS , PaaS , SaaS (0) | 2022.07.20 |