

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

# Amazon S3 버킷 사용하기
<a name="gettingstarted.walkthrough.photoapp"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

애플리케이션은 종종 Amazon Simple Storage Service(S3) 버킷을 사용하여 이미지 또는 기타 미디어 파일 같은 큰 항목을 저장합니다. OpsWorks Stacks는 Amazon S3에 대한 통합 지원을 제공하지 않지만 애플리케이션이 Amazon S3 스토리지를 사용할 수 있도록 스택을 쉽게 사용자 지정할 수 있습니다. 이 주제에서는 PHP 애플리케이션 서버가 있는 Linux 스택을 예제로 사용하여 애플리케이션에 Amazon S3 액세스 권한을 제공하는 기본 프로세스를 단계별로 살펴봅니다. 이 기본 원칙은 Windows 스택에도 적용됩니다.

Amazon S3 버킷에 전달한 콘텐츠에는 고객 콘텐츠가 포함될 수 있습니다. 중요 데이터 제거에 관한 자세한 내용은 [S3 버킷을 비우려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) 또는 [S3 버킷을 삭제하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)를 참조하세요.

**Topics**
+ [1단계: Amazon S3 버킷 생성](using-s3-bucket.md)
+ [2단계: PHP 앱 서버 스택 생성](using-s3-stack.md)
+ [3단계: 사용자 지정 쿡북 생성 및 배포](using-s3-cookbook.md)
+ [4단계: 수명 주기 이벤트에 레시피 할당](using-s3-events.md)
+ [5단계: 스택 구성 및 배포 속성에 액세스 정보 추가](using-s3-json.md)
+ [6단계: PhotoApp 배포 및 실행](using-s3-run.md)

# 1단계: Amazon S3 버킷 생성
<a name="using-s3-bucket"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

먼저 Amazon S3 버킷을 만들어야 합니다. Amazon S3 콘솔, API 또는 CLI를 사용하여 직접 만들 수도 있지만 리소스를 생성하는 더 간단한 방법은 CloudFormation 템플릿을 사용하는 것입니다. 다음 템플릿은 이 예제를 위한 Amazon S3 버킷을 생성하고, 버킷에 대한 무제한 액세스를 허용하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html)을 사용하여 [인스턴스 프로파일](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)을 설정합니다. 그런 다음 계층 설정을 사용하여 스택의 애플리케이션 서버 인스턴스에 인스턴스 프로파일을 연결하면 뒤에 설명하는 것처럼 애플리케이션이 버킷에 액세스할 수 있습니다. 인스턴스 프로파일의 유용성은 Amazon S3로 국한되지 않습니다. 인스턴스 프로파일은 다양한 AWS 서비스를 통합하는 데에도 매우 중요합니다.

```
{
   "AWSTemplateFormatVersion" : "2010-09-09",
   "Resources" : {
      "AppServerRootRole": {
         "Type": "AWS::IAM::Role",
         "Properties": {
            "AssumeRolePolicyDocument": {
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "ec2.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            },
            "Path": "/"
         }
      },
      "AppServerRolePolicies": {
         "Type": "AWS::IAM::Policy",
         "Properties": {
            "PolicyName": "AppServerS3Perms",
            "PolicyDocument": {
               "Statement": [ {
                  "Effect": "Allow",
                  "Action": "s3:*",
                  "Resource": { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "AppBucket" } , "/*" ]
                  ] }
               } ]
            },
            "Roles": [ { "Ref": "AppServerRootRole" } ]
         }
      },
      "AppServerInstanceProfile": {
         "Type": "AWS::IAM::InstanceProfile",
         "Properties": {
            "Path": "/",
            "Roles": [ { "Ref": "AppServerRootRole" } ]
         }
      },
     "AppBucket" : {
      "Type" : "AWS::S3::Bucket"
      }
   },
   "Outputs" : {
       "BucketName" : {
           "Value" : { "Ref" : "AppBucket" }
       },
       "InstanceProfileName" : {
           "Value" : { "Ref" : "AppServerInstanceProfile" }
       }
   }
}
```

