2.5단계: 앱 배포 - AWS OpsWorks

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

2.5단계: 앱 배포

중요

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

IIS 설치는 애플리케이션의 코드와 관련 파일을 위한 C:\inetpub\wwwroot 디렉터리를 생성합니다. 다음 단계는 이 디렉터리에 앱을 설치하는 것입니다. 이 예제에서는 정적 HTML 홈 페이지인 default.htmlC:\inetpub\wwwroot에 설치합니다. 일반적인 방법을 쉽게 확장하여 ASP.NET 애플리케이션 같은 보다 복잡한 시나리오도 처리할 수 있습니다.

애플리케이션의 파일을 쿡북에 포함시키고, install.rb가 이러한 파일을 C:\inetpub\wwwroot에 복사하도록 할 수 있습니다. 이렇게 하는 방법의 예제는 예제 6: 파일 생성 섹션을 참조하세요. 다만 이 방법은 아주 유연하거나 효율적이지는 않으며, 일반적으로는 쿡북 개발과 애플리케이션 개발을 분리하는 것이 좋습니다.

기본 해결 방법은 쿡북 리포지토리뿐 아니라 원하는 리포지토리에서 애플리케이션의 코드 및 관련 파일을 가져와 각 IIS 서버 인스턴스에 설치하는 별도의 배포 레시피를 구현하는 것입니다. 이 방법은 쿡북 개발과 애플리케이션 개발을 분리하며, 앱을 업데이트해야 하는 경우에는 쿡북을 업데이트할 필요 없이 배포 레시피를 다시 실행하기만 하면 됩니다.

이 주제에서는 default.htm을 IIS 서버에 배포하는 간단한 배포 레시피를 구현하는 방법을 살펴봅니다. 이 예제는 보다 복잡한 애플리케이션으로 쉽게 확장할 수 있습니다.

애플리케이션을 생성하여 리포지토리에 저장

선호하는 어떤 리포지토리도 애플리케이션에 사용할 수 있습니다. 간단히 하기 위해 이 예제에서는 default.htm을 퍼블릭 S3 버킷에 저장합니다.

애플리케이션을 생성하려면
  1. 워크스테이션의 편리한 위치에 디렉터리 iis-application을 만듭니다.

  2. iis-application에 다음 콘텐츠가 포함된 default.htm 파일을 추가합니다.

    <!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  3. S3 버킷을 생성하고, 버킷에 default.htm을 업로드하고, 나중에 사용하기 위해 이 URL을 적어 둡니다. 간단하게 설명하기 위해 이 파일을 퍼블릭으로 설정합니다.

    참고

    이는 매우 간단한 애플리케이션이지만 프로덕션 레벨 애플리케이션을 처리하기 위해 기본 원칙을 확장할 수 있습니다.

    • 여러 파일이 있는 복잡한 애플리케이션의 경우 일반적으로 iis-application의 .zip 아카이브를 생성하여 S3 버킷에 업로드하는 것이 더 간단합니다.

      그런 다음 이 .zip 파일을 다운로드하고 내용을 적절한 디렉터리에 추출할 수 있습니다. 여러 파일을 다운로드하거나 디렉터리 구조를 생성하는 등의 작업을 수행할 필요가 없습니다.

    • 프로덕션 애플리케이션의 경우 파일을 프라이빗으로 유지해야 할 것입니다. 프라이빗 S3 버킷에서 레시피 다운로드 파일을 얻는 방법의 예는 스택 윈도우 AWS OpsWorks 인스턴스에서 Ruby용 SDK 사용하기 단원을 참조하세요.

    • 애플리케이션은 적절한 모든 리포지토리에 저장할 수 있습니다.

      애플리케이션은 일반적으로 리포지토리의 퍼블릭 API를 사용하여 다운로드합니다. 이 예에서는 Amazon S3 API를 사용합니다. 예를 들어 애플리케이션을 저장해 두면 API를 GitHub 사용할 수 있습니다. GitHub

레시피를 구현하여 애플리케이션 배포

다음 내용이 포함된 deploy.rb 레시피를 iis-cookbook recipes 디렉터리에 추가합니다.

chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' #1 # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt' Aws.use_bundled_cert! #2 query = Chef::Search::Query.new app = query.search(:aws_opsworks_app, "type:other").first s3region = app[0][:environment][:S3REGION] s3bucket = app[0][:environment][:BUCKET] s3filename = app[0][:environment][:FILENAME] #3 s3_client = Aws::S3::Client.new(region: s3region) s3_client.get_object(bucket: s3bucket, key: s3filename, response_target: 'C:\inetpub\wwwroot\default.htm') end action :run end

이 예제는 SDK for Ruby v2를 사용하여 파일을 다운로드합니다. 하지만 AWS OpsWorks Stacks는 Windows 인스턴스에 이 SDK를 설치하지 않으므로 레시피는 해당 작업을 처리하는 chef_gem리소스로 시작합니다.

참고

chef_gem 리소스는 레시피가 사용하는 버전인 Chef의 전용 Ruby 버전에 gem을 설치합니다. 시스템 전체 Ruby 버전용 gem을 설치하려면 gem_package 리소스를 사용하세요.

