

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

# 1단계: OpsWorks Stacks에서 스택, 계층 및 인스턴스를 생성합니다.
<a name="other-services-cp-chef11-stack"></a>

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

 OpsWorks Stacks를 파이프라인의 배포 공급자로 사용하려면 먼저 스택, 계층 및 계층에 하나 이상의 인스턴스가 있어야 합니다. [Linux 스택 시작하기](https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted-linux.html) 또는 [Windows](https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted-windows.html) 스택 시작하기의 지침에 OpsWorks 따라 스택에서 스택을 생성할 수 있지만, 시간을 절약하기 위해이 예제에서는 AWS CloudFormation 템플릿을 사용하여 Linux 기반 Chef 11.10 스택, 계층 및 인스턴스를 생성합니다. 이 템플릿에 의해 생성된 인스턴스는 Amazon Linux 2016.03을 실행하며 인스턴스 유형은 `c3.large`입니다.

**중요**  
 CloudFormation 템플릿은 나중에 앱을 업로드하는 Amazon S3 버킷과 동일한 리전과 나중에 CodePipeline에서 파이프라인을 생성하는 리전에 저장하고 실행해야 합니다. 현재 CodePipeline은 미국 동부(버지니아 북부) 리전(us-east-1)에서만 OpsWorks Stacks 공급자를 지원합니다. 이 연습에서는 모든 리소스를 미국 동부(버지니아 북부) 리전에서 생성해야 합니다.  
스택 생성이 실패할 경우 계정에 허용되는 최대 수의 IAM 역할에 접근한 것일 수 있습니다. 계정에서 `c3.large` 인스턴스 유형의 인스턴스를 시작할 수 없는 경우에도 스택 생성이 실패할 수 있습니다. 예를 들어 AWS 프리 티어를 사용 중이라면 `Root device type: must be included in EBS` 같은 오류가 반환될 수 있습니다. 계정에 AWS 프리 티어에서 부과하는 제한과 같이 생성할 수 있는 인스턴스 유형에 대한 제한이 있는 경우 템플릿의 인스턴스 블록에 있는 `InstanceType` 파라미터의 값을 계정에서 사용할 수 있는 인스턴스 유형으로 변경해 보세요.

**를 사용하여 스택, 계층 및 인스턴스를 생성하려면 CloudFormation**

