AWS Golden Image
이미지는 Immutable 특성으로 런-타임 환경 적용에서 환경 변수나 설정 파일 조정 등의 개입이 없습니다. 이는 서비스 환경의 애플리케이션 런-타임 환경의 일관성을 보장 합니다. 또한, 빠른 start-up 구성 하므로 Cloud Native Application 을 구현하는데 중요한 역할을 합니다.
Golden Image 의 강점
- 전달 과정에서 CD 와 같이 변경이 발생 하지 않는 Immutable 특성을 가집니다.
- 보다 빠른 애플리케이션의 개발과 구동 시간 최적화가 가능합니다.
- QA, PRODUCTION 과 같은 환경에 대응하여 일관되게 애플리케이션 이미지를 제공 합니다.
- 불필요한 SW 패키지 없이 경량화된 크기로 최적화를 합니다.
- 가장 안전한 운영 체계(OS) 환경을 (Security & Compliance) 제공 합니다.
- 사람의 실수가 개입될 요소가 적습니다.
- 관리 및 CI CD 등에서 자동화가 편리해 집니다.
이미지 유형
Packer 소개
Packer는 여러 플랫폼에 대해 동일한 시스템 이미지를 생성해 주는 오픈 소스 도구입니다.
Packer 의 강점
- 가장 안전한 OS 및 런타임 환경을 지속적으로 구성 관리 (Security Update & Patches) 합니다.
- 버저닝을 통해 관리 될 수 있는 IaC 코드로 대체 되며 모든 구성 이력이 관리 됩니다.
- 사람의 실수로 인한 애러를 사전에 방지 합니다.
- QA, PRODUCTION 과 같은 환경에 대응하여 이미지를 제공 할 수 있습니다.
- 애플리케이션 런-타임에 필요한 패키지를 선택 하여 빌드가 가능 합니다.
Packer 의 컴포넌트 처리 흐름
- Build: EC2 인스턴스를 생성 합니다.
- Provisioning: 애플리케이션 런타임 환경에 필요한 각종 패키지들을 설치 합니다.
- Post-Process: AMI 이미지가 생성된 이후 post-process 를 처리 합니다.
Ansible 소개
Ansible 아키텍처
Ansible 프로젝트 레이아웃
playbook 구성 요소 참고
Packer + Ansible 의 Build Workflow 흐름
AWS 관리용 EC2 를 위해 "aws-codedeploy-agent", "aws-ssm-agent" 모듈이 구성 되도록 샘플 프로젝트를 진행해 봅니다.
모듈의 설명은 아래와 같습니다.
모듈 | 설명 |
---|---|
aws-ssm-agent | AWS EC2 컴퓨팅 리소스에 대해 체계적인 관리를 지원하는 에이전트 입니다. |
aws-codedeploy-agent | 애플리케이션의 지속적인 배포를 지원하는 AWS Code 시리즈 제품 입니다. |
필요에 따라 JDK, Node 등 애플리케이션에 꼭 필요한 모듈을 선택적으로 추가 할 수 있습니다.
사전 준비
사전 준비 작업으로 다음과 같은 작업을 진행 합니다.
- AWS IAM 계정을 생성하고 Access-Key 를 발급 받습니다.
IAM 계정을 생성 가이드 참고 - 발급 받은 Access-Key 를 통해 aws configure profile 을 구성 합니다.
- packer 를 설치 합니다.
- anible 을 설치 합니다.
AWS 프로파일 환경 구성
AWS Access-Key(Access Key, Secret Access Key) 정보는 절대 노출되어선 안되는 중요한 보안 정보 입니다.
그러므로 Access-Key 정보를 숨기고, AWS 자원을 액세스 하기 위해서 AWS 프로파일 정보를 설정 하여 진행 하는게 좋습니다.
예제는 'terra' 라는 프로파일을 구성하여 진행 합니다.
aws configure --profile terra
AWS Access Key ID [None]: *********
AWS Secret Access Key [None]: *******
Default region name [None]: ap-northeast-2
Default output format [None]: json
packer 설치
macOS 사용자는 brew 패키지 매지저를 통해 ansible 을 설치 할 수 있습니다.
brew update
brew install packer
ansible 설치
macOS 사용자는 brew 패키지 매지저를 통해 ansible 을 설치 할 수 있습니다.
brew update
brew install ansible
빌드
packer + ansible-playbook 을 통해 AMI 이미지를 빌드 합니다.
프로젝트 체크 아웃
git 을 통해 프로젝트를 checkout 합니다.
mkdir ~/workspace
cd ~/workspace
git clone https://gitlab.com/symplesims/packer-ami-example.git
Packer 템플릿 파일 검증
템플릿 파일이 유효 한지는 packer validate 명령을 통해 확인 할 수 있습니다.
AWS_PROFILE=terra; AWS_REGION=ap-northeast-2; \
packer validate ./packer/ubuntu/build.json
Packer 템플릿을 통한 빌드
packer build 명령을 통해 AMI 이미지를 빌드 합니다.
cd ~/workspace/packer-ami-example
AWS_PROFILE=terra; AWS_REGION=ap-northeast-2; \
packer build ./packer/ubuntu/build.json
Packer 빌드 결과 확인
처리 과정은 Provisioning 로그로 확인이 가능 하며, 빌드가 완료 되면 AMI 아이디가 출력 됩니다.
amazon-ebs: AMI: ami-02e085bc686d3ad4b
생성된 AMI 아이디( ami-02e085bc686d3ad4b) 를 AWS Console 화면에서 조회 하면 다음과 같이 자세한 정보를 확인 할 수 있습니다.
소스 코드는 packer-ami-example 프로젝트 소스 코드를 참고 하세요.
댓글 없음:
댓글 쓰기