

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

# CLI チュートリアル: 階層のデプロイと WordPress ウェブサイトの絞り込み
<a name="ex-create-wp-stack"></a>

このセクションでは、AMS CLI を使用して高可用性 (HA) WordPress サイトを AMS 環境にデプロイする方法について説明します。この一連の手順には、必要な WordPress CodeDeploy 互換パッケージ (zip など) ファイルを作成する例が含まれています。

**注記**  
このデプロイチュートリアルは、AMZN Linux 環境で使用するために設計されています。  
必須変数パラメータは{{置き換え可能}}と表記されますが、状況に合わせて他のパラメータを変更することもできます。

タスクと必要な RFCs の概要：

1. インフラストラクチャを作成します。

   1. [RDS スタックを作成する (CLI)](ex-WP-stack-rds-create.md)

   1. ロードバランサーの作成

   1. Auto Scaling グループを作成し、ロードバランサーに結び付ける

   1. CodeDeploy アプリケーション用の S3 バケットを作成する

1. WordPress アプリケーションバンドルを作成する (RFC は必要ありません）

1. CodeDeploy を使用して WordPress アプリケーションバンドルをデプロイします。

   1. CodeDeploy アプリケーションを作成する

   1. CodeDeploy デプロイグループを作成する

   1. WordPress アプリケーションバンドルを S3 バケットにアップロードする (RFC は必要ありません）

   1. CodeDeploy アプリケーションをデプロイする

1. デプロイを検証する

1. デプロイをティアダウンする

認証されたアカウントからコマンドラインにあるすべてのステップに従います。

## CLI を使用した RFC の作成
<a name="ex-WP-stack-rfc-create"></a>

RFC の作成の詳細については、[RFCs](https://docs.aws.amazon.com/managedservices/latest/userguide/create-rfcs.html)」を参照してください。一般的な RFC パラメータの説明については、[「RFC 共通パラメータ](https://docs.aws.amazon.com/managedservices/latest/userguide/rfc-common-params.html)」を参照してください。

## CodeDeploy 用の WordPress アプリケーションバンドルを作成する
<a name="ex-create-wp-package"></a>

このセクションでは、アプリケーションデプロイバンドルを作成する例を示します。

1. WordPress をダウンロードし、ファイルを抽出して ./scripts ディレクトリを作成します。

   Linux コマンド：

   ```
   wget https://github.com/WordPress/WordPress/archive/master.zip
   ```

   Windows: ブラウザウィンドウ`https://github.com/WordPress/WordPress/archive/master.zip`に貼り付け、zip ファイルをダウンロードします。

   パッケージをアセンブルする一時ディレクトリを作成します。

   Linux:

   ```
   mkdir /tmp/WordPress
   ```

   Windows: WordPress」ディレクトリを作成します。後でディレクトリパスを使用します。

1. WordPress ソースをWordPress」ディレクトリに抽出し、./scripts ディレクトリを作成します。

   Linux:

   ```
   unzip master.zip -d /tmp/WordPress_Temp
   cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress
   rm -rf /tmp/WordPress_Temp
   rm -f master
   cd /tmp/WordPress
   mkdir scripts
   ```

   Windows: 作成したWordPress」ディレクトリに移動し、そこに「scripts」ディレクトリを作成します。

   Windows 環境の場合は、スクリプトファイルのブレークタイプを Unix (LF) に設定してください。Notepad \+\+ では、これはウィンドウの右下にあるオプションです。

1. WordPress ディレクトリに CodeDeploy **appspec.yml** ファイルを作成します (例をコピーする場合は、インデントを確認し、各スペース数を確認します）。重要: WordPress ファイル (この場合は WordPress ディレクトリ) を目的の宛先 (/var/www/html/WordPress) にコピーするには、 WordPress 「ソース」パスが正しいことを確認してください。この例では、appspec.yml ファイルは WordPress ファイルを含む ディレクトリにあるため、「/」のみが必要です。また、Auto Scaling グループに RHEL AMI を使用した場合でも、「os: linux」行はそのままにしておきます。appspec.yml ファイルの例：

   ```
   version: 0.0
   os: linux
   files:
     - source: /
       destination: /var/www/html/WordPress
   hooks:
     BeforeInstall:
       - location: scripts/install_dependencies.sh
         timeout: 300
         runas: root
     AfterInstall:
       - location: scripts/config_wordpress.sh
         timeout: 300
         runas: root
     ApplicationStart:
       - location: scripts/start_server.sh
         timeout: 300
         runas: root
     ApplicationStop:
       - location: scripts/stop_server.sh
         timeout: 300
         runas: root
   ```

1. WordPress ./scripts ディレクトリに bash ファイルスクリプトを作成します。

   まず、次の内容`config_wordpress.sh`で を作成します (必要に応じて、wp-config.php ファイルを直接編集できます）。
**注記**  
{{DBName}} を HA スタック RFC で指定された値 (例: ) に置き換えます`wordpress`。  
{{DB\_MasterUsername}} を HA スタック RFC で指定された`MasterUsername`値 ( など`admin`) に置き換えます。  
{{DB\_MasterUserPassword}} を HA スタック RFC で指定された`MasterUserPassword`値 ( など) に置き換えます`p4ssw0rd`。  
{{DB\_ENDPOINT}} を HA スタック RFC の実行出力のエンドポイント DNS 名 (例: ) に置き換えます`srt1cz23n45sfg.clgvd67uvydk.us-east-1.rds.amazonaws.com`。これは、[GetRfc](https://docs.aws.amazon.com/managedservices/latest/ApiReference-cm/API_GetRfc.html) オペレーション (CLI: get-rfc --rfc-id RFC\_ID) または以前に送信した HA スタック RFC の AMS コンソール RFC の詳細ページで確認できます。

   ```
   #!/bin/bash
   chmod -R 755 /var/www/html/WordPress
   cp /var/www/html/WordPress/wp-config-sample.php /var/www/html/WordPress/wp-config.php
   cd /var/www/html/WordPress
   sed -i "s/database_name_here/{{DBName}}/g" wp-config.php
   sed -i "s/username_here/{{DB_MasterUsername}}/g" wp-config.php
   sed -i "s/password_here/{{DB_MasterUserPassword}}/g" wp-config.php
   sed -i "s/localhost/{{DB_ENDPOINT}}/g" wp-config.php
   ```

1. 同じディレクトリに、次の内容`install_dependencies.sh`で を作成します。

   ```
   #!/bin/bash
   yum install -y php
   yum install -y php-mysql
   yum install -y mysql
   service httpd restart
   ```
**注記**  
HTTPS は、ヘルスチェックを最初から機能させるために、起動時にユーザーデータの一部としてインストールされます。

1. 同じディレクトリに、次の内容`start_server.sh`で を作成します。
   + Amazon Linux インスタンスの場合は、以下を使用します。

     ```
     #!/bin/bash
     service httpd start
     ```
   + RHEL インスタンスの場合は、以下を使用します (追加のコマンドは、SELINUX が WordPress を受け入れることを許可するポリシーです）。

     ```
     #!/bin/bash
     setsebool -P  httpd_can_network_connect_db 1
     setsebool -P  httpd_can_network_connect 1
     chcon -t httpd_sys_rw_content_t /var/www/html/WordPress/wp-content -R
     restorecon -Rv /var/www/html
     service httpd start
     ```

1. 同じディレクトリに、次の内容`stop_server.sh`で を作成します。

   ```
   #!/bin/bash
   service httpd stop
   ```

1. zip バンドルを作成します。

   Linux:

   ```
   $ cd /tmp/WordPress
   $ zip -r wordpress.zip .
   ```

   Windows: WordPress」ディレクトリに移動し、すべてのファイルを選択して zip ファイルを作成します。必ず wordpress.zip という名前を付けます。

## CodeDeploy を使用して WordPress アプリケーションバンドルをデプロイする
<a name="ex-create-wp-deploy-app"></a>

CodeDeploy は、Amazon EC2 インスタンスへのアプリケーションのデプロイを自動化する AWS デプロイサービスです。プロセスのこの部分では、CodeDeploy アプリケーションを作成し、CodeDeploy デプロイグループを作成し、CodeDeploy を使用してアプリケーションをデプロイします。

### CodeDeploy アプリケーションを作成する
<a name="ex-create-cd-app"></a>

CodeDeploy アプリケーションは、AWS CodeDeploy が使用する名前またはコンテナであり、デプロイ中に正しいリビジョン、デプロイ設定、デプロイグループが参照されるようにします。この場合、デプロイ設定は、以前に作成した WordPress バンドルです。

必須データ：
+ `VpcId`: 使用している VPC。これは以前に使用した VPC と同じである必要があります。
+ `CodeDeployApplicationName`: アカウント内で一意である必要があります。CodeDeploy コンソールで、既存のアプリケーション名を確認します。
+ `ChangeTypeId` および `ChangeTypeVersion`: このチュートリアルの変更タイプ ID は です。最新バージョン`ct-0ah3gwb9seqk2`を確認するには、次のコマンドを実行します。

  ```
  aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0ah3gwb9seqk2
  ```

1. CodeDeploy アプリケーション CT の実行パラメータ JSON スキーマを現在のフォルダ内のファイルに出力します。例では CreateCDAppParams.json.

   ```
   aws amscm get-change-type-version --change-type-id "ct-0ah3gwb9seqk2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDAppParams.json
   ```

1. 次のように JSON ファイルを変更して保存します。コンテンツを削除して置き換えることができます。

   ```
   {
   "Description":                      "{{Create WordPress CodeDeploy App}}",
   "VpcId":                            "{{VPC_ID}}",
   "StackTemplateId":                  "stm-sft6rv00000000000",
   "Name":                             "{{WordPressCDApp}}",
   "TimeoutInMinutes":                 60,
   "Parameters":   {
       "CodeDeployApplicationName":    "{{WordPressCDApp}}"
       }
   }
   ```

1. CreateRfc の JSON テンプレートを現在のフォルダ内のファイルに出力します。例では CreateCDAppRfc.json.

   ```
   aws amscm create-rfc --generate-cli-skeleton > CreateCDAppRfc.json
   ```

1. 次のように JSON ファイルを変更して保存します。コンテンツを削除して置き換えることができます。`RequestedStartTime` と `RequestedEndTime`はオプションになりました。これらを除外すると、RFC は承認されるとすぐに実行されることに注意してください (通常は自動的に実行されます）。「スケジュールされた」 RFC を送信するには、これらの値を追加します。

   ```
   {
   "ChangeTypeVersion":    "{{1.0}}",
   "ChangeTypeId":         "ct-0ah3gwb9seqk2",
   "Title":                "{{CD-App-For-WP-Stack-RFC}}"
   }
   ```

1. CreateCDAppRfc ファイルと実行パラメータファイルを指定して、RFC を作成します。

   ```
   aws amscm create-rfc --cli-input-json file://CreateCDAppRfc.json --execution-parameters file://CreateCDAppParams.json
   ```

   レスポンスで新しい RFC の RFC ID を受け取ります。後続のステップの ID を保存します。

1. RFC を送信します。

   ```
   aws amscm submit-rfc --rfc-id {{RFC_ID}}
   ```

   RFC が成功した場合、出力は受信されません。

1. RFC を送信します。

   ```
   aws amscm get-rfc --rfc-id {{RFC_ID}}
   ```

### CodeDeploy デプロイグループを作成する
<a name="ex-create-cd-dep-group"></a>

CodeDeploy デプロイグループを作成します。

CodeDeploy デプロイグループは、デプロイの対象となる個々のインスタンスのセットを定義します。

必須データ：
+ `VpcId`: 使用している VPC。これは以前に使用した VPC と同じである必要があります。
+ `CodeDeployApplicationName`: 以前に作成した値を使用します。
+ `CodeDeployAutoScalingGroups`: 前に作成した Auto Scaling グループの名前を使用します。
+ `CodeDeployDeploymentGroupName`: デプロイグループの名前。この名前はデプロイグループに関連付けられる各アプリケーションで一意にする必要があります。
+ `CodeDeployServiceRoleArn`: 例に示す式を使用します。
+ `ChangeTypeId` および `ChangeTypeVersion`: このチュートリアルの変更タイプ ID は です。最新バージョン`ct-2gd0u847qd9d2`を確認するには、次のコマンドを実行します。

  ```
  aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2gd0u847qd9d2
  ```

1. 実行パラメータ JSON スキーマを現在のフォルダ内のファイルに出力します。例では CreateCDDepGroupParams.json.

   ```
   aws amscm get-change-type-version --change-type-id "ct-2gd0u847qd9d2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDDepGroupParams.json
   ```

1. 次のように JSON ファイルを変更して保存します。コンテンツを削除して置き換えることができます。

   ```
   {
   "Description":                      "{{CreateWPCDDeploymentGroup}}",
   "VpcId":                            "{{VPC_ID}}",
   "StackTemplateId":                  "stm-sp9lrk00000000000",
   "Name":                             "{{WordPressCDAppGroup}}",
   "TimeoutInMinutes":                 60,
   "Parameters":   {
       "CodeDeployApplicationName":        "{{WordPressCDApp}}",
       "CodeDeployAutoScalingGroups":      ["{{ASG_NAME}}"],
       "CodeDeployDeploymentConfigName":   "CodeDeployDefault.HalfAtATime",
       "CodeDeployDeploymentGroupName":    "{{UNIQUE_CDDepGroupNAME}}",
       "CodeDeployServiceRoleArn":         "arn:aws:iam::{{ACCOUNT_ID}}:role/aws-codedeploy-role"
       }
   }
   ```

1. CreateRfc の JSON テンプレートを現在のフォルダ内のファイルに出力します。例では CreateCDDepGroupRfc.json.

   ```
   aws amscm create-rfc --generate-cli-skeleton > CreateCDDepGroupRfc.json
   ```

1. 次のように JSON ファイルを変更して保存します。コンテンツを削除して置き換えることができます。`RequestedStartTime` と `RequestedEndTime`はオプションになりました。これらを除外すると、RFC は承認されるとすぐに実行されることに注意してください (通常は自動的に実行されます）。「スケジュールされた」 RFC を送信するには、これらの値を追加します。

   ```
   {
   "ChangeTypeVersion":    "{{1.0}}",
   "ChangeTypeId":         "ct-2gd0u847qd9d2",
   "Title":                "{{CD-Dep-Group-For-WP-Stack-RFC}}"
   }
   ```

1. CreateCDDepGroupRfc ファイルと実行パラメータファイルを指定して、RFC を作成します。

   ```
   aws amscm create-rfc --cli-input-json file://CreateCDDepGroupRfc.json --execution-parameters file://CreateCDDepGroupParams.json
   ```

   レスポンスで新しい RFC の RFC ID を受け取ります。後続のステップの ID を保存します。

1. RFC を送信します。

   ```
   aws amscm submit-rfc --rfc-id {{RFC_ID}}
   ```

   RFC が成功した場合、出力は受信されません。

1. RFC ステータスを確認します。

   ```
   aws amscm get-rfc --rfc-id {{RFC_ID}}
   ```

### WordPress アプリケーションをアップロードする
<a name="ex-upload-wp-package"></a>

作成した S3 バケットインスタンスに自動的にアクセスできます。踏み台 ([「インスタンスへのアクセス](https://docs.aws.amazon.com/managedservices/latest/userguide/using-bastions.html)」を参照) または S3 コンソールからアクセスし、CodeDeploy バンドルをアップロードできます。スタックのデプロイを続行するには、バンドルを設定する必要があります。この例では、以前に作成したバケット名を使用します。

```
aws s3 cp wordpress/wordpress.zip s3://ACCOUNT_ID-codedeploy-bundles/
```

### CodeDeploy を使用して WordPress アプリケーションをデプロイする
<a name="ex-cd-deploy-wp-package"></a>

CodeDeploy アプリケーションをデプロイします。

CodeDeploy アプリケーションバンドルとデプロイグループを取得したら、この RFC を使用してアプリケーションをデプロイします。

必須データ：
+ `VPC-ID`: 使用している VPC。これは以前に使用した VPC と同じである必要があります。
+ `CodeDeployApplicationName`: 以前に作成した CodeDeploy アプリケーションの名前を使用します。
+ `CodeDeployDeploymentGroupName`: 前に作成した CodeDeploy デプロイグループの名前を使用します。
+ `S3Location` (アプリケーションバンドルをアップロードした場所): `S3Bucket`: 以前に作成した BucketName、`S3BundleType`および `S3Key`: S3 ストアに配置したバンドルのタイプと名前。
+ `ChangeTypeId` および `ChangeTypeVersion`: このチュートリアルの変更タイプ ID は です。最新バージョン`ct-2edc3sd1sqmrb`を確認するには、次のコマンドを実行します。

  ```
  aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2edc3sd1sqmrb
  ```

1. CodeDeploy アプリケーションデプロイ CT の実行パラメータ JSON スキーマを現在のフォルダ内のファイルに出力します。例では DeployCDAppParams.json.

   ```
   aws amscm get-change-type-version --change-type-id "ct-2edc3sd1sqmrb" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > DeployCDAppParams.json
   ```

1. 次のように JSON ファイルを変更します。コンテンツを削除して置き換えることができます。には`S3Bucket`、`BucketName`以前に作成した を使用します。

   ```
   {
   "Description":                      "{{Deploy WordPress CodeDeploy Application}}",
   "VpcId":                            "{{VPC_ID}}",
   "Name":                             "{{WP CodeDeploy Deployment Group}}",
   "TimeoutInMinutes":                 60,
   "Parameters":   {
       "CodeDeployApplicationName":        "{{WordPressCDApp}}",
       "CodeDeployDeploymentGroupName":    "{{WordPressCDDepGroup}}",
       "CodeDeployIgnoreApplicationStopFailures": {{false}},
       "CodeDeployRevision": {
         "RevisionType": "{{S3}}",
         "S3Location": {
           "S3Bucket": "{{ACCOUNT_ID.BUCKET_NAME}}",
           "S3BundleType": "{{zip}}",
           "S3Key": "wordpress.{{zip}}" }
           }
       }
   }
   ```

1. CreateRfc の JSON テンプレートを現在のフォルダのファイルに出力します。例の名前は DeployCDAppRfc.json:

   ```
   aws amscm create-rfc --generate-cli-skeleton > DeployCDAppRfc.json
   ```

1. DeployCDAppRfc.json ファイルを変更して保存します。コンテンツを削除して置き換えることができます。

   ```
   {
   "ChangeTypeVersion":    "{{1.0}}",
   "ChangeTypeId":         "ct-2edc3sd1sqmrb",
   "Title":                "{{CD-Deploy-For-WP-Stack-RFC}}",
   "RequestedStartTime":   "{{2017-04-28T22:45:00Z}}",
   "RequestedEndTime":     "{{2017-04-28T22:45:00Z}}"
   }
   ```

1. RFC を作成し、実行パラメータファイルと DeployCDAppRfc ファイルを指定します。

   ```
   aws amscm create-rfc --cli-input-json file://DeployCDAppRfc.json  --execution-parameters file://DeployCDAppParams.json
   ```

   レスポンスで新しい RFC の RfcId を受け取ります。後続のステップの ID を保存します。

1. RFC を送信します。

   ```
   aws amscm submit-rfc --rfc-id {{RFC_ID}}
   ```

   RFC が成功した場合、出力は受信されません。

## アプリケーションのデプロイを検証する
<a name="ex-validate-wp-deploy"></a>

WordPress デプロイパス: /WordPress を使用して、以前に作成したロードバランサーのエンドポイント (ELB CName) WordPress に移動します。例:

```
http://stack-{{ID-FOR-ELB}}.us-east-1.elb.amazonaws.com/WordPress
```

## アプリケーションのデプロイをティアダウンする
<a name="ex-delete-wp-deploy"></a>

デプロイを破棄するには、RDS データベーススタック、アプリケーションロードバランサー、Auto Scaling グループ、S3 バケット、および Code Deploy アプリケーションと group-six RFCs に対して Delete Stack CT を送信します。さらに、削除する RDS スナップショットのサービスリクエストを送信できます (10 日後に自動的に削除されますが、その間は少額のコストがかかります）。すべての のスタック IDsを収集し、以下の手順に従います。

このチュートリアルでは、AMS コンソールを使用して S3 スタックを削除する例を示します。この手順は、AMS コンソールを使用してスタックを削除する場合に適用されます。
**注記**  
S3 バケットを削除する場合は、まずオブジェクトを空にする必要があります。

必須データ：
+ `StackId`: 使用するスタック。これは、左側のナビゲーションのリンクから入手できる AMS コンソール**スタック**ページから確認できます。AMS SKMS API/CLI を使用して、AMS SKMS API リファレンスの を実行します。AWS Artifact Console の**レポート**タブを参照してください。 オペレーション (`list-stack-summaries` CLI の )。
+ このウォークスルーの変更タイプ ID は で`ct-0q0bic0ywqk6c`、バージョンは「1.0」です。最新バージョンを確認するには、次のコマンドを実行します。

  ```
  aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0q0bic0ywqk6c
  ```

*インライン作成*：
+ インラインで指定された実行パラメータ (インラインで実行パラメータを指定する場合は引用符をエスケープ) を使用して、create RFC コマンドを発行します。E

  ```
  aws amscm create-rfc --change-type-id "ct-0q0bic0ywqk6c" --change-type-version "1.0" --title "Delete My Stack" --execution-parameters "{\"StackId\":\"{{STACK_ID}}\"}"
  ```
+ RFC の作成オペレーションで返された RFC ID を使用して RFC を送信します。送信されるまで、RFC は `Editing`状態のままであり、 は動作しません。

  ```
  aws amscm submit-rfc --rfc-id {{RFC_ID}}
  ```
+ RFC ステータスをモニタリングし、実行出力を表示します。

  ```
  aws amscm get-rfc --rfc-id {{RFC_ID}}
  ```

*テンプレートの作成*：

1. RFC テンプレートを現在のフォルダ内のファイルに出力します。例名は DeleteStackRfc.json:

   ```
   aws amscm create-rfc --generate-cli-skeleton > DeleteStackRfc.json
   ```

1. DeleteStackRfc.json ファイルを変更して保存します。スタックの削除には実行パラメータが 1 つしかないため、実行パラメータは DeleteStackRfc.json ファイル自体に含めることができます (実行パラメータを使用して別の JSON ファイルを作成する必要はありません）。

   ExecutionParameters JSON 拡張機能の内部引用符は、バックスラッシュ (\\) でエスケープする必要があります。開始時刻と終了時刻のない例：

   ```
   {
   "ChangeTypeVersion":    "{{1.0}}",
   "ChangeTypeId":         "ct-0q0bic0ywqk6c",
   "Title":                "{{Delete-My-Stack-RFC}}"
   "ExecutionParameters":  "{
           \"StackId\":\"{{STACK_ID}}\"}"
   }
   ```

1. RFC を作成します。

   ```
   aws amscm create-rfc --cli-input-json file://DeleteStackRfc.json 
   ```

   レスポンスで新しい RFC の RfcId を受け取ります。例:

   ```
   {
   "RfcId": "daaa1867-ffc5-1473-192a-842f6b326102"
   }
   ```

   後続のステップの ID を保存します。

1. RFC を送信します。

   ```
   aws amscm submit-rfc --rfc-id {{RFC_ID}}
   ```

   RFC が成功した場合、コマンドラインに確認は送信されません。

1. リクエストのステータスをモニタリングし、実行出力を表示するには：

   ```
   aws amscm get-rfc --rfc-id {{RFC_ID}} --query "Rfc.{Status:Status.Name,Exec:ExecutionOutput}" --output table
   ```