Terraform 설치 및 응용
이번 글은 포맷 변경이 원활하게 되지 않아 다소 보기가 불편함.
1. Terraform 설치
A. Sudo yum update
B. sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
C. sudo yum -y install terraform
D. terraform -version 명령어를 입력하여 설치 확인.
E. $ terraform -install-autocomplete
2. Terraform 설정 전 AWS IAM 사용자 생성.
A. AWS에 처음 로그인하고 발급받은 키는 root 권한을 가집니다.이 root계정은 계정에 속한 모든 리소스에 대한 접근 권한을 가지고 있어서 사용자가 실수를 하게되면 돌이킬수 없는 사태가 벌어지고 맙니다.그래서 루트계정을 사용하지 않고 다른 계정을 생성하여 서로 다른권한을 부여할수 있습니다.이것을 이용하여 작업을 하겠습니다.
B. AWS Management Console 로 이동하여 서비스 찾기->iam 을 검색하고 클릭합니다
C. 사용자 탭에 사용자 추가 버튼을 클릭해줍니다.
D. 아래 그림과 같이 설정해주고 다음을 클릭해줍니다
E. 두번째 단계는 어떤 권한을 줄지 결정합니다.AdministratorA
ccess를 체크하고 다음을 클릭합니다(사실상AdministratorAccess 는 모든권한을 가짐 필요한만큼만 최소한의 권한을 부여하는 것이 좋다. )
F. 세번째 단계는 태그를 설정하는것입니다.안해도 상관없으므로 바로 다음을 클릭해줍니다.
G. 네번째 단계는 지금까지 작성한 내용을 리뷰하는것입니다.문제가 없다면 사용자 생성버튼을 클릭해주세요.
H. 사용자->생성한 유저 클릭->보안자격 증명 탭 클릭 으로 가시면 액세스 키를 확인할수 있습니다. Programmatic access를 선택하여 진행하였기 때문에 로그인하는 것은 불가능하고 현지 액세스 키로 API에 접근하는 것이 가능합니다.
I. 위 액세스 키는 처음 생성할때만 비밀 액세스 키를 볼수 있습니다.따라서 잘 기억해두거나 복사하여 저장해놓고 사용해야 합니다.잊어버린다면 새로운 액세스 키를 생성하여 사용하면 됩니다.
3. HCL로 리소스 정의 및 AWS 프로비저닝
A. AWS 프로바이더 정의
i. mkdir web_infra
ii. cd web_infra
iii. touch provider.tf web_infra.tf
iv. vi provider.tf
1. 아래 그림과 같이 입력
A. Access_key 및 scret_key는 앞서 계정 생성하면서 얻은 키를 복사해줍니다.
B. Region 은 리소스를 정의할 AWS 리전입니다.여기서 사용한 ap-northeast-2는 AWS의 서울리전입니다.
2. HCL도 소스코드이기 때문에 Git으로 관리할수도 있습니다.하지만 저장소에 id와 비밀번호를 업로드하게 되면 보안문제가 생깁니다.해서 id와 비밀번호를 환경변수화 하여 다음과 같이 작성도 가능합니다.
A. export AWS_ACCESS_KEY_ID=AKIA4W5HXYHF53E7DTTD
B. export AWS_SECRET_ACCESS_KEY=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
C. env | grep AWS (환경변수가 잘 입력되었는지 확인)
D. 그후에 다시 vi provider.tf을 실행하여 다음 그림과 같이 바꿔줍니다
E. 설치된 terraform 버전 확인
i. Terraform version
B. terraform 초기화
i. web_infra 디렉터리에서 terraform init 명령어를 실행하여 프로바이더 플러그인을 설치해줍니다.
ii. Terraform version 으로 확인
위 이미지처럼 provider까지 설치가 되야 합니다.
iii. Terraform과 terraform provider버전이 따로 출력이 된다는 것은 두 버전이 따로 관리가 된다는 뜻입니다.따라서 두버전의 호환성을 맞춰줘야 할필요가 있습니다 provider.tf에 다음과 같이 작성해줍니다.
1.
2. 위의 access_key 및 secret_key는 위에서 저장했던 access key및 secret key를 복사해서 붙여넣으면 됩니다(ex:access_key = “AKIA4W5HXYHF53E7DTTD”).
C. HCL 언어로 리소스 선언
i. 다음 그림과 같이 리소스를 정의해줍니다.
ii. 현재 로컬환경에서 SSH키가 없기 때문에 새로 생성해줍니다.
1. ssh-keygen -t rsa -b 4096 -C "dygks910@gmail.com" -f "$HOME/.ssh/web_admin" -N ""
2. cd /home/centos/.ssh/ ssh키가 생성된 디렉터리로 이동.
3. Ls 명령어로 생성확인.
iii. 다시 web_infra.tf 파일을 열어 그림과 같이 코딩해줍니다.
D. 생성가능한지 Plan명령어로 확인
i. 앞서 작성한 코드들이 실제로 작동하는지 확인해야 합니다.따라서 plan명령어를 사용하여 현재 정의되어 있는 리소스들을 실제로 프로바이더에 적용했을 때 테라폼이 어떤 작업을 수행할지 계획을 보여줍니다.
ii. Web_infra 폴더로 이동하여 terraform plan을 실행합니다.
성공!
E. 선언된 리소스들을 Apply 하여 실제 AWS에서 반영되는지 Test
i. Terraform apply
plan을 완료하면 apply를 할건지 물어봅니다.yes를 입력해줍니다.
ii. 성공하였습니다.이제 AWS에 접속하여 웹에서 SSH가 생성되었는지 확인해보겠습니다.
iii. 다음화면과 같이 소스코드로 작성한 것이 생성된 것을 확인할수 있습니다.
4. 현재까지의 인스턴스 상태를 저장 및 terraform으로 새로 생성.
A. 현재 인스턴스를 AMI로 생성
i. Ec2 대시보드->인스턴스->실행중인 AMI 마우스 좌클릭->이미지->이미지 생성(시간이 오래걸리니 인내심을 갖고 기다려야 합니다)
ii. 위 그림의 ami 값을 기억해두고 terraform소스코드에서 불러올 때 사용.
iii. terraform으로 AMI를 인스턴스화 하고 실행하는 소스코드 작성
위 그림의 빨강박스 부분을 기억해둔 ami값으로 변경.
iv. Terraform plan && terraform apply.
5. Terraform 을 이용하여 생성된 EC2를 테스트 해보기.
'Jenkins' 카테고리의 다른 글
AWS EC2를 사용하여 Jenkins 구축하기(12) (0) | 2021.04.17 |
---|---|
AWS EC2를 사용하여 Jenkins 구축하기(10) (0) | 2021.04.17 |
AWS EC2를 사용하여 Jenkins 구축하기(9) (0) | 2021.04.17 |
AWS EC2를 사용하여 Jenkins 구축하기(8) (0) | 2021.04.17 |
AWS EC2를 사용하여 Jenkins 구축하기(7) (0) | 2021.04.17 |