1. 다음 CloudFormation 템플릿을 새 일반 텍스트 문서에 복사합니다. 로컬 컴퓨터의 편리한 위치에 파일을 저장하고 **NewOpsWorksStack.template** 또는 원하는 다른 이름을 지정합니다.

   ```
   {
     "AWSTemplateFormatVersion": "2010-09-09",
     "Mappings": {
       "Region2Principal": {
         "us-east-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "us-west-2": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "us-west-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "eu-west-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "ap-southeast-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "ap-northeast-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "ap-northeast-2": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "ap-southeast-2": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "sa-east-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         },
         "cn-north-1": {
           "EC2Principal": "ec2.amazonaws.com.rproxy.govskope.us.cn",
           "OpsWorksPrincipal": "opsworks.amazonaws.com.rproxy.govskope.us.cn"
         },
         "eu-central-1": {
           "EC2Principal": "ec2.amazonaws.com",
           "OpsWorksPrincipal": "opsworks.amazonaws.com"
         }
       }
     },
     "Parameters": {
       "EC2KeyPairName": {
   	  "Type": "String",
   	  "Description": "The name of an existing EC2 key pair that allows you to use SSH to connect to the OpsWorks instance."
   	 }
     },
     "Resources": {
   	"CPOpsDeploySecGroup": {
   	  "Type": "AWS::EC2::SecurityGroup",
   	  "Properties": {
   	    "GroupDescription" : "Lets you manage OpsWorks instances deployed to by CodePipeline"
   	  }
   	},
   	"CPOpsDeploySecGroupIngressHTTP": {
   	  "Type": "AWS::EC2::SecurityGroupIngress",
   	  "Properties" : {
   	    "IpProtocol" : "tcp",
           "FromPort" : "80",
           "ToPort" : "80",
           "CidrIp" : "0.0.0.0/0",
   		"GroupId": {
   		  "Fn::GetAtt": [
   		    "CPOpsDeploySecGroup", "GroupId"
   		  ]
   		}
         }
   	},
   	"CPOpsDeploySecGroupIngressSSH": {
   	  "Type": "AWS::EC2::SecurityGroupIngress",
   	  "Properties" : {
   	    "IpProtocol" : "tcp",
           "FromPort" : "22",
           "ToPort" : "22",
           "CidrIp" : "0.0.0.0/0",
   		"GroupId": {
   		  "Fn::GetAtt": [
   		    "CPOpsDeploySecGroup", "GroupId"
   		  ]
   		}		  
   	  }
   	},
   	"MyStack": {
         "Type": "AWS::OpsWorks::Stack",
         "Properties": {
           "Name": {
             "Ref": "AWS::StackName"
           },
           "ServiceRoleArn": {
             "Fn::GetAtt": [
               "OpsWorksServiceRole",
               "Arn"
             ]
           },
   		"ConfigurationManager" : { "Name": "Chef","Version": "11.10" },
   		"DefaultOs": "Amazon Linux 2016.03",
           "DefaultInstanceProfileArn": {
             "Fn::GetAtt": [
               "OpsWorksInstanceProfile",
               "Arn"
             ]
           }
         }
       },
       "MyLayer": {
         "Type": "AWS::OpsWorks::Layer",
         "Properties": {
           "StackId": {
             "Ref": "MyStack"
           },
           "Name": "MyLayer",
           "Type": "php-app",
   		"Shortname": "mylayer",
           "EnableAutoHealing": "true",
           "AutoAssignElasticIps": "false",
           "AutoAssignPublicIps": "true",
   		"CustomSecurityGroupIds": [
   		  {
   		    "Fn::GetAtt": [
                 "CPOpsDeploySecGroup", "GroupId"
   		    ]
             }			
           ]
         },
         "DependsOn": [
           "MyStack",
           "CPOpsDeploySecGroup"
         ]
       },
       "OpsWorksServiceRole": {
         "Type": "AWS::IAM::Role",
         "Properties": {
           "AssumeRolePolicyDocument": {
             "Statement": [
               {
                 "Effect": "Allow",
                 "Principal": {
                   "Service": [
                     {
                       "Fn::FindInMap": [
                         "Region2Principal",
                         {
                           "Ref": "AWS::Region"
                         },
                         "OpsWorksPrincipal"
                       ]
                     }
                   ]
                 },
                 "Action": [
                   "sts:AssumeRole"
                 ]
               }
             ]
           },
           "Path": "/",
           "Policies": [
             {
               "PolicyName": "opsworks-service",
               "PolicyDocument": {
                 "Statement": [
                   {
                     "Effect": "Allow",
                     "Action": [
                       "ec2:*",
                       "iam:PassRole",
                       "cloudwatch:GetMetricStatistics",
                       "elasticloadbalancing:*"
                     ],
                     "Resource": "*"
                   }
                 ]
               }
             }
           ]
         }
       },
       "OpsWorksInstanceProfile": {
         "Type": "AWS::IAM::InstanceProfile",
         "Properties": {
           "Path": "/",
           "Roles": [
             {
               "Ref": "OpsWorksInstanceRole"
             }
           ]
         }
       },
       "OpsWorksInstanceRole": {
         "Type": "AWS::IAM::Role",
         "Properties": {
           "AssumeRolePolicyDocument": {
             "Statement": [
               {
                 "Effect": "Allow",
                 "Principal": {
                   "Service": [
                     {
                       "Fn::FindInMap": [
                         "Region2Principal",
                         {
                           "Ref": "AWS::Region"
                         },
                         "EC2Principal"
                       ]
                     }
                   ]
                 },
                 "Action": [
                   "sts:AssumeRole"
                 ]
               }
             ]
           },
           "Path": "/",
   		"Policies": [
             {
               "PolicyName": "s3-get",
               "PolicyDocument": {
                 "Version": "2012-10-17",
                 "Statement": [
                   {
                     "Effect": "Allow",
                     "Action": [
                       "s3:GetObject"
                     ],
                     "Resource": "*"
                   }
                 ]
               }
             }
           ]
         }
       },
       "myinstance": {
         "Type": "AWS::OpsWorks::Instance",
         "Properties": {
           "LayerIds": [
             {
               "Ref": "MyLayer"
             }
           ],
           "StackId": {
             "Ref": "MyStack"
           },
           "InstanceType": "c3.large",
           "SshKeyName": {
   		  "Ref": "EC2KeyPairName"
   		}
         }
       }
     },
     "Outputs": {
       "StackId": {
         "Description": "Stack ID for the newly created AWS OpsWorks stack",
         "Value": {
           "Ref": "MyStack"
         }
       }
     }
   }
   ```

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

