

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

# スタック AWS CodePipeline での OpsWorks の使用
<a name="other-services-cp"></a>

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

[AWS CodePipeline](https://aws.amazon.com/codepipeline/) により、トラックコードがCodeCommit、Amazon Simple Storage Service (Amazon S3)、[GitHub](https://github.com/)などのソースから変更される継続的デリバリーパイプラインを作成できます。CodePipeline を使用して、Chef 11.10、Chef 12、Chef 12.2 OpsWorks スタック上の スタックへの Chef クックブックとアプリケーションコードのリリースを自動化できます。このセクションでは、 スタックレイヤーで実行するコードのデプロイツールとして CodePipeline OpsWorks からシンプルなパイプラインを作成して使用する方法について説明します。

**注記**  
CodePipeline OpsWorks と スタックの統合は、Chef 11.4 以前のスタックへのデプロイではサポートされていません。

**Topics**
+ [AWS CodePipeline OpsWorks スタックあり - Chef 12 スタック](other-services-cp-chef12.md)
+ [AWS CodePipeline OpsWorks スタックあり - Chef 11 スタック](other-services-cp-chef11.md)

# AWS CodePipeline OpsWorks スタックあり - Chef 12 スタック
<a name="other-services-cp-chef12"></a>

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

[AWS CodePipeline](https://aws.amazon.com/codepipeline/) により、トラックコードがCodeCommit、Amazon Simple Storage Service (Amazon S3)、[GitHub](https://github.com/)などのソースから変更される継続的デリバリーパイプラインを作成できます。このトピックの例では、CodePipeline からシンプルなパイプラインを作成し、 OpsWorks スタックレイヤーで実行するコードのデプロイツールとして使用する方法を説明します。この例では、シンプルな [Node.js アプリケーションの](samples/opsworks-nodejs-demo-app.zip)パイプラインを作成し、Chef 12 OpsWorks スタック (この場合は 1 つのインスタンス) のレイヤー内のすべてのインスタンスでアプリケーションを実行するように スタックに指示します。

**注記**  
このトピックでは、パイプラインを使用して Chef 12 スタックでアプリケーションを実行および更新する方法について説明します。パイプラインを使用して Chef 11.10 スタックでアプリケーションを実行および更新する方法については、「[AWS CodePipeline OpsWorks スタックあり - Chef 11 スタック](other-services-cp-chef11.md)」を参照してください。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**
+ [前提条件](#w2ab1c14c73c19c11c11)
+ [サポートされている他のシナリオ](#w2ab1c14c73c19c11c13)
+ [ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md)
+ [ステップ 2: カスタムクックブックを使用するようにスタックとレイヤーを設定する](other-services-cp-stackconfig.md)
+ [ステップ 3: アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef12-s3.md)
+ [ステップ 4: アプリケーションを OpsWorks スタックに追加する](other-services-cp-chef12-addapp.md)
+ [ステップ 5 : CodePipeline でパイプラインを作成する](other-services-cp-chef12-pipeline.md)
+ [ステップ 6: OpsWorks スタックでアプリケーションのデプロイを確認する](other-services-cp-chef12-verify.md)
+ [ステップ 7 (オプション): アプリケーションコードを更新し、CodePipeline が自動的にアプリケーションを再デプロイすることを確認します。](other-services-cp-chef12-update.md)
+ [ステップ 8 (オプション): リソースをクリーンアップする](other-services-cp-chef12-cleanup.md)

## 前提条件
<a name="w2ab1c14c73c19c11c11"></a>

このウォークスルーを開始する前に、次のすべてのタスクを実行するための管理者権限があることを確認してください。[**AdministratorAccess**] ポリシーが適用されているグループのメンバーになることができるか、次の表に示された権限やポリシーを持つグループのメンバーになることができる。セキュリティのベストプラクティスとして、必要な権限を個別のユーザーアカウントに割り当てるのではなく、次のタスクを実行する権限を持つグループにユーザーが属している必要があります。

IAM でセキュリティグループを作成し、権限をグループに割り当てる方法の詳細については、[「Creating IAM User Group」](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_create.html)(IAM ユーザーグループの作成) を参照してください。 OpsWorks スタックのアクセス許可の管理の詳細については、[「ベストプラクティス: アクセス許可の管理](https://docs.aws.amazon.com/opsworks/latest/userguide/best-practices-permissions.html)」を参照してください。


| 権限 | グループにアタッチすることが推奨されるポリシー | 
| --- | --- | 
|  スタックで OpsWorks スタック、レイヤー、インスタンスを作成および編集します。  | AWSOpsWorks\$1FullAccess | 
|   CloudFormationでテンプレートを作成、編集、実行します。  | AmazonCloudFormationFullAccess | 
|  Amazon S3 バケットの作成、編集、アクセスを行います。  | AmazonS3FullAccess | 
|  CodePipeline でパイプライン、特に Stacks OpsWorks をプロバイダーとして使用するパイプラインを作成、編集、実行します。  | AWSCodePipeline\$1FullAccess | 

Amazon EC2 キーペアも備える必要があります。このウォークスルーでサンプルスタック、レイヤー、インスタンスを作成する CloudFormation テンプレートを実行するときに、このキーペアの名前を指定するように求められます。Amazon EC2 コンソールでの key pair 取得の詳細については、Amazon EC2 ドキュメントの「[Create a Key Pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)」(キーペアの作成) を参照してください キーペアは、米国東部 (バージニア北部) リージョンにある必要があります。そのリージョンに既存のキーペアがある場合は、そのキーペアを使用できます。

## サポートされている他のシナリオ
<a name="w2ab1c14c73c19c11c13"></a>

このウォークスルーでは、[**Source**] を 1 つ、[**Deploy**] ステージを 1 つ含むシンプルなパイプラインを作成します。ただし、 OpsWorks スタックをプロバイダーとして使用する、より複雑なパイプラインを作成できます。サポートされているパイプラインとシナリオの例を以下に示します。
+ パイプラインを編集し、Chef クックブックを [**Source**] ステージに、更新されたクックブックの関連ターゲットを [**Deploy**] に追加できます。この場合は、ソースを変更した際にクックブックの更新をトリガーする [**デプロイ**] アクションを追加します。更新されたクックブックは、アプリの前にデプロイされます。
+ カスタムクックブックと複数のアプリケーションを使用して複雑なパイプラインを作成し、 OpsWorks スタックスタックにデプロイできます。パイプラインはアプリケーションソースとクックブックソースの両方の変化を追跡し、変更を行った際に再デプロイを行います。同様の複雑なパイプラインの例を以下に示します。  
![\[Pipeline diagram showing Source stage with Amazon S3 inputs and Beta stage with AWS OpsWorks outputs.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_complexpipeline.png)

CodePipeline の使用方法のについての詳細は、[「CodePipeline User Guide」](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)(CodePipeline ユーザーガイド) を参照してください。

# ステップ 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.ca.cn",
           "OpsWorksPrincipal": "opsworks.amazonaws.com.rproxy.govskope.ca.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 クックブックとレシピを使用するようにスタックとレイヤーを設定する準備ができました。

# ステップ 2: カスタムクックブックを使用するようにスタックとレイヤーを設定する
<a name="other-services-cp-stackconfig"></a>

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

スタックの Chef 12 OpsWorks スタックでは、カスタムアプリケーションレイヤーを構築するために、独自のクックブックまたはコミュニティで作成されたクックブックが必要です。このチュートリアルでは、[Chef のクックブック](https://docs.chef.io/cookbooks.html)とレシピのセットが含まれたリポジトリーを参照できます。これらのレシピにより、Node.js パッケージとその依存関係がインスタンスにインストールされます。他の Chef レシピを使用して、「[ステップ 4: アプリケーションを OpsWorks スタックに追加する](other-services-cp-chef12-addapp.md)」で用意することになる Node.js アプリケーションをデプロイします。このステップでは、指定する Chef レシピは、アプリケーションの新しいバージョンが CodePipeline によってデプロイされるたびに実行されます。

1.  OpsWorks スタックコンソールで、 で作成したスタックを開きます[ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md)。[**Stack Settings**]、[**Edit**] の順に選択します。

1. [**Use custom Chef cookbooks**] を [**Yes**] に設定します。これにより、関連するカスタムクックブック設定が表示されます。

1. [**Repository type**] ドロップダウンリストから、[**S3 Archive**] を選択します。CodePipeline と の両方を使用するには OpsWorks、クックブックソースが S3 である必要があります。

1. [**Repository URL**] 用に、**https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-cookbooks-nodejs.tar.gz** を指定します。設定は以下のようになります。  
![\[[Use custom Chef cookbooks] 設定\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_usecustomcook.png)

1. **[保存]** を選択します。

1. ナビゲーションペインで [**Layers**] (レイヤー) を選択します。

1. [ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md) で作成したレイヤー の **[設定]** を選択します。

1. [**General Settings**] タブで、レイヤー名が **Node.js App Server** で、レイヤーの短い名前が **app1** であることを確認します。[**Recipes**] を選択します。

1. **[Recipes]** (レシピ) タブで、**[Deploy]** (デプロイ) のライフサイクルイベント中に実行するレシピとして **nodejs\$1demo** を指定します。**[保存]** を選択します。

1. [**Security**] タブで、[**Security groups**] ドロップダウンリストから [**AWS-OpsWorks-Webapp**] セキュリティグループを選択します。

1. **[保存]** を選択します。

# ステップ 3: アプリケーションコードを Amazon S3 バケットにアップロードする
<a name="other-services-cp-chef12-s3"></a>

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

パイプラインの設定の一部としてコードリポジトリへのリンクを指定する必要があるため、パイプラインを作成する前にコードリポジトリを準備してください。このウォークスルーでは、Node.js アプリケーションを Amazon S3 バケットにアップロードします。

CodePipeline は、GitHub または CodeCommit から直接ソースとしてコードを使用できますが、このチュートリアルでは Amazon S3 バケットの使用方法を説明します。このチュートリアルでは、サンプル [[Node.js app]](samples/opsworks-nodejs-demo-app.zip) (Node.js アプリケーション) を自分の Amazon S3 バケットにアップロードして、アプリケーションを変更できるようにします。このステップで作成する Amazon S3 バケットにより、CodePipeline はアプリケーションコードの変更を検出し、変更されたアプリケーションを自動的にデプロイできます。必要に応じて、既存のバケットを使用できます。バケットが CodePipeline ドキュメントの[「Simple Pipeline Walkthrough (Amazon S3 Bucket)」](https://docs.aws.amazon.com/codepipeline/latest/userguide/getting-started-w.html)(シンプルなパイプラインのチュートリアル(Amazon S3 バケット)) で説明されている基準を満たしていることを確認します。

**重要**  
Amazon S3 バケットは、後でパイプラインを作成する同じリージョンに存在する必要があります。現時点では、CodePipeline は米国東部 (バージニア北部) リージョン (us-east-1) の OpsWorks スタックプロバイダーのみをサポートしています。このチュートリアルのすべてのリソースは、米国東部 (バージニア北部) リージョンで作成する必要があります。バケットは、CodePipeline にはバージョニングされたソースが必要なため、バージョニングされている必要もあります。詳細については、「[バージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html)」を参照してください。

**アプリケーションを Amazon S3 バケットにアップロードするには**

1. スタックサンプル Node.js OpsWorks アプリの ZIP ファイルをダウンロードし、ローカルコンピュータの便利な場所に保存します。 [samples/opsworks-nodejs-demo-app.zip](samples/opsworks-nodejs-demo-app.zip)

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

1. **バケットの作成** を選択します。

1. [**Create a Bucket - Select a Bucket Name and Region**] ページの [**Bucket Name**] で、バケットの一意の名前を入力します。バケット名は、自分の AWS アカウントだけでなく、すべてのアカウントで一意である必要があります。このウォークスルーでは **my-appbucket** という名前を使用していますが、`my-appbucket-yearmonthday` を使用して一意のバケット名にすることができます。[**Region**] ドロップダウンリストで、[**US Standard**]、[**Create**] の順に選択します。[**US Standard**] は、`us-east-1` と同等です。  
![\[S3 の [Create a Bucket] ページ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_s3bucket.png)

1. 作成したバケットを [**All Buckets**] リストから選択します。

1. バケットのページで [**Upload**] を選択します。

1. [**Upload - Select Files and Folders**] ページで、[**Add files**] を選択します。ステップ 1 で保存した ZIP ファイルを参照し、[**Open**]、[**Start Upload**] の順に選択します。  
![\[S3 の [Select Files and Folders] ダイアログボックス\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_uploadzip12.png)

1. アップロードの完了後、バケットのファイルリストから ZIP ファイルを選択し、[**Properties**] を選択します。

1. [**Properties**] ペインで、ZIP ファイルへのリンクをコピーし、リンクをメモします。パイプラインを作成するには、このリンクに含まれるバケット名と ZIP ファイル名の一部が必要です。

# ステップ 4: アプリケーションを OpsWorks スタックに追加する
<a name="other-services-cp-chef12-addapp"></a>

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

CodePipeline でパイプラインを作成する前に、Node.js テストアプリケーションを OpsWorks スタックに追加します。パイプラインを作成するときは、 OpsWorks スタックに追加したアプリを選択する必要があります。

前の手順のステップ 9 の Amazon S3 バケットリンクを準備してください。この手順を完了するには、テストアプリケーションを保存したバケットへのリンクが必要です。

**アプリケーションを OpsWorks スタックに追加するには**

1.  OpsWorks スタックコンソールで **CodePipelineDemo** を開き、ナビゲーションペインで **Apps** を選択します。

1. [**Add app**] を選択します。

1. [**Add App**] ページで、以下の情報を入力します。

   1. アプリの名前を指定します。このウォークスルーでは、名前に `Node.js Demo App` を使用します。

   1. [**Data source type**] で [**None**] を選択します。このアプリには、外部データベースやデータソースは必要ありません。

   1. [**Repository type**] ドロップダウンリストで、[**S3 Archive**] を選択します。

   1. [**Repository URL**] 文字列ボックスに、「[ステップ 3: アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef12-s3.md)」のステップ 9 でコピーした URL を貼り付けます。フォームは次のようになります。  
![\[[Add App] ページ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_addapp12ops.png)

1. このフォームでは、他の設定を変更する必要はありません。[**Add App**] を選択します。

1. **[Apps]** (アプリケーション) ページのリストに **[Node.js Demo App]** (Node.js デモアプリケーション) が表示されたら、次の手順 [ステップ 5 : CodePipeline でパイプラインを作成する](other-services-cp-chef12-pipeline.md) に進みます。

# ステップ 5 : CodePipeline でパイプラインを作成する
<a name="other-services-cp-chef12-pipeline"></a>

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

レイヤーと スタックで少なくとも 1 OpsWorks つのインスタンスが設定されたスタックを作成したら、アプリケーションまたは Chef OpsWorks クックブックを スタックリソースにデプロイするプロバイダーとして、 スタックを使用して CodePipeline OpsWorks にパイプラインを作成します。

**パイプラインを作成するには**

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

1. **パイプラインの作成** を選択します。

1. **[Getting started with CodePipeline]** (コードパイプラインの使用開始) ページで、タイプ [**MyOpsWorksPipeline**] など、アカウントに一意なパイプライン名を入力した後、**[Next step]** (次のステップ) を選択します。

1. **[Source Location]** (送信元の場所) ページで、**[Source provider]** (送信元のプロバイダー) ドロップダウンリストからの **[Amazon S3]** を選択します。

1. **[Amazon S3 details]** (Amazon S3 詳細) 領域で、使用する Amazon S3 バケットパスを **s3://*bucket-name*/*file name*** という形式で入力します。[ステップ 3: アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef12-s3.md) のステップ 9で記したリンクを参照してください。このウォークスルーでは、パスは `s3://my-appbucket/opsworks-nodejs-demo-app.zip` になります。[**次のステップ**] を選択します。  
![\[AWS CodePipeline ソースとプロバイダー\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_source12.png)

1. [**Build**] ページのドロップダウンリストで、[**No Build**]、[**Next step**] の順に選択します。

1. [**デプロイ**] ページで、デプロイプロバイダーとして [**OpsWorks Stacks**] を選択します。  
![\[Deploy configuration form for AWS OpsWorks Stacks with fields for stack, layer, and app selection.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cpprovider12.png)

1. [**Stack**] フィールドに、`CodePipelineDemo` または [ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md) で作成したスタックの名前を入力します。

1. [**Layer**] (レイヤー) フィールドに、「`Node.js App Server`」と入力するか、「[ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md)」で作成したレイヤーの名前を入力します。

1. **[App]** (アプリケーション) フィールドで、[ステップ 3: アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef12-s3.md) で Amazon S3 にアップロードしたアプリケーションを選択してから、**[Next step]** (次のステップ) を選択します。

1. **AWS サービスロール** ページで、**ロールの作成** を選択します。

   ユーザーに作成されるロール (`AWS-CodePipeline-Service`) を説明する IAM コンソールページとともに新しいページが開きます。[**Policy name**] ドロップダウンリストで、[**Create new policy**] を選択します。ポリシードキュメントに次のコンテンツがあることを確認します。[**Edit**] を選択し、必要に応じてポリシードキュメントを変更します。

   ```
   {
       "Statement": [
           {
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:GetBucketVersioning"
               ],
               "Resource": "*",
               "Effect": "Allow"
           },
           {
               "Action": "opsworks:*",
               "Resource": "*",
               "Effect": "Allow"
           }
       ]
   }
   ```

   ポリシードキュメントへの変更が完了したら、[**Allow**] を選択します。変更が IAM コンソールに表示されます。  
![\[IAM role summary with AWS-CodePipeline-Service role and policy document editor.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_iamrole.png)
**注記**  
ロールの作成に失敗した場合は、**[AWS-CodePipeline-Service]** (AWS-CodePipeline サービス) という名前の IAM ロールがすでにある可能性があります。2016 年 5 月より前に **AWS-CodePipeline-Service** ロールを使用している場合、ロールにはデプロイプロバイダーとして OpsWorks スタックを使用するアクセス許可がない可能性があります。この場合、このステップで見たようにポリシーステートメントを更新する必要があります。エラーメッセージが表示された場合は、この手順の最初に戻ってから、**[Create role]** (ロールの作成) の代わりに **[Use existing role]** (既存のロールを使用する) を選択します。既存のロールを使用する場合は、このステップに示される権限を含むポリシーがロールにアタッチされている必要があります。サービス ロールとそのポリシーステートメントの詳細については、[IAM サービスロールのポリシーを編集する](https://docs.aws.amazon.com/codepipeline/latest/userguide/access-permissions.html#how-to-custom-role)を参照してください。

1. ロール作成プロセスが成功すると、IAM ページが閉じ、**AWS サービスロール** ページに戻ります。[**次のステップ**] を選択します。

1. [**Review your pipeline**] ページで、ページに表示される選択肢を確認した後、[**Create pipeline**] を選択します。

1. 準備ができたパイプラインは、自動的にソースコードを見つけ、アプリケーションをスタックにデプロイし始めます。この処理には数分かかることもあります。

# ステップ 6: OpsWorks スタックでアプリケーションのデプロイを確認する
<a name="other-services-cp-chef12-verify"></a>

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

CodePipeline がスタックに Node.js アプリケーションをデプロイしたことを確認するには、「[ステップ 1: スタックに OpsWorks スタック、レイヤー、インスタンスを作成する](other-services-cp-chef12-stack.md)」で作成したインスタンスにサインインします。Node.js ウェブアプリケーションを表示して使用できる必要があります。

**OpsWorks スタックインスタンスでアプリケーションのデプロイを確認するには**

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

1.  OpsWorks スタックダッシュボードで、**CodePipelineDemo** を選択し、**Node.js App Server** を選択します。

1. ナビゲーションペインで [**Instances**] を選択した後、作成したインスタンスのパブリック IP アドレスを選択し、ウェブアプリケーションを表示します。  
![\[OpsWorks instance management interface showing one online Node.js App Server instance.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_instanceapp12.png)

   アプリケーションが新しいブラウザタブに表示されます。  
![\[Congratulatory message for deploying first app with AWS OpsWorks, featuring stylized landmarks.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_successnode12.png)

# ステップ 7 (オプション): アプリケーションコードを更新し、CodePipeline が自動的にアプリケーションを再デプロイすることを確認します。
<a name="other-services-cp-chef12-update"></a>

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

CodePipeline を使用してデプロイしたアプリケーションまたはクックブックのコードを変更すると、更新されたアーティファクトは CodePipeline によってターゲットインスタンス (この場合はターゲットスタックスタック) OpsWorks に自動的にデプロイされます。このセクションでは、サンプル Node.js アプリケーションでコードを更新した際の自動再デプロイを示します。このウォークスルー用のアプリケーションコードがまだローカルに保存してあり、ウォークスルーを開始してから他の誰もコードを変更していない場合は、この手順のステップ 1\$14 をスキップできます。

**サンプルアプリケーションでコードを編集するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. サンプル Node.js アプリケーションを保存しているバケットを開きます。  
![\[AWS S3 bucket interface showing a single zip file in the my-appbucket folder.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_editcodeS312.png)

1. アプリケーションを含む ZIP ファイルを選択します。[**Actions**] メニューで、[**Download**] を選択します。

1. ダイアログボックスでコンテクストメニューを開き (右クリック)、[**Download**] を選択して ZIP ファイルを使いやすい場所に保存します。[**OK**] を選択してください。

1. ZIP ファイルのコンテンツを使いやすい場所に展開します。展開したフォルダとそのサブフォルダやコンテンツで権限を変更し、編集を許可することが必要な場合があります。[`opsworks-nodejs-demo-app\views`] フォルダで、編集する [`header.html`] ファイルを開きます。

1. 「`You just deployed your first app with`」という語句で検索します。`deployed` という単語を `updated` に置き換えます。次の行で `OpsWorks.` を `OpsWorks and AWS CodePipeline.` に変更します。テキスト以外の部分を編集しないでください。  
![\[Congratulatory message for updating first app with OpsWorks and AWS CodePipeline.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_editheader12.png)

1. `header.html` ファイルを保存して閉じます。

1. `opsworks-nodejs-demo-app` フォルダを圧縮し、ZIP ファイルを便利な場所に保存します。ZIP ファイルの名前は変更しないでください。

1. 新しい ZIP ファイルを Amazon S3 バケットにアップロードします。このウォークスルーでは、バケット名は `my-appbucket` です。

1. CodePipeline コンソールを開き、スタックパイプライン (**MyOpsWorksPipeline**) OpsWorks を開きます。[**Release Change**] を選択します。

   (Amazon S3 バケット内のアプリケーションの更新バージョンから CodePipeline がコード変更を検出するまで待機できます。時間を節約するために、このチュートリアルでは、単に **[Release Change]** (変更をリリース) を選択するように指示します)。

1. パイプラインのステージを通じて CodePipeline が実行される様子を確認します。最初に、CodePipeline はソースアーティファクトに対する変更を検出します。  
![\[Pipeline diagram showing Source stage in progress and Beta stage succeeded 13 days ago.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cpupdatesource.png)

   CodePipeline は、更新されたコードを OpsWorks スタックのスタックにプッシュします。  
![\[Pipeline view showing Source stage succeeded and Beta stage in progress.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_updatestack.png)

1. パイプラインの両ステージが正常に完了したら、 OpsWorks スタックでスタックを開きます。

1. スタックのプロパティページで、[**Instances**] を選択します。

1. [**Public IP**] 列で、インスタンスのパブリック IP アドレスを選択し、更新されたアプリケーションのテキストを表示します。  
![\[Congratulatory message for updating an app with AWS OpsWorks and CodePipeline, with stylized icons.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_successedit12.png)

# ステップ 8 (オプション): リソースをクリーンアップする
<a name="other-services-cp-chef12-cleanup"></a>

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

 AWS アカウントへの不要な請求を防ぐために、このウォークスルーに使用した AWS リソースを削除できます。これらの AWS リソースには、 OpsWorks スタックスタック、IAM ロールとインスタンスプロファイル、CodePipeline で作成したパイプラインが含まれます。ただし、 スタックと CodePipeline OpsWorks の詳細については、これらの AWS リソースを引き続き使用することをお勧めします。これらのリソースを保持すりには、このウォークスルーを完了する必要があります。

**アプリケーションをスタックから削除するには**

 CloudFormation テンプレートの一部としてアプリを作成または適用しなかったため、スタックを削除する前に Node.js テストアプリを削除します CloudFormation。

1.  OpsWorks スタックコンソールのサービスナビゲーションペインで、**アプリ**を選択します。

1. [**Apps**] ページで [**Node.js Demo App**] を選択した後、[**Actions**] で [**delete**] を選択します。確認を求めるプロンプトが表示されたら、**Delete**. OpsWorks Stacks を選択するとアプリが削除されます。

**スタックを削除するには**

 CloudFormation テンプレートを実行してスタックを作成したため、テンプレートが作成したレイヤー、インスタンス、インスタンスプロファイル、セキュリティグループなどのスタックを CloudFormation コンソールで削除できます。

1.  CloudFormation コンソールを開きます。

1.  CloudFormation コンソールダッシュボードで、作成したスタックを選択します。[**Actions**] メニューで、[**Delete Stack**] を選択します。確認を求められたら [**Yes, Delete**] を選択します。

1. スタックの **[Status]** 列に [**DELETE\$1COMPLETE**] と表示されるまで待機します。

**パイプラインを削除するには**

1. CodePipeline コンソールを開きます。

1. CodePipeline ダッシュボードで、このチュートリアルで作成したパイプラインを選択します。

1. パイプラインページで、[**Edit**] を選択します。

1. [**Edit**] ページで、[**Delete**] を選択します。確認を求められたら [**Delete**] (削除) を選択します。

# AWS CodePipeline OpsWorks スタックあり - Chef 11 スタック
<a name="other-services-cp-chef11"></a>

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

[AWS CodePipeline](https://aws.amazon.com/codepipeline/) により、トラックコードがCodeCommit、Amazon Simple Storage Service (Amazon S3)、[GitHub](https://github.com/)などのソースから変更される継続的デリバリーパイプラインを作成できます。このトピックの例では、CodePipeline からシンプルなパイプラインを作成し、 OpsWorks スタックレイヤーで実行するコードのデプロイツールとして使用する方法を説明します。この例では、シンプルな [PHP アプリケーションの](https://github.com/awslabs/opsworks-demo-php-simple-app)パイプラインを作成し、Chef 11.10 OpsWorks スタック (この場合は 1 つのインスタンス) のレイヤー内のすべてのインスタンスでアプリケーションを実行するように スタックに指示します。

**注記**  
このトピックでは、パイプラインを使用して Chef 11.10 スタックでアプリケーションを実行および更新する方法について説明します。パイプラインを使用して Chef 12 スタックでアプリケーションを実行および更新する方法については、「[AWS CodePipeline OpsWorks スタックあり - Chef 12 スタック](other-services-cp-chef12.md)」を参照してください。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**
+ [前提条件](#w2ab1c14c73c19c13c11)
+ [サポートされている他のシナリオ](#w2ab1c14c73c19c13c13)
+ [ステップ 1: OpsWorks スタックでスタック、レイヤー、インスタンスを作成する](other-services-cp-chef11-stack.md)
+ [ステップ 2 : アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef11-s3.md)
+ [ステップ 3: アプリケーションを OpsWorks スタックに追加する](other-services-cp-chef11-addapp.md)
+ [ステップ 4 : CodePipeline でパイプラインを作成する](other-services-cp-chef11-pipeline.md)
+ [ステップ 5: OpsWorks スタックでのアプリケーションのデプロイを検証する](other-services-cp-chef11-verify.md)
+ [ステップ 6 (オプション): アプリケーションコードを更新し、CodePipeline が自動的にアプリケーションを再デプロイすることを確認します。](other-services-cp-chef11-update.md)
+ [ステップ 7 (オプション): リソースをクリーンアップする](other-services-cp-chef11-cleanup.md)

## 前提条件
<a name="w2ab1c14c73c19c13c11"></a>

このウォークスルーを開始する前に、以下のすべてのタスクを実行するための管理者権限があることを確認してください。[**AdministratorAccess**] ポリシーが適用されているグループのメンバーになることができるか、次の表に示された権限やポリシーを持つグループのメンバーになることができる。セキュリティのベストプラクティスとして、必要な権限を個別のユーザーアカウントに割り当てるのではなく、次のタスクを実行する権限を持つグループにユーザーが属している必要があります。

IAM でセキュリティグループを作成し、権限をグループに割り当てる方法の詳細については、[「Creating IAM User Group」](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_create.html)(IAM ユーザーグループの作成) を参照してください。 OpsWorks スタックのアクセス許可の管理の詳細については、[「ベストプラクティス: アクセス許可の管理](https://docs.aws.amazon.com/opsworks/latest/userguide/best-practices-permissions.html)」を参照してください。


| 権限 | グループにアタッチすることが推奨されるポリシー | 
| --- | --- | 
|  スタックで OpsWorks スタック、レイヤー、インスタンスを作成および編集します。  | AWSOpsWorks\$1FullAccess | 
|   CloudFormationでテンプレートを作成、編集、実行します。  | AmazonCloudFormationFullAccess | 
|  Amazon S3 バケットの作成、編集、アクセスを行います。  | AmazonS3FullAccess | 
|  CodePipeline でパイプライン、特に OpsWorks スタックをプロバイダーとして使用するパイプラインを作成、編集、実行します。  | AWSCodePipeline\$1FullAccess | 

Amazon EC2 キーペアも備える必要があります。このウォークスルーでサンプルスタック、レイヤー、インスタンスを作成する CloudFormation テンプレートを実行するときに、このキーペアの名前を指定するように求められます。Amazon EC2 コンソールでのキーペア 取得の詳細については、Amazon EC2 ドキュメントの[「Create a Key Pair」](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)(キーペアの作成) を参照してください。キーペア は、米国東部 (バージニア北部) リージョンにある必要があります。そのリージョンに既存のキーペアがある場合は、そのキーペアを使用できます。

## サポートされている他のシナリオ
<a name="w2ab1c14c73c19c13c13"></a>



このウォークスルーでは、[**Source**] を 1 つ、[**Deploy**] ステージを 1 つ含むシンプルなパイプラインを作成します。ただし、 OpsWorks スタックをプロバイダーとして使用する、より複雑なパイプラインを作成できます。サポートされているパイプラインとシナリオの例を以下に示します。
+ パイプラインを編集し、Chef クックブックを [**Source**] ステージに、更新されたクックブックの関連ターゲットを [**Deploy**] に追加できます。この場合は、ソースを変更した際にクックブックの更新をトリガーする [**デプロイ**] アクションを追加します。更新されたクックブックは、アプリの前にデプロイされます。
+ カスタムクックブックと複数のアプリケーションを使用して複雑なパイプラインを作成し、 OpsWorks スタックスタックにデプロイできます。パイプラインはアプリケーションソースとクックブックソースの両方の変化を追跡し、変更を行った際に再デプロイを行います。同様の複雑なパイプラインの例を以下に示します。  
![\[Pipeline diagram showing Source stage with Amazon S3 inputs and Beta stage with AWS OpsWorks outputs.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_complexpipeline.png)

CodePipeline の使用方法の詳細については、[「CodePipeline」](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)を参照してください。

# ステップ 1: OpsWorks スタックでスタック、レイヤー、インスタンスを作成する
<a name="other-services-cp-chef11-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 11.10 スタック、レイヤー、インスタンスを作成します。このテンプレートで作成されたインスタンスは、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.ca.cn",
           "OpsWorksPrincipal": "opsworks.amazonaws.com.rproxy.govskope.ca.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 マネジメントコンソール し、[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 Create Stack] ウィザードの [Template] ページを選択します。\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cfstackcreate.png)

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

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

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

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

   IAM リソースの作成が受け入れ可能であれば、**[I acknowledge that this template might cause AWS CloudFormation to create IAM resources]** (このテンプレートでは AWS CloudFormation によって IAM リソースが作成される場合があることを承認します) の チェックボックスを選択し、続いて **[Create]** (作成) を選択します。IAM リソースの作成が受入不可能な場合は、この手順を続行することはできません。

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

1. スタックを開き、レイヤーとインスタンスを表示します。レイヤーとインスタンスが、 CloudFormation テンプレートで指定された名前やその他のメタデータで作成されたことを確認します。これでアプリケーションを Amazon S3 バケットにアップロードできます。

# ステップ 2 : アプリケーションコードを Amazon S3 バケットにアップロードする
<a name="other-services-cp-chef11-s3"></a>

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

パイプラインの設定の一部としてコードリポジトリへのリンクを指定する必要があるため、パイプラインを作成する前にコードリポジトリを準備してください。このチュートリアルでは、PHP アプリケーションを Amazon S3 バケットにアップロードします。

CodePipeline は、GitHub または から直接ソースとしてコードを使用しますが、このチュートリアルでは Amazon S3 バケットの使用方法を説明します。Amazon S3 バケットは、CodePipeline を有効化してアプリケーションコードの変更を検出し、変更されたアプリケーションを自動的にデプロイします。必要に応じて、既存のバケットを使用できます。バケットがドキュメントの[「Simple Pipeline Walkthrough](https://docs.aws.amazon.com/codepipeline/latest/userguide/getting-started-w.html) (Amazon S3 Bucket) (シンプルなパイプラインのウォークスルー (Amazon S3 バケット)」で説明されている CodePipeline の基準を満たしていることを確認します。

**重要**  
Amazon S3 バケットは、後でパイプラインを作成するリージョンと同じリージョンに存在する必要があります。現時点では、CodePipeline は米国東部 (バージニア北部) リージョン (us-east-1) の OpsWorks スタックプロバイダーのみをサポートしています。このチュートリアルのすべてのリソースは、米国東部 (バージニア北部) リージョンで作成する必要があります。バケットは、CodePipeline にはバージョニングされたソースが必要なため、バージョニングされている必要もあります。詳細については、「[バージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html)」を参照してください。

**アプリケーションを Amazon S3 バケットにアップロードするには**

1. [GitHub ウェブサイト](https://github.com/awslabs/opsworks-demo-php-simple-app/archive/version1.zip)から、 スタックサンプル PHP OpsWorks アプリの ZIP ファイルをダウンロードし、ローカルコンピュータの便利な場所に保存します。

1. [`index.php`] と [`ASSETS`] フォルダが、ダウンロードされた ZIP ファイルのルートレベルにあることを確認します。ルートレベルにない場合はファイルを解凍し、これらのファイルをルートレベルに持つ新しい ZIP ファイルを作成します。

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

1. **バケットの作成** を選択します。

1. [**Create a Bucket - Select a Bucket Name and Region**] ページの [**Bucket Name**] で、バケットの一意の名前を入力します。バケット名は、自分の AWS アカウントだけでなく、すべてのアカウントで一意である必要があります。このウォークスルーでは **my-appbucket** という名前を使用していますが、`my-appbucket-yearmonthday` を使用して一意のバケット名にすることができます。[**Region**] ドロップダウンリストで、[**US Standard**]、[**Create**] の順に選択します。[**US Standard**] は、`us-east-1` と同等です。  
![\[S3 の [Create a Bucket] ページ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_s3bucket.png)

1. 作成したバケットを [**All Buckets**] リストから選択します。

1. バケットのページで [**Upload**] を選択します。

1. [**Upload - Select Files and Folders**] ページで、[**Add files**] を選択します。ステップ 1 で保存した ZIP ファイルを参照し、[**Open**]、[**Start Upload**] の順に選択します。  
![\[S3 の [Select Files and Folders] ダイアログボックス\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_uploadzip.png)

1. アップロードの完了後、バケットのファイルリストから ZIP ファイルを選択し、[**Properties**] を選択します。

1. [**Properties**] ペインで、ZIP ファイルへのリンクをコピーし、リンクをメモします。パイプラインを作成するには、このリンクに含まれるバケット名と ZIP ファイル名の一部が必要です。

# ステップ 3: アプリケーションを OpsWorks スタックに追加する
<a name="other-services-cp-chef11-addapp"></a>

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

CodePipeline でパイプラインを作成する前に、PHP テストアプリケーションを OpsWorks スタックに追加します。パイプラインを作成するときは、 OpsWorks スタックに追加したアプリを選択する必要があります。

前の手順のステップ 10 の Amazon S3 バケットリンクを準備してください。この手順を完了するには、テストアプリケーションを保存したバケットへのリンクが必要です。

**アプリケーションを OpsWorks スタックに追加するには**

1.  OpsWorks スタックコンソールで **MyStack** を開き、ナビゲーションペインで**アプリ**を選択します。

1. [**Add app**] を選択します。

1. [**Add App**] ページで、以下の情報を入力します。

   1. アプリの名前を指定します。このウォークスルーでは、名前に `PHPTestApp` を使用します。

   1. [**Type**] ドロップダウンリストで、[**PHP**] を選択します。

   1. [**Data source type**] で [**None**] を選択します。このアプリには、外部データベースやデータソースは必要ありません。

   1. [**Repository type**] ドロップダウンリストで、[**S3 Archive**] を選択します。

   1. [**Repository URL**] 文字列ボックスに、「[ステップ 2 : アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef11-s3.md)」のステップ 10 でコピーした URL を貼り付けます。フォームは次のようになります。  
![\[[Add App] ページ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_addappops.png)

1. このフォームでは、他の設定を変更する必要はありません。[**Add App**] を選択します。

1. [**Apps**] ページのリストに [**PHPTestApp**] アプリケーションが表示されたら、次の手順 [ステップ 4 : CodePipeline でパイプラインを作成する](other-services-cp-chef11-pipeline.md) に進みます。

# ステップ 4 : CodePipeline でパイプラインを作成する
<a name="other-services-cp-chef11-pipeline"></a>

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

レイヤーと スタックで少なくとも 1 OpsWorks つのインスタンスが設定されたスタックを作成したら、アプリケーションまたは Chef OpsWorks クックブックを スタックリソースにデプロイするプロバイダーとして、 スタックを使用して CodePipeline OpsWorks にパイプラインを作成します。

**パイプラインを作成するには**

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

1. **パイプラインの作成** を選択します。

1. **[Getting started with CodePipeline]** (コードパイプラインの使用開始) ページで、タイプ [**MyOpsWorksPipeline**] など、アカウントに一意なパイプライン名を入力した後、**[Next step]** (次のステップ) を選択します。

1. **[Source Location]** (送信元の場所) ページで、**[Source provider]** (送信元のプロバイダー) ドロップダウンリストからの **[Amazon S3]** を選択します。

1. **[Amazon S3 details]** (Amazon S3 詳細) 領域で、使用する Amazon S3 バケットパスを **s3://*bucket-name*/*file name*** という形式で入力します。ステップ 10 ( [ステップ 2 : アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef11-s3.md)。このウォークスルーでは、パスは `s3://my-appbucket/opsworks-demo-php-simple-app-version1.zip` になります。[**次のステップ**] を選択します。  
![\[AWS CodePipeline のソースとプロバイダ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_source.png)

1. [**Build**] ページのドロップダウンリストで、[**No Build**]、[**Next step**] の順に選択します。

1. [**デプロイ**] ページで、デプロイプロバイダーとして [**OpsWorks Stacks**] を選択します。  
![\[Deploy configuration form for AWS OpsWorks Stacks with fields for stack, layer, and app selection.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cpprovider.png)

1. [**Stack**] フィールドに、`MyStack` または [ステップ 1: OpsWorks スタックでスタック、レイヤー、インスタンスを作成する](other-services-cp-chef11-stack.md) で作成したスタックの名前を入力します。

1. [**Layer**] (レイヤー) フィールドに、「`MyLayer`」と入力するか、「[ステップ 1: OpsWorks スタックでスタック、レイヤー、インスタンスを作成する](other-services-cp-chef11-stack.md)」で作成したレイヤーの名前を入力します。

1. **[App]** (アプリケーション) フィールドで、[ステップ 2 : アプリケーションコードを Amazon S3 バケットにアップロードする](other-services-cp-chef11-s3.md) で Amazon S3 にアップロードしたアプリケーションを選択してから、**[Next step]** (次のステップ) を選択します。

1. [**AWS Service Role**] ページで、[**Create Role**] を選択します。

   ユーザーに作成されるロール (`AWS-CodePipeline-Service`) を説明する IAM コンソールページとともに新しいページが開きます。[**Policy name**] ドロップダウンリストで、[**Create new policy**] を選択します。ポリシードキュメントに次のコンテンツがあることを確認します。[**Edit**] を選択し、必要に応じてポリシードキュメントを変更します。

   ```
   {
       "Statement": [
           {
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:GetBucketVersioning"
               ],
               "Resource": "*",
               "Effect": "Allow"
           },
           {
               "Action": "opsworks:*",
               "Resource": "*",
               "Effect": "Allow"
           }
       ]
   }
   ```

   ポリシードキュメントへの変更が完了したら、[**Allow**] を選択します。変更が IAM コンソールに表示されます。  
![\[AWSIAM role summary with policy document showing S3 object actions allowed.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_iamrole.png)
**注記**  
ロールの作成に失敗した場合は、**[AWS-CodePipeline-Service]** (AWS-CodePipeline サービス) という名前の IAM ロールがすでにある可能性があります。2016 年 5 月より前に **AWS-CodePipeline-Service** ロールを使用している場合、ロールにはデプロイプロバイダーとして OpsWorks スタックを使用するアクセス許可がない可能性があります。この場合、このステップに示すようにポリシーステートメントを更新する必要があります。エラーメッセージが表示された場合は、この手順の最初に戻ってから、**[Create role]** (ロールの作成) の代わりに **[Use existing role]** (既存のロールを使用する) を選択します。既存のロールを使用する場合は、このステップに示される権限を含むポリシーがロールにアタッチされている必要があります。サービス ロールとそのポリシーステートメントの詳細については、[IAM サービスロールのポリシーを編集する](https://docs.aws.amazon.com/codepipeline/latest/userguide/access-permissions.html#how-to-custom-role)を参照してください。

1. ロール作成プロセスが成功すると、IAM ページが閉じ、**[AWS Service Role]** (AWS サービスロール) ページに戻ります。[**次のステップ**] を選択します。

1. [**Review your pipeline**] ページで、ページに表示される選択肢を確認した後、[**Create pipeline**] を選択します。  
![\[Pipeline configuration details for MyOpsWorksPipeline with source, build, and beta stages.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cpreview.png)

1. 準備ができたパイプラインは、自動的にソースコードを見つけ、アプリケーションをスタックにデプロイし始めます。この処理には数分かかることもあります。

# ステップ 5: OpsWorks スタックでのアプリケーションのデプロイを検証する
<a name="other-services-cp-chef11-verify"></a>

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

CodePipeline によってスタックに PHP アプリケーションがデプロイされたことを確認するには、[ステップ 1: OpsWorks スタックでスタック、レイヤー、インスタンスを作成する](other-services-cp-chef11-stack.md) で作成したインスタンスにサインインします。PHP ウェブアプリケーションを表示して使用できる必要があります。

**OpsWorks スタックインスタンスでのアプリケーションのデプロイを確認するには**

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

1.  OpsWorks スタックダッシュボードで、**MyStack** を選択し、**MyLayer** を選択します。

1. ナビゲーションペインで [**Instances**] を選択した後、作成したインスタンスのパブリック IP アドレスを選択し、ウェブアプリケーションを表示します。  
![\[Instance details showing one online c3.large instance in us-east-1a with a public IP.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_instanceapp.png)

   アプリケーションが新しいブラウザタブに表示されます。  
![\[Confirmation message for a successfully deployed PHP application on AWS クラウド.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_successphp.png)

# ステップ 6 (オプション): アプリケーションコードを更新し、CodePipeline が自動的にアプリケーションを再デプロイすることを確認します。
<a name="other-services-cp-chef11-update"></a>

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

CodePipeline を使用してデプロイしたアプリケーションまたはクックブックのコードを変更すると、更新されたアーティファクトは CodePipeline によってターゲットインスタンス (この場合はターゲットスタックスタック) OpsWorks に自動的にデプロイされます。このセクションでは、サンプル PHP アプリケーションでコードを更新した際の自動再デプロイを示します。

**サンプルアプリケーションでコードを編集するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. サンプル PHP アプリケーションを保存しているバケットを開きます。  
![\[AWS S3 console interface showing a bucket with a PHP application file listed.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_editcodeS3.png)

1. アプリケーションを含む ZIP ファイルを選択します。[**Actions**] メニューで、[**Download**] を選択します。

1. ダイアログボックスでコンテクストメニューを開き (右クリック)、[**Download**] を選択して ZIP ファイルを使いやすい場所に保存します。[**OK**] を選択してください。

1. ZIP ファイルのコンテンツを使いやすい場所に展開します。展開したフォルダとそのサブフォルダやコンテンツで権限を変更し、編集を許可することが必要な場合があります。[`opsworks-demo-php-simple-app-version1`] フォルダで、編集する [`index.php`] ファイルを開きます。

1. 「`Your PHP application is now running`」という語句で検索します。「`Your PHP application is now running`」というテキストを「`You've just deployed your first app to AWS OpsWorks with AWS CodePipeline,`」に置き換えます。変数は編集しないでください。  
![\[HTML code snippet showing a simple PHP app deployment message with AWS のサービス.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_editheader.png)

1. `index.php` ファイルを保存して閉じます。

1. `opsworks-demo-php-simple-app-version1` フォルダを圧縮し、ZIP ファイルを便利な場所に保存します。ZIP ファイルの名前は変更しないでください。

1. 新しい ZIP ファイルを Amazon S3 バケットにアップロードします。このウォークスルーでは、バケット名は `my-appbucket` です。

1. CodePipeline コンソールを開き、スタックパイプライン (**MyOpsWorksPipeline**) OpsWorks を開きます。[**Release Change**] を選択します。

   (Amazon S3 バケット内のアプリケーションの更新バージョンから CodePipeline がコード変更を検出するまで待機できます。時間を節約するために、このチュートリアルでは、単に **[Release Change]** (変更をリリース) を選択するように指示します)。

1. パイプラインのステージを通じて CodePipeline が実行される様子を確認します。最初に、CodePipeline はソースアーティファクトに対する変更を検出します。  
![\[Pipeline diagram showing Source stage in progress and Beta stage succeeded 13 days ago.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_cpupdatesource.png)

   CodePipeline は、更新されたコードを OpsWorks スタックのスタックにプッシュします。  
![\[Pipeline view showing Source stage succeeded and Beta stage in progress.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_updatestack.png)

1. パイプラインの両ステージが正常に完了したら、 OpsWorks スタック (**MyStack**) でスタックを開きます。

1. [**MyStack**] プロパティページで、[**Instances**] を選択します。

1. [**Public IP**] 列で、インスタンスのパブリック IP アドレスを選択し、更新されたアプリケーションのテキストを表示します。  
![\[Confirmation message for successful deployment of a PHP app to AWS OpsWorks using AWS CodePipeline.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/cp_integ_successedit.png)

# ステップ 7 (オプション): リソースをクリーンアップする
<a name="other-services-cp-chef11-cleanup"></a>

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

AWS アカウントへの不要な請求を防ぐために、このウォークスルーに使用した AWS リソースを削除できます。これらの AWS リソースには、 OpsWorks スタックスタック、IAM ロールとインスタンスプロファイル、CodePipeline で作成したパイプラインが含まれます。ただし、 スタックと CodePipeline OpsWorks の詳細については、これらの AWS リソースを引き続き使用することをお勧めします。これらのリソースを保持すりには、このウォークスルーを完了する必要があります。

**アプリケーションをスタックから削除するには**

 CloudFormation テンプレートの一部としてアプリを作成または適用しなかったため、スタックを削除する前に PHP テストアプリを削除します CloudFormation。

1.  OpsWorks スタックコンソールのサービスナビゲーションペインで、**アプリ**を選択します。

1. [**Apps**] ページで [**PHPTestApp**] を選択した後、[**Actions**] で [**delete**] を選択します。確認を求めるプロンプトが表示されたら、**Delete** を選択します。 OpsWorks スタックはアプリを削除します。

**スタックを削除するには**

 CloudFormation テンプレートを実行してスタックを作成したため、テンプレートが作成したレイヤー、インスタンス、インスタンスプロファイル、セキュリティグループなどのスタックを CloudFormation コンソールで削除できます。

1.  CloudFormation コンソールを開きます。

1.  CloudFormation コンソールダッシュボードで、作成したスタック (**MyStack**) を選択します。[**Actions**] メニューで、[**Delete Stack**] を選択します。確認を求められたら [**Yes, Delete**] を選択します。

1. スタックの **[Status]** 列に [**DELETE\$1COMPLETE**] と表示されるまで待機します。

**パイプラインを削除するには**

1. CodePipeline コンソールを開きます。

1. CodePipeline ダッシュボードで、このチュートリアルで作成したパイプラインを選択します。

1. パイプラインページで、[**Edit**] を選択します。

1. [**Edit**] ページで、[**Delete**] を選択します。確認を求められたら [**Delete**] (削除) を選択します。