레시피의 대부분인 ruby_block 리소스는 SDK for Ruby를 사용하여 default.htm을 다운로드하는 Ruby 코드의 블록을 실행합니다. ruby_block의 코드는 코드 예제에서 번호가 지정된 설명에 해당하는 다음과 같은 섹션으로 나눌 수 있습니다.

1: 인증서 번들 지정

Amazon S3는 SSL을 사용하므로 S3 버킷에서 객체를 다운로드하려면 적절한 인증서가 필요합니다. Ruby v2용 SDK에는 인증서 번들이 포함되어 있지 않으므로 인증서 번들을 제공하고 이를 사용하려면 Ruby용 SDK를 구성해야 합니다. AWS OpsWorks Stacks는 인증서 번들을 직접 설치하지 않지만 인증서 curl-ca-bundle.crt 번들 () 이 포함된 Git은 설치합니다. 편의상 이 예제에서는 SDK for Ruby가 SSL용 Git 인증서 번들을 사용하도록 구성합니다. 자체 SDK를 설치하고 적절히 구성할 수도 있습니다.

2: 리포지토리 데이터 검색

Amazon S3에서 객체를 다운로드하려면 AWS 리전, 버킷 이름, 키 이름이 필요합니다. 뒤에서 설명하겠지만 이 예제는 환경 변수 세트를 앱에 연결하여 이 정보를 제공합니다. 앱을 배포할 때 AWS OpsWorks Stacks는 인스턴스의 노드 객체에 속성 세트를 추가합니다. 이 속성들은 기본적으로 환경 변수를 비롯한 앱 구성이 포함된 해시 테이블입니다. 이 애플리케이션의 앱 속성은 다음과 비슷한 JSON 형식으로 되어 있습니다.

{ "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3", "app_source": { "password": null, "revision": null, "ssh_key": null, "type": "other", "url": null, "user": null }, "attributes": { "auto_bundle_on_deploy": true, "aws_flow_ruby_settings": {}, "document_root": null, "rails_env": null }, "data_sources": [{"type": "None"}], "domains": ["iis_example_app"], "enable_ssl": false, "environment": { "S3REGION": "us-west-2", "BUCKET": "windows-example-app", "FILENAME": "default.htm" }, "name": "IIS-Example-App", "shortname": "iis_example_app", "ssl_configuration": { "certificate": null, "private_key": null, "chain": null }, "type": "other", "deploy": true }

앱의 환경 변수는 [:environment] 속성에 저장됩니다. 이 환경 변수를 검색하려면 Chef 검색 쿼리를 사용하여 앱의 해시 테이블을 검색합니다(aws_opsworks_app 노드 아래에 있음). 이 앱은 other 유형으로 정의되므로 쿼리는 해당 유형의 앱을 검색합니다. 레시피는 이 인스턴스에 앱이 하나뿐이라는 점을 활용하므로 관심 대상 해시 테이블은 단순히 app[0]입니다. 편의상 레시피는 그 다음에 리전, 버킷 및 파일 이름을 변수에 할당합니다.

Chef 검색을 사용하는 방법에 대한 자세한 정보는 Chef 검색을 사용하여 속성 값 가져오기 단원을 참조하세요.

3: 파일 다운로드

레시피의 세 번째 부분은 S3 클라이언트 객체를 생성하고 get_object 메서드를 사용하여 default.htm을 인스턴스의 C:\inetpub\wwwroot 디렉터리에 다운로드합니다.

참고

레시피는 Ruby 애플리케이션입니다. 따라서 Ruby 코드가 반드시 ruby_block에 있을 필요는 없습니다. 하지만 레시피 본문의 코드가 먼저 실행된 다음 리소스들이 순서대로 실행됩니다. 이 예제에서는 다운로드 코드를 레시피 본문에 배치하면 코드가 실패합니다. chef_gem 리소스가 아직 SDK for Ruby를 설치하지 않았기 때문입니다. 리소스가 실행될 때 ruby_block 리소스 내 코드가 실행되며, 이는 chef_gem 리소스가 SDK for Ruby를 설치한 후에 이루어집니다.

인스턴스의 쿡북 업데이트

AWS OpsWorks Stacks는 새 인스턴스에 사용자 지정 쿡북을 자동으로 설치합니다. 하지만 기존 인스턴스에서 작업 중이므로 수동으로 쿡북을 업데이트해야 합니다.

인스턴스의 쿡북을 업데이트하려면
  1. iis-cookbook.zip 아카이브를 만들어 S3 버킷에 업로드합니다.

    이렇게 하면 기존 쿡북을 덮어쓰지만 URL은 동일하게 유지되므로 스택 구성을 업데이트할 필요가 없습니다.

  2. 인스턴스가 온라인 상태가 아니면 인스턴스를 다시 시작하세요.

  3. 인스턴스가 온라인 상태가 되면 탐색 창에서 [스택]을 선택한 다음 [명령 실행]을 선택합니다.

  4. [명령]에 대해서는 [사용자 지정 쿡북 업데이트]를 선택합니다. 이 명령은 업데이트된 쿡북을 인스턴스에 설치합니다.

  5. [사용자 지정 쿡북 업데이트]를 선택합니다. 명령을 완료하려면 몇 분 정도 걸릴 수 있습니다.

