간략한 설명: 쿡북, 레시피, 스택 속성 AWS OpsWorks - AWS OpsWorks

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

간략한 설명: 쿡북, 레시피, 스택 속성 AWS OpsWorks

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 고객과 기존 고객 모두 사용할 수 없게 되었습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의하세요.

이제 앱 및 데이터베이스 서버는 생성되었지만 사용할 준비가 되려면 아직 많은 작업이 필요합니다. 여전히 데이터베이스를 설정하고 앱의 연결 설정을 구성해야 합니다. AWS OpsWorks Stacks는 이러한 작업을 자동으로 처리하지는 않지만 Chef 쿡북, 레시피 및 동적 속성은 지원합니다. 데이터베이스 설정용 레시피와 앱 연결 설정 구성용 레시피 한 쌍을 구현하여 AWS OpsWorks Stacks에서 자동으로 실행하도록 할 수 있습니다.

필요한 레시피가 포함된 phpapp 쿡북이 이미 구현되어 사용 가능한 상태입니다. 원할 경우 3.3단계: 사용자 지정 쿡북 추가 MyStack 섹션으 단원으로 건너뛸 수 있습니다. 자세히 알아보기를 원할 경우 이 섹션에서 쿡북 및 레시피에 대한 배경 지식을 제공하고 레시피가 작동하는 방식을 설명합니다. 쿡북 자체에 대해 알아보려면 phpapp cookbook 단원을 참조하세요.

레시피와 속성

Chef 레시피는 기본적으로 패키지 설치, 구성 파일 생성, shell 명령 실행 등 인스턴스에 대한 작업을 수행하는 특수한 Ruby 애플리케이션입니다. 관련된 레시피의 그룹은 쿡북으로 구성됩니다. 여기에는 구성 파일을 생성하기 위한 템플릿과 같은 지원 파일도 포함됩니다.

AWS OpsWorks Stacks에는 빌트인 레이어를 지원하는 쿡북 세트가 있습니다. 인스턴스에 대한 사용자 지정 작업을 수행하기 위해 자체 레시피로 구성된 사용자 지정 쿡북을 생성할 수도 있습니다. 이 주제에서는 레시피를 간략히 소개하고 레시피를 사용하여 데이터베이스를 설정하고 앱의 연결 설정을 구성하는 방법을 살펴봅니다. 쿡북 및 레시피에 대한 자세한 정보는 쿡북과 레시피 또는 스택 사용자 지정 AWS OpsWorks 단원을 참조하세요.

레시피는 일반적으로 Chef 속성을 입력 데이터로 사용합니다.

  • 일부 속성은 Chef에 의해 정의되며 운영 체제와 같이 인스턴스에 대한 기본 정보를 제공합니다.

  • AWS OpsWorks 스택은 스택 (예: 레이어 구성) 과 배포된 앱 (예: 앱 리포지토리) 에 대한 정보가 포함된 속성 세트를 정의합니다.

    사용자 지정 JSON을 스택 또는 배포에 할당하여 여기에 사용자 지정 속성을 추가할 수 있습니다.

  • 또한 쿡북에서 쿡북 고유 속성을 정의할 수 있습니다.

    phpapp 쿡북 속성은 attributes/default.rb에서 정의됩니다.

Stacks 속성의 전체 목록은 및 을 참조하십시오. AWS OpsWorks 스택 구성 및 배포 속성: Linux 내장 쿡북 속성 자세한 정보는 속성 재정의을 참조하세요.

속성은 계층 구조로 구성되며, JSON 객체로 표현될 수 있습니다.

다음과 같이 Chef 노드 구문을 사용하여 이 데이터를 애플리케이션에 통합합니다.

[:deploy][:simplephpapp][:database][:username]

deploy 노드에는 앱의 데이터베이스, Git 리포지토리 등에 대한 정보를 포함하는 단일 앱 노드 simplephpapp이 있습니다. 예제는 데이터베이스 사용자 이름의 값을 나타냅니다. 이 값은 root로 확인됩니다.

데이터베이스 설정

MySQL 계층의 내장 설정 레시피는 앱의 짧은 이름으로 명명된 데이터베이스를 자동으로 생성합니다. 그러므로 이 예제를 위해 simplephpapp이라는 데이터베이스가 이미 생성되어 있습니다. 하지만 앱이 데이터를 저장할 테이블을 생성하여 설정을 마쳐야 합니다. 테이블을 수동으로 생성할 수도 있지만, 사용자 지정 레시피를 구현하여 작업을 처리하고 AWS OpsWorks Stacks에서 자동으로 실행하도록 하는 것이 더 좋습니다. 이 섹션에서는 어떻게 레시피 dbsetup.rb가 구현되는지 설명합니다. AWS OpsWorks Stacks에서 레시피를 실행하는 절차는 나중에 설명합니다.

