AWS CloudFormation 을 이용하여 인프라를 구축해보자
AWS CloudFormation은 AWS에서 제공하는 IaC 툴이다.
새로운 인프라를 생성하는데 유용하게 사용 할 수 있다. 일단 EC2를 생성하고, 해당 EC2의 세팅값들을 넣어주고 탄력적 IP를 자동부여 하는 CloudFormation을 만들어보자.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-reference.html
내가 구축해야 할 Infra에 대한 정보값은 위 문서에서 확인해보자.
json 또는 yml 형식으로 문서를 작성해줘야 하는데, Infra 종류별로 넣어줘야 하는 properties 값들이 너무나도 다르기 때문에, 외워서 한다기 보다는 필요할 때 마다 user guide를 참조해서 작성하는 편이 좋다.
LB쪽도 자동적으로 생성되고 연결되게끔 처리해 보기도 했지만, 일단은 EC2 생성과 탄력적 IP 연동에 대해서만 다뤄보자!
(내용이 너무 길어진다..)
EC2 생성과, EIP 생성, 연결 YML
AWSTemplateFormatVersion: 2010-09-09
Resources:
NewIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
NewArkinfoEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0c9c942bd7bf113a2 # ubuntu
InstanceType: t2.small
SecurityGroupIds:
- <sg-id>
KeyName: <pemKeyName>
UserData:
Fn::Base64: !Sub |
#!/bin/bash
apt-get update
apt-get install -y awscli
aws configure set aws_access_key_id <aws_access_key_id>
aws configure set aws_secret_access_key <aws_secret_access_key>
aws configure set default.region ap-northeast-2
aws s3 sync <s3::bucket::path> <sync path>
aws-get install -y nginx
ConnectionIP:
Type: AWS::EC2::EIPAssociation
Properties:
AllocationId: !GetAtt NewIP.AllocationId
InstanceId: !Ref NewArkinfoEC2Instance
작성한 yml 전문이다.
Resource 부분을 하나씩 살펴보면 다음과 같다
NewIp
- 새로운 탄력적 IP를 생성한다.
NewArkinfoEC2Instance
- 새로운 EC2를 생성한다.
- imageId : 어떤 이미지를 선택하여 EC2를 생성할지 지정한다. 위 예시 코드는 ubuntu 22.04 버전의 이미지로 AWS에서 제공하는 ImageId 값이다. EC2 좌측에, 이미지->AMI 에서 제공되는 이미지들을 확인할 수 있다.
- InstanceType : InstanceType을 지정한다.
- SecurityGroupIds : 보안그룹을 지정한다. 여러개를 지정할 수 있다.
- KeyName : 기존에 생성된 pem 키가 있다면, 해당 pem키를 연동한다.
- UserData : 인스턴스에서 실행될 명령어를 넣어준다. 인스턴스 시작시에만 실행된다. 16KB로 제한되고, base64로 인코딩된 텍스트를 제공해야 한다.
이번에는 AWS CLI을 설치하고, S3에 존재하는 파일들을 가져오는 부분과, nginx를 설치하도록 지정해뒀다.
S3에는 dockerFile, docker-compose file, nginx 설정파일들을 넣어줄 예정이고, 추후에 docker를 설치 및 빌드와 nginx 설정값을 cp를 통해 넣어줄 예정.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
ConnectionIP
- 생성된 탄력적 IP와 생성된 EC2 Instance를 연결해 준다.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html
해당 YML으로 스택을 생성하게 되면, EC2 인스턴스가 생성되고 탄력적 IP가 부여되며 EC2에 접속해보면 UserData로 넘긴 명령어들이 정상적으로 수행되었음을 확인 할 수 있다.
일반적으로 스택을 삭제하게되면, 스택으로 인해 생성된 Infra들은 같이 삭제된다.
이렇게, 내가 필요한 인프라들을 미리 정의해두어서 관리하기 쉽도록 도와준다.
다만 국내 언어로된 정보들은 정말 많이 부족하고 GPT도 제대로 답변하는 경우가 별로 없었다. (없는 properties 라던가, type들을 제공해서 예제 샘플을 보여주던데, 람다랑 헷갈리는 건지 뭔지..)
현재로서는 정해진 규칙에 따라서 문서만 작성해 주면 되니, 너무 복잡하게 생각할 필요 없이 필요한 부분들은 직접 userguide를 보면서 생성하는 것이 가장 빠른 방법인 것 같다.
잡담..
지난주 일정들이 주말까지 포함하여 너무 팍팍했다.. 집안일도 엄청 많이 생겨서 처리하느라 이곳저곳 다니고, 취준도 하느라 개인 프로젝트를 잘 못건드렸다 ㅠㅠ
S3에 올려둘 DockerFile들도 다 만들어두고 테스트는 다 완료된 상태이긴 한데.. 포스팅도 못하구 시간이 참 없당..
그리고 대부분 실무로만 부딪혀와서 이론쪽이 굉장히 부족한건 잘 알고 있긴 했는데, 실제로 사용하면서도 그냥 반복적으로 사용하고 개념은 알고 있는데 말로는 잘 설명하지 못하는 것들이 너무 많고 어느정도 개념만 알고 필요할 때 마다 찾아서 개발을 하다보니 면접 같은거 볼 때 대답을 잘 못하더라.. 이론공부도 좀 해야겠당
'프로그래밍 일지' 카테고리의 다른 글
인프라 구조 변경 전, 내용 정리 (0) | 2023.06.09 |
---|---|
EC2 내부 mysql / mongodb 자동 백업 이후 S3 업로드 (0) | 2023.06.05 |