사용자 지정 IIS 계층에 레시피 추가

install.rb와 마찬가지로 배포를 처리하는 좋은 방법은 deploy.rb를 적절한 수명 주기 이벤트에 할당하는 것입니다. 일반적으로는 배포 레시피들을 Deploy 이벤트에 할당하며, 총칭하여 Deploy 레시피라고 합니다. 레시피를 Deploy 이벤트에 할당해도 이벤트가 트리거되지는 않습니다. 그 대신

  • 새 인스턴스의 경우 AWS OpsWorks Stacks는 설치 레시피가 완료된 후 배포 레시피를 자동으로 실행하므로 새 인스턴스는 자동으로 최신 애플리케이션 버전을 갖게 됩니다.

  • 온라인 인스턴스의 경우, deploy 명령을 사용하여 수동으로 새 애플리케이션 또는 업데이트된 애플리케이션을 설치합니다.

    이 명령은 스택의 인스턴스에서 Deploy 레시피를 실행하는 Deploy 이벤트를 트리거합니다.

계층의 Deploy 이벤트에 deploy.rb를 할당하려면
  1. 탐색 창에서 계층을 선택한 다음 계층 IISExample 아래에 있는 레시피를 선택합니다.

  2. 사용자 지정 Chef 레시피에서 iis-cookbook::deploy를 레시피 배포 상자에 추가하고 +를 선택하여 레시피를 계층에 추가합니다.

  3. 저장을 선택하여 새 구성을 저장합니다. 이제 사용자 지정 Deploy 레시피에 iis-cookbook::deploy가 포함되어 있어야 합니다.

앱 추가

마지막 작업은 스택에 앱을 추가하여 AWS OpsWorks Stacks 환경의 애플리케이션을 나타내는 것입니다. 앱에는 애플리케이션의 표시 이름과 리포지토리에서 앱을 다운로드하는 데 필요한 데이터 같은 메타데이터가 포함되어 있습니다.

스택에 앱을 추가하려면
  1. 탐색 창에서 []을 선택한 다음 [앱 추가]를 선택합니다.

  2. 다음 설정으로 앱을 구성합니다:

    • 이름 – IIIS-Example-App

    • 리포지토리 유형기타

    • 환경 변수 – 다음 환경 변수 3개를 추가합니다.

      • S3REGION - 버킷의 리전(이 경우의 us-west-1).

      • BUCKET - 버킷의 이름(예: windows-example-app).

      • FILENAME - 파일 이름: default.htm.

  3. 나머지 설정에 대해서는 기본값을 수락하고 앱 추가를 선택하여 스택에 앱을 추가합니다.

참고

이 예제에서는 환경 변수를 사용하여 다운로드 데이터를 제공합니다. 다른 방법은 S3 Archive 리포지토리 유형을 사용하고 파일의 URL을 제공하는 것입니다. AWS OpsWorks Stacks는 AWS 자격 증명과 같은 선택적 데이터와 함께 정보를 앱의 app_source 속성에 추가합니다. 배포 레시피는 앱 속성에서 URL을 가져온 다음 구문 분석하여 리전, 버킷 이름 및 파일 이름을 추출해야 합니다.

앱 배포 및 애플리케이션 열기

AWS OpsWorks 스택은 앱을 새 인스턴스에 자동으로 배포하지만 온라인 인스턴스에는 배포하지 않습니다. 인스턴스가 이미 실행 중이기 때문에 수동으로 앱을 배포해야 합니다.

앱을 배포하려면
  1. 탐색 창에서 을 선택한 다음 앱의 작업 열에서 배포를 선택합니다.

  2. 명령배포로 설정되어야 합니다. 배포 앱 페이지의 오른쪽 하단에서 배포를 선택합니다. 명령을 완료하려면 몇 분 정도 걸릴 수 있습니다.

    배포가 완료된 후에는 페이지로 돌아갑니다. 상태 표시기에 성공이 녹색으로 표시되고 앱 이름 옆에는 녹색 확인 표시가 나타나 배포에 성공했음을 알립니다.

참고

Windows 앱은 항상 기타 앱 유형이므로 앱을 배포하면 다음이 수행됩니다.

  • 앞서 설명한 것처럼 앱의 데이터를 스택 구성 및 배포 속성에 추가합니다.

  • 스택의 인스턴스에서 Deploy 레시피를 실행하는 Deploy 이벤트를 트리거합니다.

참고

실패한 배포 또는 애플리케이션 문제 해결에 대한 자세한 정보는 레시피 디버깅 단원을 참조하세요.

이제 앱이 설치되었습니다. 탐색 창에서 인스턴스를 선택한 다음 인스턴스의 퍼블릭 IP 주소를 선택하여 열 수 있습니다. 이렇게 하면 인스턴스로 HTTP 요청이 전송됩니다. 브라우저에 다음과 같이 표시되어야 합니다.