본문 바로가기
  • 클라우드야 나랑 친해지자!
클라우드/AWS

AWS OpsWorks for Chef Automate

by 정민규 2021. 4. 8.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

교재 <아마존 웹 서비스 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사용자 등이 모두 삭제하셔야 요금이 나오지 않게 하셔야 합니다!

 

 

끝~~~

 

반응형

댓글