BLOG

Chef Automate용 AWS OpsWorks에서 자동으로 사용자 정의 적용하기
작성일: 2018-10-29

필수 유지 관리 기간 동안 Chef Automate용 AWS OpsWorks는 Chef Server 및 Chef Automate 버전, 보안 및 운영 체제 패치를 수행합니다. Chef의 버전 업데이트는 광범위한 테스트를 거쳐 제작 준비 상태인지 확인하고 기존 환경을 방해하지 않습니다.

 

인스턴스를 교체할 때 고객은 유지 관리가 완료된 후 프로그램 방식으로 사용자 지정 설정을 어떻게 복원 할 수 있는지 묻습니다. 이 글은 AWS Lambda 및 AWS Systems Manager를 사용하는 솔루션을 탐색하여 유지 보수 기간이 경과 한 후에 자동으로 구성을 재적용 할 수 있도록 합니다.

 

개요

이 솔루션은 서버가 유지 보수를 완료 한 후에 Systems Manager 문서를 실행하는 데 필요한 모든 자원을 작성합니다. AWS CloudFormation을 사용하여 시작되며 솔루션의 핵심이 될 Lambda 함수를 위한 Amazon S3 트리거를 생성하고, Chef Automate용 OpsWorks 인스턴스에서 명령을 실행하는 Systems Manager 문서, 스케줄에서 Lambda 함수를 트리거하는 Amazon CloudWatch 이벤트, 알림을 위한 Amazon SNS 주제 및 필요한 모든 AWS IAM (Identity and Access Management) 권한을 제공합니다.

 

워크 플로우

Chef Automate용 OpsWorks 유지 보수가 시작되면 Amazon S3 트리거를 통해 Lambda 함수가 호출됩니다. 이 함수는 먼저 CloudWatch 이벤트가 20 분이 경과 한 후 1 분마다 함수를 호출하도록 구성합니다.

 

서버 유지 관리가 완료되고 정상적인 상태가 되면 Lambda 함수는 Chef Automate용 OpsWorks 인스턴스를 대상으로 시스템 관리자 실행 명령을 실행합니다. 이 명령은 사용자 지정 구성을 설정하는 Chef recipe가 포함된 zip 파일을 다운로드합니다.

 

이 작업이 완료되면 Lambda 함수는 CloudWatch 이벤트를 비활성화하여 불필요한 호출을 방지합니다. 또한 유지 관리에 문제가 있는 경우 SNS 주제를 사용하여 알림을 보냅니다.

 

 

 

다음은 유지 관리가 트리거 될 때 발생하는 일련의 이벤트입니다. 수동이든 또는 Chef Automate Maintenance Windows용 OpsWorks이든 관계 없습니다.

 

  1. 객체가 Amazon S3 버킷에 배치됩니다.
  2. 이벤트가 Lambda 함수를 트리거합니다.
  3. Lambda는 CloudWatch 이벤트를 수정하여 20 분이 지난 후 1 분마다 실행하고 이를 활성화합니다.
  4. AWS Lambda는 Chef Automate용 OpsWorks 서버의 상태를 확인합니다.
  5. 20 분이 지나면 CloudWatch 이벤트가 Lambda 함수를 트리거합니다.
  6. 서버가 “정상” 상태 인 경우 AWS Lambda는 인스턴스에 대해 시스템 관리자 실행 명령을 실행합니다.

 

6a. 서버가 다른 상태 인 경우 AWS Lambda는 SNS 주제에 메시지를 게시하고 CloudWatch 이벤트를 비활성화합니다.

 

6b. SNS는 서버 상태를 알려주는 전자 메일을 보냅니다.

 

  1. Systems Manager는 zip 아카이브를 다운로드하여 / tmp / chow / 디렉토리에 압축을 풀고 “chef-apply”를 사용하여 해당 처치를 실행합니다.

 

설정

CloudFormation 템플릿을 실제로 실행하려면 먼저 S3 버킷에 recipe를 작성하고 업로드해야합니다. 또한 Chef Automate용 OpsWorks 서버의 이름과 Chef Automate용 OpsWorks에서 만든 S3 버킷 이름을 수집하여 CloudFormation 스택에 사용해야 합니다.

 

Chef Automate 구성 변경을 시뮬레이션하려면 /etc/delivery/delivery.rb 파일에 주석을 포함시킵니다. Chef Automate 인스턴스에서 파일의 복사본을 만들어 workstation에 저장하고 맨 위에 줄을 추가합니다 : “#Hello AWS!”

 

recipe의 경우 remote_file 리소스를 사용하여 올바른 위치로 수정된 delivery.rb 파일을 복사한 다음 실행 리소스를 사용하여 Chef Automate를 다시 구성합니다.

 