템플릿을 시작하면 다음과 같은 몇 가지 작업이 이루어집니다.
+ `[AWS::S3::Bucket](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html)` 리소스가 Amazon S3 버킷을 생성합니다.
+ `[AWS::IAM::InstanceProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)` 리소스가 애플리케이션 서버 인스턴스에 할당될 인스턴스 프로파일을 생성합니다.
+ `[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)` 리소스가 인스턴스 프로파일의 역할을 생성합니다.
+ Amazon S3 버킷에 대한 무제한 액세스가 가능하도록 `[AWS::IAM::Policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html)` 리소스가 역할의 권한을 설정합니다.
+ 템플릿을 시작한 후 `Outputs` 섹션에는 CloudFormation 콘솔에 버킷 및 인스턴스 프로파일 이름이 표시됩니다.

  스택과 앱을 설정하려면 이 값들이 필요합니다.

 CloudFormation 템플릿을 생성하는 방법에 대한 자세한 내용은 [템플릿 기본 정보 학습을 참조하세요](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html).

**Amazon S3 버킷을 생성하려면**

1. 예제 템플릿을 시스템의 텍스트 파일에 복사합니다.

   이 예제에서는 파일의 이름을 `appserver.template`(이)라고 가정합니다.

1. [CloudFormation](https://console.aws.amazon.com/cloudformation/) 콘솔을 열고 **스택 생성**을 선택합니다.

1. [**스택 이름**] 상자에 스택 이름을 입력합니다.

   이 예제에서는 이름을 **AppServer**(이)라고 가정합니다.

1. **템플릿 파일 업로드**, **찾아보기**를 차례로 선택하고 1단계에서 만든 `appserver.template` 파일을 선택한 후 **다음 단계**를 선택합니다.

1. **파라미터 지정** 페이지에서 **이 템플릿이 IAM 리소스를 생성할 수 있음을 확인합니다.**를 선택한 다음 마지막 페이지에 도달할 때까지 마법사의 각 페이지에서 **다음 단계**를 선택합니다. **생성(Create)**을 선택합니다.

1. **AppServer** 스택이 **CREATE\$1COMPLETE** 상태에 도달하면 이 스택을 선택한 후 **출력** 탭을 선택합니다.

   상태를 업데이트하려면 여러 번 새로 고침해야 할 수 있습니다.

1. [**출력**] 탭에서 나중에 사용하기 위해 [**BucketName**] 및 [**InstanceProfileName**] 값을 기록합니다.

**참고**  
CloudFormation 는 *스택*이라는 용어를 사용하여 템플릿에서 생성된 리소스 모음을 참조합니다. 이는 OpsWorks Stacks 스택과 동일하지 않습니다.

# 2단계: PHP 앱 서버 스택 생성
<a name="using-s3-stack"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

이 스택은 각각 하나의 인스턴스를 포함하는 PHP 앱 서버 및 MySQL이라는 두 계층으로 구성됩니다. 애플리케이션은 Amazon S3 버킷에 사진을 저장하지만 MySQL 인스턴스를 백엔드 데이터 스토어로 사용하여 각 사진의 메타데이터를 보관합니다.

Amazon S3 버킷에 전달한 콘텐츠에는 고객 콘텐츠가 포함될 수 있습니다. 중요 데이터 제거에 관한 자세한 내용은 [S3 버킷을 비우려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) 단원 또는 [S3 버킷을 삭제하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) 단원을 참조하세요.

**스택을 생성하는 방법**

1. 이 예제에서 명명된 새 **PhotoSite** 스택을 만들고 PHP 앱 서버 계층을 추가합니다. 새 스택과 계층 둘 다에 기본 설정을 사용할 수 있습니다. 자세한 정보는 [새 스택 생성](workingstacks-creating.md) 및 [OpsWorks 계층 생성](workinglayers-basics-create.md) 섹션을 참조하세요.

1. **계층** 페이지에서 PHP 앱 서버에 대한 **보안**을 선택하고 **편집**을 선택합니다.

1. **계층 프로파일** 섹션에서 AppServer CloudFormation 스택을 시작한 후 이전에 기록한 인스턴스 프로파일 이름을 선택합니다. 이는와 유사합니다`AppServer-AppServerInstanceProfile-1Q3KD0DNMGB90`. OpsWorks Stacks는 계층의 모든 Amazon EC2 인스턴스에이 프로파일을 할당하여 계층의 인스턴스에서 실행되는 애플리케이션에 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다.  
![\[IAM Instance Profile dropdown showing available profiles, including a custom AppServer profile.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_profile.png)

1. 인스턴스를 PHP 앱 서버 계층에 추가하고 시작합니다. 인스턴스를 추가 및 시작하는 방법에 대한 자세한 정보는 [계층에 인스턴스 추가](workinginstances-add.md) 단원을 참조하세요.

1. 스택에 MySQL 계층을 추가하고 인스턴스를 추가한 다음 시작합니다. 계층과 인스턴스 둘 다에 기본 설정을 사용할 수 있습니다. 특히 MySQL 인스턴스는 Amazon S3 버킷에 액세스할 필요가 없으므로 기본적으로 선택되는 표준 OpsWorks Stacks 인스턴스 프로파일을 사용할 수 있습니다.

# 3단계: 사용자 지정 쿡북 생성 및 배포
<a name="using-s3-cookbook"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

스택은 아직 준비되지 않았습니다.
+ 애플리케이션이 MySQL 데이터베이스 서버와 Amazon S3 버킷에 액세스하려면 데이터베이스 호스트 이름과 Amazon S3 버킷 이름 같은 몇 가지 정보가 필요합니다.
+ MySQL 데이터베이스 서버에서 데이터베이스를 설정하고 사진의 메타데이터를 보관할 테이블을 생성해야 합니다.

이러한 작업을 수동으로 처리할 수 있지만 더 나은 방법은 Chef *레시피*를 구현하고 OpsWorks Stacks가 적절한 인스턴스에서 레시피를 자동으로 실행하도록 하는 것입니다. Chef 레시피는 OpsWorks Stacks가 패키지 설치 또는 구성 파일 생성과 같은 인스턴스 작업을 수행하는 데 사용하는 특수 Ruby 애플리케이션입니다. 이 작업들은 여러 레시피와 구성 파일 템플릿 같은 관련 파일을 포함할 수 있는 *쿡북*에 패키징되어 있습니다. 쿡북은 GitHub 같은 레포지토리에 배치되며, 표준 디렉터리 구조를 가져야 합니다. 사용자 지정 쿡북 리포지토리가 없는 경우, [쿡북 리포지토리](workingcookbook-installingcustom-repo.md)에서 설정 방법 단원을 참조하세요.

이 예제에서는 쿡북이 구현되어 [퍼블릭 GitHub 리포지토리](https://github.com/amazonwebservices/opsworks-example-cookbooks/tree/master/photoapp)에 저장되어 있습니다. 이 쿡북에는 `appsetup.rb`와 `dbsetup.rb`라는 2개의 레시피와 `db-connect.php.erb`라는 1개의 템플릿 파일이 포함되어 있습니다.

`appsetup.rb` 레시피는 애플리케이션이 데이터베이스와 Amazon S3 버킷에 액세스하는 데 필요한 정보가 포함된 구성 파일을 생성합니다. 이것은 기본적으로 [데이터베이스에 애플리케이션 연결](gettingstarted-db-recipes.md#gettingstarted-db-recipes-appsetup)에 설명된 `appsetup.rb` 레시피를 약간 수정한 버전입니다. 주된 차이점은 템플릿에 전달되는 변수이며, 액세스 정보를 나타냅니다.

처음 4개의 속성은 데이터베이스 연결 설정을 정의하고 MySQL 인스턴스를 생성할 때 OpsWorks Stacks에서 자동으로 정의합니다.

이 변수들과 오리지널 레시피의 변수들 사이에는 다음 두 가지 차이점이 있습니다.
+ `table`오리지널 레시피와 마찬가지로 변수는 `dbsetup.rb`에 의해 생성되는 데이터베이스 테이블의 이름을 나타내며, 쿡북의 속성 파일에서 정의되는 속성의 값으로 설정됩니다.

  다만 속성의 이름은 `[:photoapp][:dbtable]`로 다릅니다.
+ `s3bucket` 변수는 이 예제에 고유한 것으로서 Amazon S3 버킷 이름을 나타내는 속성의 값인 `[:photobucket]`(으)로 설정됩니다.

   `[:photobucket]`은(는) 뒤에 설명하는 것처럼 사용자 지정 JSON을 사용하여 정의됩니다. 속성에 대한 자세한 정보는 [속성](workingcookbook-installingcustom-components-attributes.md)을(를) 참조하세요.

속성에 대한 자세한 정보는 [속성](workingcookbook-installingcustom-components-attributes.md)을(를) 참조하세요.

`dbsetup.rb` 레시피는 각 사진의 메타데이터를 보관하는 데이터베이스 테이블을 설정합니다. 이것은 기본적으로 `dbsetup.rb`에 설명된 [데이터베이스 설정](gettingstarted-db-recipes.md#gettingstarted-db-recipes-dbsetup) 레시피를 약간 수정한 버전입니다. 자세한 설명은 해당 주제를 참조하세요.

이 예제와 오리지널 레시피의 유일한 차이점인 데이터베이스 스키마에는 Amazon S3 버킷에 저장된 각 사진의 ID, URL, 캡션이 포함된 3개의 열이 있습니다.

레시피가 이미 구현되어 있으므로 나중에 설명하듯이 각 인스턴스의 쿡북 캐시에 포토앱 쿡북을 배포하기만 하면 됩니다. 그러면 OpsWorks Stacks는 적절한 수명 주기 이벤트가 발생할 때 캐시된 레시피를 실행합니다.

**photoapp 쿡북을 배포하려면**

1.  OpsWorks 스택 **스택** 페이지에서 **스택 설정을** 선택한 다음 **편집**을 선택합니다.

1. [**구성 관리**] 섹션에서:
   + [**사용자 지정 Chef 쿡북 사용**]을 [**예**]로 설정합니다.
   + [**리포지토리 유형**]을 Git로 설정합니다.
   + **리포지토리 URL**을 **git://github.com/amazonwebservices/opsworks-example-cookbooks.git**로 설정합니다.

1. **스택** 페이지에서 **명령 실행**을 선택하고 **사용자 지정 쿡북 업데이트(사용자 지정 쿡북 업데이트)** 스택 명령을 선택한 다음 **사용자 지정 쿡북 업데이트(사용자 지정 쿡북 업데이트)**를 선택하여 인스턴스 쿡북 캐시에 새 쿡북을 설치합니다.  
![\[Run Command interface showing Update Custom Cookbooks option and instance selection.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/redis_walkthrough_command.png)

# 4단계: 수명 주기 이벤트에 레시피 할당
<a name="using-s3-events"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

사용자 지정 레시피를 [수동으로](workingcookbook-manual.md) 실행할 수 있지만 가장 좋은 방법은 일반적으로 OpsWorks Stacks가 자동으로 실행하도록 하는 것입니다. 모든 계층에는 5가지 [라이프사이클 이벤트](workingcookbook-events.md)(설정, 구성, 배포, 배포 취소, 종료) 각각에 할당된 내장 레시피 세트가 있습니다. 인스턴스에서 이벤트가 발생할 때마다 OpsWorks Stacks는 인스턴스의 각 계층에 연결된 레시피를 실행하여 필요한 작업을 처리합니다. 예를 들어 인스턴스 부팅이 완료되면 OpsWorks Stacks는 Setup 이벤트를 트리거하여 Setup 레시피를 실행합니다. Setup 레시피는 일반적으로 패키지 설치 및 구성과 같은 작업을 처리합니다.

각 레시피를 적절한 수명 주기 이벤트에 할당하여 OpsWorks Stacks가 계층의 인스턴스에서 사용자 지정 레시피를 실행하도록 할 수 있습니다. OpsWorks 스택은 계층의 내장 레시피가 완료된 후 모든 사용자 지정 레시피를 실행합니다. 이 예제에서는 PHP 앱 서버 계층의 배포 이벤트와 MySQL 계층의 배포 이벤트에 `dbsetup.rb`를 할당`appsetup.rb`합니다. 그러면 OpsWorks 스택은 시작 중, 내장 설정 레시피가 완료된 후, 내장 배포 레시피가 완료된 후 앱을 배포할 때마다 연결된 계층의 인스턴스에서 레시피를 실행합니다. 자세한 내용은 [자동으로 레시피 실행](workingcookbook-assigningcustom.md) 단원을 참조하십시오.

**계층의 Deploy 이벤트에 사용자 지정 레시피를 할당하려면**

1.  OpsWorks 스택 **계층** 페이지의 PHP 앱 서버에서 **레시피**를 선택한 다음 **편집**을 선택합니다.

1. **사용자 지정 Chef 레시피**에서 Deploy 이벤트에 레시피 이름을 추가하고 **\$1**를 선택합니다. 이 레시피 이름은 Chef `cookbookname::recipename` 형식이어야 하며, 여기서 `recipename`에는 `.rb` 확장명이 포함되지 않습니다. 이 예제에서는 `photoapp::appsetup`을(를) 입력합니다. **저장**을 선택하여 계층 구성을 업데이트합니다.  
![\[Custom Chef Recipes configuration with Repository URL and lifecycle events.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/psb6a.png)

1. **계층** 페이지에서, MySQL 계층의 **작업** 열의 **편집**을 선택합니다.

1. `photoapp::dbsetup`을(를) 계층의 Deploy 이벤트에 추가하고 새 구성을 저장합니다.

# 5단계: 스택 구성 및 배포 속성에 액세스 정보 추가
<a name="using-s3-json"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

`appsetup.rb` 레시피는 각 인스턴스에 설치되고 스택 및 배포된 앱에 대한 자세한 정보를 포함하는 OpsWorks Stacks 스택 구성 및 배포 속성의 데이터에 따라 달라집니다. [스택 구성 및 배포 속성](workingcookbook-json.md) 객체의 `deploy` 속성에는 편의상 JSON으로 표시되는 다음과 같은 구조가 있습니다.

```
{
   ...
  "deploy": {
    "app1": {
      "application" : "short_name",
      ...
    }
    "app2": {
      ...
    }
    ...
  }
}
```

배포 노드에는 앱의 짧은 이름으로 명명된, 배포된 각 앱의 속성이 포함됩니다. 각각의 앱 속성에는 문서 루트와 앱 유형 같은 앱의 구성을 정의하는 속성 세트가 포함됩니다. `deploy` 속성의 목록은 [deploy 속성](attributes-json-deploy.md) 단원을 참조하세요. Chef 속성 구문을 사용하여 레시피에서 스택 구성 및 배포 속성 값을 나타낼 수 있습니다. 예를 들어 `[:deploy][:app1][:application]`은(는) app1 앱의 짧은 이름을 나타냅니다.

사용자 지정 레시피는 데이터베이스 및 Amazon S3 액세스 정보를 나타내는 몇몇 스택 구성 및 배포 속성에 기반합니다.
+ 와 같은 데이터베이스 연결 속성`[:deploy][:database][:host]`은 MySQL 계층을 생성할 때 OpsWorks Stacks에서 정의합니다.
+ `[:photoapp][:dbtable]`와(과) 같은 테이블 이름 속성은 사용자 지정 쿡북의 속성 파일에서 정의되며, `foto`(으)로 설정됩니다.
+ 사용자 지정 JSON을 사용하여 버킷 이름 속성 `[:photobucket]`을(를) 스택 구성 및 배포 속성에 추가하여 이 속성을 정의해야 합니다.

**Amazon S3 버킷 이름 속성을 정의하려면**

1.  OpsWorks 스택 **스택** 페이지에서** 스택 설정을** 선택한 다음 **편집**을 선택합니다.

1. [**구성 관리**] 섹션에서 [**사용자 지정 Chef JSON**] 상자에 액세스 정보를 추가합니다. 다음과 같이 보여야 합니다.

   ```
   {
     "photobucket" : "yourbucketname"
   }
   ```

   *yourbucketname*을 [1단계: Amazon S3 버킷 생성](using-s3-bucket.md)에서 기록해 둔 버킷 이름으로 대체합니다.  
![\[Custom Chef cookbook configuration with Git repository and JSON settings.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_walkthrough_json.png)

OpsWorks Stacks는 사용자 지정 JSON을 스택의 인스턴스에 설치하기 전에 스택 구성 및 배포 속성에 병합합니다. 그러면가 `[:photobucket]` 속성에서 버킷 이름을 가져올 `appsetup.rb` 수 있습니다. 레시피를 건드리지 않고 버킷을 변경할 수 있습니다. [속성을 재정의](workingcookbook-attributes.md)하여 새 버킷 이름을 제공하면 됩니다.

# 6단계: PhotoApp 배포 및 실행
<a name="using-s3-run"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

이 예제에서는 애플리케이션도 구현되어 [퍼블릭 GitHub 리포지토리](https://github.com/amazonwebservices/opsworks-demo-php-photo-share-app)에 저장되어 있습니다. 앱을 스택에 추가하고 애플리케이션 서버에 배포한 다음 실행하기만 하면 됩니다.

**앱을 스택에 추가하고 애플리케이션 서버에 배포하려면**

1. **앱** 페이지를 열고 **앱 추가**를 선택합니다.

1. [**앱 추가**] 페이지에서 다음을 수행합니다.
   + **이름**을 **PhotoApp**으로 설정합니다.
   + [**앱 유형**]을 [**PHP**]로 설정합니다.
   + **문서 루트**를 **web**으로 설정합니다.
   + [**리포지토리 유형**]을 [**Git**]로 설정합니다.
   + **리포지토리 URL**을 **git://github.com/awslabs/opsworks-demo-php-photo-share-app.git**로 설정합니다.
   + **앱 추가**를 선택하여 다른 설정에 대해 기본값을 수락합니다.  
![\[Form to add an app with fields for name, type, document root, and repository details.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_walkthrough_app.png)

1. **앱** 페이지에서 PhotoApp 앱의 **작업** 열에서 **배포**를 선택합니다.  
![\[Apps page showing PhotoApp with deploy, edit, and delete options in the Actions column.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_walkthrough_deploy.png)

1. 기본값을 수락하고 **배포**를 선택하여 서버에 앱을 배포합니다.

PhotoApp을 실행하려면 **인스턴스** 페이지로 이동해 PHP 앱 서버 인스턴스의 퍼블릭 IP 주소를 선택합니다.

![\[PHP App Server instance details showing hostname, status, and public IP address.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_walkthrough_run.png)


다음과 같은 사용자 인터페이스가 표시됩니다. 사진을 Amazon S3 버킷에 저장하고 메타데이터를 백엔드 데이터 스토어에 저장하려면 **사진 추가**를 선택합니다.

![\[User interface section titled "My Photos" with an "Add a Photo" button.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/photoapp_walkthrough_ui.png)