리포지토리의 레시피를 보려면 db설정.rb를 참조하세요. 다음 예제는 dbsetup.rb 코드를 보여줍니다.

execute는 지정된 명령을 실행하는 Chef 리소스입니다. 여기서는 테이블을 생성하는 MySQL 명령입니다. not_if 명령은 지정된 테이블이 이미 존재할 경우 명령이 실행되지 않게 합니다. Chef 리소스에 대한 자세한 정보는 About Resources and Providers를 참조하세요.

레시피는 앞서 설명한 노드 구문을 사용하여 속성 값을 명령 문자열에 삽입합니다. 예를 들어 다음 레시피는 데이터베이스의 사용자 이름을 삽입합니다.

#{deploy[:database][:username]}

약간은 퍼즐 같은 이 코드를 풀어 보겠습니다.

  • 각 반복에서, deploy는 현재 앱 노드로 설정됩니다. 따라서 [:deploy][:app_name]으로 확인됩니다. 이 예제에서는 [:deploy][:simplephpapp]으로 확인됩니다.

  • 앞서 제시한 배포 속성 값을 사용하여 전체 노드가 root로 확인됩니다.

  • 노드를 #{ }로 묶어 문자열에 삽입합니다.

다른 노드도 대부분 비슷한 방식으로 확인됩니다. #{node[:phpapp][:dbtable]}은 예외입니다. 이 노드는 사용자 지정 쿡북의 속성 파일에 의해 정의되며 테이블 이름 urler로 확인됩니다. 따라서 MySQL 인스턴스에 실행되는 실제 명령은 다음과 같습니다.

"/usr/bin/mysql -uroot -pvjud1hw5v8 simplephpapp -e'CREATE TABLE urler( id INT UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(63) NOT NULL, message TEXT, PRIMARY KEY (id))' "

이 명령은 배포 속성의 자격 증명 및 데이터베이스 이름을 사용하여 id, author 및 message 필드를 포함하는 테이블 urler을 생성합니다.

데이터베이스에 애플리케이션 연결

퍼즐의 두 번째 부분은 테이블에 액세스하기 위해 데이터베이스 암호 같은 연결 정보가 필요한 애플리케이션입니다. SimplePHPApp은 작업 파일이 app.php 하나뿐입니다. index.php가 수행하는 작업은 app.php를 로드하는 것 뿐입니다.

app.php에는 데이터베이스 연결을 처리하는 db-connect.php가 포함됩니다. 하지만 이 파일은 리포지토리에 없습니다. db-connect.php를 미리 생성할 수는 없습니다. 이 파일은 특정 인스턴스를 기반으로 데이터베이스를 정의하기 때문입니다. 그 대신, appsetup.rb 레시피가 배포 속성의 연결 데이터를 사용하여 db-connect.php를 생성합니다.

리포지토리의 레시피를 보려면 app설정.rb를 참조하세요. 다음 예제는 appsetup.rb 코드를 보여줍니다.

dbsetup.rb처럼, appsetup.rbdeploy 노드에 있는 앱을 반복합니다. 다시 말하지만 단순한 phappapp일 뿐입니다. 이 레시피는 script 리소스 및 template 리소스를 포함하는 코드 블록을 실행합니다.

script 리소스는 PHP 애플리케이션용 종속성 관리자인 Composer를 설치합니다. 그런 다음 Composer의 install 명령을 실행하여 샘플 애플리케이션의 종속 파일을 앱의 루트 디렉터리에 설치합니다.

template 리소스는 db-connect.php를 생성하여 /srv/www/simplephpapp/current에 저장합니다. 유의할 사항:

  • 이 레시피는 조건문을 사용하여 인스턴스의 운영 체제에 따라 달라지는 파일 소유자를 지정합니다.

  • only_if 명령은 Chef에게 지정된 디렉터리가 존재하는 경우에만 템플릿을 생성하도록 지시합니다.

template 리소스는 연결된 파일과 기본적으로 콘텐츠 및 구조가 동일한 템플릿에서 작동하지만 다양한 데이터 값을 위한 자리 표시자를 포함합니다. source 파라미터는 phpapp 쿡북의 db-connect.php.erb 디렉터리에 위치하는 템플릿 templates/default를 지정하며 다음을 포함합니다.

Chef가 템플릿을 처리할 때 <%= => 자리 표시자를 템플릿 리소스 해당 변수의 값으로 바꿉니다. 이들 값은 배포 속성에서 가져온 것입니다. 생성된 파일은 다음과 같습니다.