[ruby]

execute ‘reconfigure’ do

  command ‘delivery-ctl reconfigure’

  action :nothing

end

 

remote_file ‘delivery.rb’ do

  source ‘file:///tmp/chow/delivery.rb’

  path ‘/etc/delivery/delivery.rb’

  owner ‘root’

  group ‘root’

  mode ‘640’

  notifies :run, ‘execute[reconfigure]’, :immediately

end

 

이 recipe는 / tmp / chow / 임시 디렉토리에 있는 delivery.rb 파일을 Chef Automate 구성 /etc/delivery/delivery.rb의 위치로 복사합니다. 이 작업이 끝나면 delivery-ctl reconfigure 명령을 실행하고 구성을 업데이트하도록 재구성 리소스에 알립니다.

 

“delivery.rb”와 “recipe.rb”가 모두 생성된 상태에서 최상위 레벨에 있는 두 개의 파일로 구성된 새로운 zip 아카이브를 만들어 Chef Automate 서버와 동일한 AWS 리전의 S3 버킷에 업로드하십시오.

 

스택 시작하기

이제 모든 지원 파일이 구성되었으므로 여기에서 다운로드 할 수 있는 템플릿에서 CloudFormation 스택을 시작하십시오.

 

이 템플릿에는 5 개의 매개 변수가 있으며 실행하기 전에 4 개의 매개 변수가 필요합니다.

 

ServerName : Chef automate 서버용 OpsWorks의 이름입니다.

 

OWCABucketName :  Chef Automate용 OpsWorks에서 만든 버킷입니다. 여기에는 서버 백업 및 시스템 관리자 로그가 포함됩니다. Amazon S3 콘솔에서 이 버킷을 찾을 수 있습니다. 이름 지정 체계는 “aws-opsworks-cm-SERVER-NAME-abcd123456″입니다. 여기서 “abcd123456″은 임의의 숫자 문자열이고 “SERVER-NAME”은 Chef Automate 서버의 이름입니다. 이 버킷은 Chef Automate 서버와 같은 리전에 있습니다.

 

RecipeBucketName : zip 파일을 업로드한 버킷의 이름입니다.

 

RecipeKeyName : zip 파일의 키입니다. 버킷의 루트에 업로드하면 객체의 이름이됩니다. 그러나 버킷 내의 폴더에 업로드하면 키는 “folder / sub-folder / object.zip”이라는 이름 지정 체계를 따릅니다.

 

NotificationEmail : 유지 관리에 문제가 있는 경우 알림을 받을 전자 메일 주소입니다. 이 매개 변수는 선택 사항이므로 알림을 받지 않으려면 이 매개 변수를 비워 둘 수 있습니다.

 

모든 매개 변수를 채우고 나서 스택을 시작하십시오. 모든 리소스를 만드는 데 몇 분이 걸릴 것입니다.

 

스택 리소스가 준비되고 스택이 “CREATE_COMPLETE” 상태가 되면 테스트 할 수 있습니다. 이렇게 하려면 명령을 실행하기 위해 AWS CLI를 사용하여 Chef Automate 서버에서 유지 관리를 수동으로 트리거하면 됩니다.

 

aws opsworks-cm start-maintenance –server-name $Server-Name –region $Region

 

백업을 만들고 Chef Automate 인스턴스를 교체하는 동안 이 프로세스를 완료하는 데 약 20 분이 소요됩니다. 함수에 대한 CloudWatch 로그를 조사하여 Lambda 함수 “CHOW”가 호출되는지 확인할 수 있습니다.

 

유지 관리가 완료되고 서버가 “정상” 상태가 되면 SSH를 사용하여 서버에 연결하고 /etc/delivery/delivery.rb 파일을 열어 모든 변경 사항이 적용되었는지 확인할 수 있습니다.

 

결론

이 글은 모든 유지 보수 기간 후에 chef recipe를 어떻게 실행할 수 있는지 보여주었습니다. 이 솔루션은 CloudFormation이 지원하므로 이식성이 뛰어납니다. 이를 사용하여 서버에 원하는 사용자 정의를 적용하고 유지 보수가 완료된 후 자동으로 다시 적용되도록 할 수 있습니다.

 

수행된 작업은 파일을 다른 것으로 교체하는, 아주 간단한 작업이었지만 모니터링 소프트웨어 설치, 추가 파일 추가 또는 필요한 다른 작업과 같은 추가 수정 작업을 위해 Chef 리소스를 사용할 수 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/mt/applying-customizations-automatically-in-aws-opsworks-for-chef-automate/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.