수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다
개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!
교재 <아마존 웹 서비스 AWS DevOps Discovery Book - 권영환 지음>를 토대로 실습을 진행하였습니다.
* 실습요약
1. AWS OpsWork Chef automate Server 설치
2. Chef automate Workstation 설치
3. Github로부터 Cookbook 다운로드 및 배포
4. Chef Automate Node 추가 작업
5. Node에 Template 코드 추가 및 소스 배포
6. Chef Automate Node 제거
1. AWS OpsWork Chef automate Server 설치
OpsWorks 검색 > 'Create Chef Automate server' 클릭 > 이름 및 리전 설정
OpsWorks탭은 잠시 냅두고 다른 탭을 이용하여 '싱가포르' 리전에서 키페어를 생성합니다.
다시 OpsWorks 설정 화면으로 돌아옵니다.
생성한 키페어를 활용합니다.
Step3,4 는 'Next' 를 클릭하여 넘어가고 Review 페이지에서 내용을 확인 후 'Launch' 버튼을 클릭합니다.
10-15분 뒤 Chef Automate Server 생성이 완료됩니다.
'Username' 과 'Password' 를 메모장에 저장해두고 'Download credentials'와 'Download Starter Kit' 을 클릭하여 저장합니다.
'Chef Automate Dashboard' 를 클릭하여 'Username'과 'Password'로 로그인합니다.
보안상 접속오류가 뜨는 경우가 있는데 무시하시고 '고급' 에서 연결 허용을 클릭하시면 됩니다.
이와 같이 홈화면이 뜨면서 정상 접속이 됩니다. 저는 이미 실습을 완료한 상태라 몇 개의 작업이 생성되어 있습니다.
2. Chef automate Workstation 설치
EC2 인스턴스를 생성합니다.
'Ubuntu Server 18.04' 서버를 선택하고, 인스턴스 유형에서 't2.micro'를 선택한 후, [검토 및 시작] 버튼으로 바로 생성합니다. 키페어의 경우 이전에 만들었던 'chef-keypair'을 사용합니다.
생성된 EC2 인스턴스에 SSH로 접속할 때는 login as : ubuntu 로 접속하시면 됩니다.
Chef Automate Workstation을 설치하기 위해 다음과 같은 명령어를 실행합니다.
$wget https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb
$sudo dpkg -i chef-workstation_*.deb
$sudo rm chef-workstation_*.deb
Chef Automate Workstation이 정상적으로 설치 완료된 후 Chef의 버전을 확인합니다.
$chef --version
AWS CLI 설치를 합니다.
$sudo snap install aws-cli --classic
AWS CLI로 S3 연결 설정을 수행하기 위해 사용자를 생성하고 S3 권한을 허용합니다.
[사용자 이름] OpsWorksAdmin
[기존 정책 직접 연결] S3FullAccess
.csv 다운로드는 꼭 하셔야 합니다.
다시 Chef Automate Workstation SSH 터미널로 돌아와서 방금 생성한 사용자에 연결합니다.
액세스 키 ID와 비밀 액세스 키 ID 그리고 리전에 ap-southeast-1 을 입력하여 설정을 마무리합니다.
$sudo aws configure
처음에 다운로드 받았던 Start Kit용 zip파일을 OpsWorks 생성하면서 만들어진 S3 버킷에 업로드합니다.
zip파일 그대로 업로드하시면 됩니다.
그런 다음 Workstation으로 zip파일을 다운로드 하고 압축을 해제합니다.
$sudo aws s3 cp s3://버킷이름/awsopsworkschefautomate_starter_kit.zip /home/ubuntu
$sudo apt install unzip
$unzip aws<tabs>
'learn-chef' 폴더를 생성한 후 압축 해제된 Start Kit 파일을 폴더로 이동하고 '.chef' 폴더 내 파일을 'learn-chef' 폴더로 이동합니다.
$mkdir learn-chef
$ls -al
$cd aws<tabs>
$mv .chef/ /home/ubuntu/learn-chef/
Tree 프로그램 설치 진행 후 'learn-chef' 폴더 내 구조를 확인합니다.
$cd ..
$sudo snap isntall tree
$tree -a learn-chef
'learn-chef' 폴더로 이동 후 Chef Automate Server 연결 정보를 확인합니다.
$cd learn-chef
$knife ssl check
3. Github로부터 Cookbook 다운로드 및 배포
Workstation의 'learn-chef' 폴더 하위에 'cookbook' 폴더를 생성하고 github에서 파일을 다운로드 받습니다.
$cd ~/learn-chef/
$mkdir cookbooks
$cd cookbooks
$git clone https://github.com/learn-chef/learn_chef_apache2.git
cookbook 업로드를 위해 /learn-chef/ 폴더로 이동 후 knife 명령어를 활용하여 cookbook을 업로드합니다.
$cd ..
$knife cookbook upload learn_chef_apache2
$knife cookbook list
OpsWorks 에 로그인한 홈화면에서 'Event Feed'에서 'Cookbok'이 정상적으로 업로드 되었음을 확인합니다.
4. Chef Automate Node 추가 작업
EC2 인스턴스를 생성합니다.
'Ubuntu 16.04'를 선택하고 인스턴스 유형에 't2.micro'를 선택 후 배포합니다.
보안그룹을 HTTP, HTTPS, SSH 포트에서 모든 위치(0.0.0.0/0)에 대해 포트를 오픈합니다.
PuttyGen을 통해 chef.keypair.ppk 파일을 pem 키로 변환합니다.
1.[Load] 클릭 후 .ppk 파일을 선택하여 open 합니다.
2.메뉴에서 [Conversions] -> [Export OpenSSH Key] 선택 후 'chef-keypair.pem'으로 저장합니다.
터미널로 돌아와 '.ssh' 폴더로 이동하여 'nano chef-keypair.pem' 을 입력하여 PC에 저장된 pem 파일 내 key-pair 정보를 '.ssh' 폴더에 저장합니다.
교재에서는 nano를 사용하였지만 저는 vi가 편하기 때문에 vi를 사용하겠습니다.
pem 키의 경우 메모장이나 Notepad 등을 이용하여 확인하시면 됩니다.
$cd ~/.ssh
vi chef-keypair.pem
pem 파일의 접근 권한 변경을 위해 'chmod' 명령어를 통해 권한을 변경하고 신규로 생성된 Ubuntu 서버에 접속 테스트를 수행합니다.
$chmod 600 ~/.ssh/chef-keypair.pem
$ssh -i ~/.ssh/chef-keypair.pem ubuntu@퍼블릭 IP주소
$exit
다음 명령어를 사용하여 노드를 추가하는 작업을 수행합니다.
cd ~/learn-chef
knife bootstrap 퍼블릭IP주소 --ssh-user ubuntu --sudo --identity-file ~/.ssh/chef-keypair.pem --node-name aws-opsworks-node-01 --run-list 'recipe[learn_chef_apache2]'
knife node list명령을 사용하여 Node가 정상적으로 등록되었는지 확인합니다.
$knife node list
등록된 Node의 상세 정보를 확인합니다.
$knife node show aws-opsworks-node-01
Server의 대시보드에 접속 후 [Infrastructure] 메뉴를 클릭하여 Client Run Status 확인을 위해 [노드명] 을 클릭합니다.
Node의 정보가 정상적으로 등록되었음을 확인할 수 있습니다.
Client Node의 Check-In 과정에서 [learn_chef_apache2] Cookbook을 실행하여, node에 apache와 웹 소스가 배포되도록 설정되었으며, 'curl node-ip-address' 을 입력하여 서버에 접속을 확인합니다.
5. Node에 Template 코드 추가 및 소스 배포
Node에 배포된 소스를 수정하기 위해 Workstation에 접속 후 learn_chef_apache2 Cookbook의 'templates' 폴더에 접속합니다.
vi를 통해 index.html.erb 파일을 오픈하여 소스를 수정하고 저장합니다.
$cd ~/learn-chef/cookbooks/learn_chef_apache2/templates/
vi index.html.erb
<h1>hello world</h1> 을 <h1>hello world modified node 01</h1> 로 수정합니다.
learn_chef_apache2 폴더로 이동 후 vi를 이용하여 metadata.rb 파일을 오픈하고 버전 정보를 수정하여 저장합니다.
기존 버전 : 0.1.0 수정 후 버전 : 0.1.1
$cd..
$vi metadata.rb
learn-chef 폴더로 이동 후 knife cookbook upload 명령어를 수행하여 소스를 업로드합니다.
$cd ~/learn-chef/
$knife cookbook upload learn_chef_apache2
업로드한 Cookbook을 배포하기 위해 cookbook 업데이트를 수행합니다.
$knife ssh 'name:aws-opsworks-node-01' 'sudo chef-client' --ssh-user ubuntu --ssh-identity-file ~/.ssh/chef-keypair.pem --attribute 노드IP주소
Chef Automate 서버의 대시보드에 접속 후 [Client Runs] 메뉴에서 소스가 정상적으로 배포되었음을 확인합니다.
6. Chef Automate Node 제거
Workstation (터미널) 에 접속 후 Node를 제거합니다.
$knife node list
$knife node delete aws-opsworks-node-01
$knife client delete aws-opsworks-node-01
대시보드에 접속 후 Node 가 정상적으로 삭제되었음을 확인합니다.
마지막으로 OpsWorks 를 삭제하고 추가로 생성한 EC2 S3 IAM사용자 등이 모두 삭제하셔야 요금이 나오지 않게 하셔야 합니다!
끝~~~
'클라우드 > AWS' 카테고리의 다른 글
Terraform 기초 튜토리얼 (0) | 2021.05.13 |
---|---|
Lambda와 S3로 이미지 썸네일 생성 (0) | 2021.04.08 |
웹 서버에서 실행되는 PHP 애플리케이션에 MySQL 데이터베이스 연결하기 (0) | 2021.03.30 |
AWS S3와 Ubuntu gnuboard간 파일 자동 백업 (0) | 2021.03.10 |
AWS S3와 Window간 파일 자동 백업 (0) | 2021.03.08 |
댓글