기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
간략한 설명: 요리책, 레시피, AWS OpsWorks 스택 속성
중요
The AWS OpsWorks Stacks 서비스 수명이 2024년 5월 26일에 종료되었으며 신규 및 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 다음 연락처로 문의하십시오. AWS Support 팀 구성: AWS re:포스트 포스트
이제 앱 및 데이터베이스 서버는 생성되었지만 사용할 준비가 되려면 아직 많은 작업이 필요합니다. 데이터베이스를 설정하고 앱의 연결 설정을 구성해야 합니다. AWS OpsWorks Stacks가 이러한 작업을 자동으로 처리하지는 않지만 Chef 쿡북, 레시피 및 동적 속성을 지원합니다. 한 쌍의 레시피를 구현할 수 있습니다. 하나는 데이터베이스를 설정하는 것이고 다른 하나는 앱의 연결 설정을 구성하기 위한 것입니다. AWS OpsWorks 스택이 자동으로 실행합니다.
필요한 레시피가 포함된 phpapp 쿡북이 이미 구현되어 사용 가능한 상태입니다. 원할 경우 3.3단계: 사용자 지정 쿡북 추가 MyStack 섹션으 단원으로 건너뛸 수 있습니다. 자세히 알아보기를 원할 경우 이 섹션에서 쿡북 및 레시피에 대한 배경 지식을 제공하고 레시피가 작동하는 방식을 설명합니다. 쿡북 자체에 대해 알아보려면 phpapp cookbook
레시피와 속성
Chef 레시피는 기본적으로 패키지 설치, 구성 파일 생성, shell 명령 실행 등 인스턴스에 대한 작업을 수행하는 특수한 Ruby 애플리케이션입니다. 관련된 레시피의 그룹은 쿡북으로 구성됩니다. 여기에는 구성 파일을 생성하기 위한 템플릿과 같은 지원 파일도 포함됩니다.
AWS OpsWorks Stacks에는 내장 레이어를 지원하는 쿡북 세트가 있습니다. 인스턴스에 대한 사용자 지정 작업을 수행하기 위해 자체 레시피로 구성된 사용자 지정 쿡북을 생성할 수도 있습니다. 이 주제에서는 레시피를 간략히 소개하고 레시피를 사용하여 데이터베이스를 설정하고 앱의 연결 설정을 구성하는 방법을 살펴봅니다. 쿡북 및 레시피에 대한 자세한 정보는 쿡북과 레시피 또는 커스터마이징 AWS OpsWorks 스택 단원을 참조하세요.
레시피는 일반적으로 Chef 속성을 입력 데이터로 사용합니다.
-
일부 속성은 Chef에 의해 정의되며 운영 체제와 같이 인스턴스에 대한 기본 정보를 제공합니다.
-
AWS OpsWorks 스택은 스택 (예: 레이어 구성) 과 배포된 앱 (예: 앱 리포지토리) 에 대한 정보가 포함된 속성 세트를 정의합니다.
-
또한 쿡북에서 쿡북 고유 속성을 정의할 수 있습니다.
phpapp 쿡북 속성은
attributes/default.rb
에서 정의됩니다.
전체 목록은 다음과 같습니다. AWS OpsWorks 스택 속성은 스택 구성 및 배포 속성: Linux 및 을 참조하십시오. 내장 쿡북 속성 자세한 내용은 속성 재정의 단원을 참조하십시오.
속성은 객체로 표현될 수 있는 계층 구조로 구성됩니다. JSON
다음과 같이 Chef 노드 구문을 사용하여 이 데이터를 애플리케이션에 통합합니다.
[:deploy][:simplephpapp][:database][:username]
deploy
노드에는 앱의 데이터베이스, Git 리포지토리 등에 대한 정보를 포함하는 단일 앱 노드 simplephpapp
이 있습니다. 예제는 데이터베이스 사용자 이름의 값을 나타냅니다. 이 값은 root
로 확인됩니다.
데이터베이스 설정
내 SQL 레이어에 내장된 설치 레시피는 앱의 단축 이름으로 이름이 지정된 앱용 데이터베이스를 자동으로 생성하므로 이 예제에서는 simplephpapp라는 이름의 데이터베이스가 이미 있습니다. 하지만 앱이 데이터를 저장할 테이블을 생성하여 설정을 마쳐야 합니다. 테이블을 수동으로 생성할 수도 있지만, 더 나은 방법은 사용자 지정 레시피를 구현하여 작업을 처리하는 것입니다. AWS OpsWorks 스택이 대신 실행합니다. 이 섹션에서는 어떻게 레시피 dbsetup.rb
가 구현되는지 설명합니다. 보유하기 위한 절차 AWS OpsWorks 스택 실행 레시피는 나중에 설명합니다.
리포지토리의 레시피를 보려면 db설정.rbdbsetup.rb
코드를 보여줍니다.
execute
는 지정된 명령을 실행하는 Chef 리소스입니다. 이 경우 테이블을 생성하는 것은 My SQL 명령입니다. not_if
명령은 지정된 테이블이 이미 존재할 경우 명령이 실행되지 않게 합니다. Chef 리소스에 대한 자세한 정보는 About Resources and Providers
레시피는 앞서 설명한 노드 구문을 사용하여 속성 값을 명령 문자열에 삽입합니다. 예를 들어 다음 레시피는 데이터베이스의 사용자 이름을 삽입합니다.
#{deploy[:database][:username]}
약간은 퍼즐 같은 이 코드를 풀어 보겠습니다.
-
각 반복에서,
deploy
는 현재 앱 노드로 설정됩니다. 따라서[:deploy][:
으로 확인됩니다. 이 예제에서는app_name
][:deploy][:simplephpapp]
으로 확인됩니다. -
앞서 제시한 배포 속성 값을 사용하여 전체 노드가
root
로 확인됩니다. -
노드를 #{ }로 묶어 문자열에 삽입합니다.
다른 노드도 대부분 비슷한 방식으로 확인됩니다. #{node[:phpapp][:dbtable]}
은 예외입니다. 이 노드는 사용자 지정 쿡북의 속성 파일에 의해 정의되며 테이블 이름 urler
로 확인됩니다. 따라서 My SQL 인스턴스에서 실행되는 실제 명령은 다음과 같습니다.
"/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
을 생성합니다.
데이터베이스에 애플리케이션 연결
퍼즐의 두 번째 부분은 테이블에 액세스하기 위해 데이터베이스 암호 같은 연결 정보가 필요한 애플리케이션입니다. S에는 implePHPApp 사실상 작업 파일이 하나뿐이고, app.php
로드만 하면 app.php
됩니다. index.php
app.php
에는 데이터베이스 연결을 처리하는 db-connect.php
가 포함됩니다. 하지만 이 파일은 리포지토리에 없습니다. db-connect.php
를 미리 생성할 수는 없습니다. 이 파일은 특정 인스턴스를 기반으로 데이터베이스를 정의하기 때문입니다. 그 대신, appsetup.rb
레시피가 배포 속성의 연결 데이터를 사용하여 db-connect.php
를 생성합니다.
리포지토리의 레시피를 보려면 app설정.rbappsetup.rb
코드를 보여줍니다.
dbsetup.rb
처럼, appsetup.rb
는 deploy
노드에 있는 앱을 반복합니다. 다시 말하지만 단순한 phappapp일 뿐입니다. 이 레시피는 script
리소스 및 template
리소스를 포함하는 코드 블록을 실행합니다.
script
리소스는 애플리케이션용 종속성 관리자인 Composer를install
명령을 실행하여 샘플 애플리케이션의 종속 파일을 앱의 루트 디렉터리에 설치합니다.
template
리소스는 db-connect.php
를 생성하여 /srv/www/simplephpapp/current
에 저장합니다. 유의할 사항:
-
이 레시피는 조건문을 사용하여 인스턴스의 운영 체제에 따라 달라지는 파일 소유자를 지정합니다.
-
only_if
명령은 Chef에게 지정된 디렉터리가 존재하는 경우에만 템플릿을 생성하도록 지시합니다.
template
리소스는 연결된 파일과 기본적으로 콘텐츠 및 구조가 동일한 템플릿에서 작동하지만 다양한 데이터 값을 위한 자리 표시자를 포함합니다. source
파라미터는 phpapp 쿡북의 db-connect.php.erb
디렉터리에 위치하는 템플릿 templates/default
를 지정하며 다음을 포함합니다.
Chef가 템플릿을 처리할 때 <%= =>
자리 표시자를 템플릿 리소스 해당 변수의 값으로 바꿉니다. 이들 값은 배포 속성에서 가져온 것입니다. 생성된 파일은 다음과 같습니다.