

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する
<a name="other-services-cp-chef12-stack"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

 OpsWorks スタックをパイプラインのデプロイプロバイダーとして使用するには、まずスタック、レイヤー、およびレイヤーに少なくとも 1 つのインスタンスが必要です。[「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 12 スタック、レイヤー、インスタンスを作成します。このテンプレートで作成されたインスタンスは、Amazon Linux 2016.03 を実行します。インスタンスタイプは `c3.large` です。テンプレートによりカスタムクックブックを使用するようにスタックが設定されませんが、チュートリアルの後半でこのように設定します。

**重要**  
 CloudFormation テンプレートは、後でアプリケーションをアップロードする Amazon S3 バケットと同じリージョンと、後で CodePipeline でパイプラインを作成するリージョンに保存して実行する必要があります。現時点では、CodePipeline は米国東部 (バージニア北部) リージョン (us-east-1) の OpsWorks スタックプロバイダーのみをサポートしています。このチュートリアルのすべてのリソースは、米国東部 (バージニア北部) リージョンで作成する必要があります。  
スタックの作成が失敗した場合は、アカウントで許可されている 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 lets you use SSH to connect to the OpsWorks instance."
   	 }
     },
     "Resources": {
   	"CPOpsDeploySecGroup": {
   	  "Type": "AWS::EC2::SecurityGroup",
   	  "Properties": {
   	    "GroupDescription" : "Lets you manage OpsWorks instances to which you deploy apps with 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": "12" },
   		"DefaultOs": "Amazon Linux 2016.03",
           "DefaultInstanceProfileArn": {
             "Fn::GetAtt": [
               "OpsWorksInstanceProfile",
               "Arn"
             ]
           },
   		"UseCustomCookbooks": "false"
         }
       },
       "MyLayer": {
         "Type": "AWS::OpsWorks::Layer",
         "Properties": {
           "StackId": {
             "Ref": "MyStack"
           },
           "Name": "Node.js App Server",
   		"Type": "custom",
           "Shortname": "app1",
   		"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 マネジメントコンソール し、[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソールを開きます。

1.  CloudFormation ホームページで、**スタックの作成**を選択します。

1. [**Select Template**] ページの [**Choose a template**] エリアで、[**Upload a template to Amazon S3**]、[**Browse**] の順に選択します。

1. ステップ 1 で保存した CloudFormation テンプレートを参照し、**開く**を選択します。**[テンプレートを選択]** ページで、**[次へ]** を選択します。  
![\[AWS CloudFormation スタックの作成ウィザードのテンプレートページを選択します。\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cfstackcreate.png)

1. [**Specify Details**] ページで、スタックに **CodePipelineDemo** など、アカウントに固有な名前を付けます。スタックに別の名前を付ける場合は、このウォークスルー中のスタック名スループットを変更してください。

1. **パラメータ**領域で、作成後に スタックインスタンスへのアクセスに使用する EC2 OpsWorks キーペアの名前を指定します。[**次へ**] を選択します。

1. [**Options(オプション)**] ページで、[**Next(次へ)**] を選択します。(このページの設定はこのウォークスルーでは必要ありません)

1. このチュートリアルで使用する CloudFormation テンプレートは、IAM ロール、インスタンスプロファイル、インスタンスを作成します。
**重要**  
 **Create **を選択する前に、このテンプレートでリソースを作成するために発生する可能性のある料金を見積 AWS もる**コスト**を選択します。

   IAM リソースの作成が許容される場合は、**このテンプレートによって AWS CloudFormation が IAM リソースを作成する可能性があることを承諾する**チェックボックスを選択し、**作成**を選択します。IAM リソースの作成が受入不可能な場合は、この手順を続行することはできません。

1.  CloudFormation ダッシュボードでは、スタックの作成の進行状況を表示できます。次のステップに進む前に、**[Status]** 列に **[CREATE\$1COMPLETE]** が表示されるまで待機します。  
![\[スタックの作成を示すAWS CloudFormation ダッシュボード。\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_createstack12.png)

**スタックでの OpsWorks スタックの作成を確認するには**

1. [https://console.aws.amazon.com/opsworks/](https://console.aws.amazon.com/opsworks/) で OpsWorks コンソールを開きます。

1.  OpsWorks スタックダッシュボードで、作成したスタックを表示します。  
![\[スタックの作成を示すAWS OpsWorks ダッシュボード。\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_verifystack12.png)

1. スタックを開き、レイヤーとインスタンスを表示します。レイヤーとインスタンスが、 CloudFormation テンプレートで指定された名前やその他のメタデータで作成されたことを確認します。カスタム Chef クックブックとレシピを使用するようにスタックとレイヤーを設定する準備ができました。