1.  CloudFormation 홈 페이지에서 **스택 생성을** 선택합니다.

1. [**템플릿 선택**] 페이지의 [**템플릿 선택**] 영역에서 [**Amazon S3에 템플릿 업로드**]를 선택한 다음 [**찾아보기**]를 선택합니다.

1. 1단계에서 저장한 CloudFormation 템플릿을 찾아 **열기**를 선택합니다. **템플릿 선택** 페이지에서 **다음**을 선택합니다.  
![\[AWS CloudFormation 스택 생성 마법사의 템플릿 선택 페이지.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/cp_integ_cfstackcreate.png)

1. [**세부 정보 지정**] 페이지에서 스택의 이름을 [**MyStack**] 또는 계정에 고유한 다른 스택 이름으로 지정합니다. 스택에 다른 이름을 선택하면 이 연습 전체에서 해당 스택 이름을 변경해야 합니다.

1. **파라미터** 영역에서 OpsWorks Stacks 인스턴스가 생성된 후 인스턴스에 액세스하는 데 사용할 EC2 키 페어의 이름을 입력합니다. **다음**을 선택합니다.

1. **옵션** 페이지에서 **다음**을 선택합니다. 이 페이지의 설정은 이번 연습에는 필요하지 않습니다.

1. 이 연습에서 사용하는 CloudFormation 템플릿은 IAM 역할, 인스턴스 프로파일 및 인스턴스를 생성합니다.
**중요**  
 **생성을** 선택하기 전에 **비용을** 선택하여이 템플릿으로 리소스를 생성하기 AWS 위해 발생할 수 있는 요금을 추정합니다.

   IAM 리소스 생성이 가능한 경우 **이 템플릿으로 인해 AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 인정** 확인란을 선택한 다음 **생성**을 선택합니다. IAM 리소스를 생성할 수 없는 경우 이 절차를 계속 진행할 수 없습니다.

1.  CloudFormation 대시보드에서 스택 생성 진행 상황을 볼 수 있습니다. 다음 단계를 계속하기 전에 **상태** 열에 **CREATE\$1COMPLETE가** 표시될 때까지 기다리세요.  
![\[스택 생성이 표시된 AWS CloudFormation 대시보드.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/cp_integ_createstack.png)

**OpsWorks Stacks에서 스택 생성을 확인하려면**

1. [https://console.aws.amazon.com/opsworks/](https://console.aws.amazon.com/opsworks/) OpsWorks 콘솔을 엽니다.

1.  OpsWorks Stacks 대시보드에서 생성한 스택을 확인합니다.  
![\[스택 생성이 표시된 AWS OpsWorks 대시보드.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/cp_integ_verifystack.png)

1. 스택을 열고 계층 및 인스턴스를 확인합니다. CloudFormation 템플릿에 제공된 이름 및 기타 메타데이터를 사용하여 계층과 인스턴스가 생성되었는지 확인합니다. Amazon S3 버킷으로 앱을 업로드할 준비가 되었습니다.