

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

# CodeDeploy: チュートリアル
<a name="tutorials"></a>

このセクションには、CodeDeploy の使用方法の学習に役立ついくつかのチュートリアルが含まれています。

以下のチュートリアルの手順では、ファイルの格納場所 (例: c:\$1temp)、およびバケット、サブフォルダ、またはファイルに付ける名前 (例: それぞれ、amzn-s3-demo-bucket、HelloWorldApp、CodeDeployDemo-EC2-Trust.json) を提案していますが、それらを使用する必要はありません。手順を実行する際に、ファイルの場所と名前は必ず置き換えてください。

**Topics**
+ [チュートリアル: Amazon EC2 インスタンスに WordPress をデプロイする (Amazon Linux または Red Hat エンタープライズ Linux および Linux、macOS、または Unix)](tutorials-wordpress.md)
+ [チュートリアル: 「Hello, World\$1」 CodeDeploy を使用したアプリケーション (Windows Server)](tutorials-windows.md)
+ [チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。](tutorials-on-premises-instance.md)
+ [チュートリアル: CodeDeploy を使用して、Auto Scaling グループにアプリケーションをデプロイします。](tutorials-auto-scaling-group.md)
+ [チュートリアル: CodeDeploy を使用して、GitHub からアプリケーションをデプロイします。](tutorials-github.md)
+ [チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md)
+ [チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-deployment-with-hooks.md)
+ [チュートリアル: CodeDeploy と AWS サーバーレスアプリケーションモデルを使用して更新された Lambda 関数をデプロイする](tutorial-lambda-sam.md)

# チュートリアル: Amazon EC2 インスタンスに WordPress をデプロイする (Amazon Linux または Red Hat エンタープライズ Linux および Linux、macOS、または Unix)
<a name="tutorials-wordpress"></a>

このチュートリアルでは、PHP および MySQL に基づくオープンソースのブログツールおよびコンテンツ管理システムである WordPress を、Amazon Linux または Red Hat Enterprise Linux (RHEL) を実行している 1 つの Amazon EC2 インスタンスにデプロイします。

お探しのものではありませんか。
+ 代わりに Windows Server を実行している Amazon EC2 インスタンスへのデプロイの演習を行う場合は、「[チュートリアル: 「Hello, World\$1」 CodeDeploy を使用したアプリケーション (Windows Server)](tutorials-windows.md)」を参照してください。
+ Amazon EC2 インスタンスではなくオンプレミスインスタンスへのデプロイの演習を行う場合は、「[チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。](tutorials-on-premises-instance.md)」を参照してください。

このチュートリアルのステップは、Linux や macOS、Unix を実行しているローカルの開発用マシンの観点から説明されています。Windows を実行しているローカルマシンでこれらのステップのほとんどを完了できますが、**chmod** や **wget** などのコマンド、sed などのアプリケーション、および `/tmp` などのディレクトリパスを扱うステップは環境に合わせて変更する必要があります。

このチュートリアルを開始する前に、「[CodeDeploy の開始方法](getting-started-codedeploy.md)」の前提条件を完了している必要があります。これには、ユーザーの設定、 のインストールまたはアップグレード AWS CLI、IAM インスタンスプロファイルとサービスロールの作成が含まれます。

**Topics**
+ [ステップ 1: Amazon Linux または Red Hat エンタープライズ Linux Amazon EC2 インスタンスを起動して設定する](tutorials-wordpress-launch-instance.md)
+ [ステップ 2: Amazon Linux または Red Hat エンタープライズ Linux Amazon EC2 インスタンスにデプロイされるようにソースコンテンツを設定する](tutorials-wordpress-configure-content.md)
+ [ステップ 3: Amazon S3 に WordPress アプリケーションをアップロードする](tutorials-wordpress-upload-application.md)
+ [ステップ 4: WordPress アプリケーションをデプロイする](tutorials-wordpress-deploy-application.md)
+ [ステップ 5: WordPress アプリケーションを更新して再デプロイする](tutorials-wordpress-update-and-redeploy-application.md)
+ [ステップ 6: WordPress のアプリケーションと関連リソースのクリーンアップ](tutorials-wordpress-clean-up.md)

# ステップ 1: Amazon Linux または Red Hat エンタープライズ Linux Amazon EC2 インスタンスを起動して設定する
<a name="tutorials-wordpress-launch-instance"></a>

CodeDeploy を使用して WordPress アプリケーションをデプロイするには、Amazon Linux または Red Hat Enterprise Linux (RHEL) を実行する Amazon EC2 インスタンスが必要です。Amazon EC2 インスタンスでは、HTTP 接続を許可する新しいインバウンドセキュリティルールが必要です。このルールは、正しくデプロイした後で WordPress ページをブラウザで表示するために必要です。

「[CodeDeploy のための Amazon EC2 インスタンスを作成します。](instances-ec2-create.md)」の手順に従います インスタンスの Amazon EC2 インスタンスタグの割り当てに関するこれらの指示の一部を実行する際には、必ず **Name** のタグキーと、**CodeDeployDemo** のタグ値を指定します。(別のタグキーまたはタグ値を指定した場合、[ステップ 4: WordPress アプリケーションをデプロイする](tutorials-wordpress-deploy-application.md) の手順で予期しない結果が生成される場合があります)。

Amazon EC2 インスタンスを起動する手順に従った後、このページに戻り、次のセクションに進みます。次のステップとして、[CodeDeploy でアプリケーションを作成する](applications-create.md) には進まないでください。

## Amazon Linux と RHEL Amazon EC2 インスタンスに接続します
<a name="tutorials-wordpress-launch-instance-connect"></a>

Amazon EC2 インスタンスが起動した後、手順に従ってインスタンスに接続する演習をします。

1. **ssh** コマンド (または SSH 対応の [PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html) などのターミナルエミュレータ) を使用して Amazon Linux または RHEL Amazon EC2 インスタンスに接続します。Amazon EC2 インスタンスを開始した時に使用したインスタンスのパブリック DNS アドレスとキーペアのプライベートキーが必要になります。詳細については、「[インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html)」を参照してください。

   例えば、パブリック DNS アドレスが **ec2-01-234-567-890.compute-1.amazonaws.com** で、SSH アクセスの Amazon EC2 インスタンスキーペアが **codedeploydemo.pem** という名前の場合、以下のように入力します。

   ```
   ssh -i /path/to/codedeploydemo.pem ec2-user@ec2-01-234-567-890.compute-1.amazonaws.com
   ```

   `/path/to/codedeploydemo.pem` を `.pem` ファイルのパスに置き換え、例の DNS アドレスを Amazon Linux または RHEL Amazon EC2 インスタンスのアドレスと置き換えます。
**注記**  
キーファイルのアクセス権限がオープンすぎるというエラーを受信した場合は、現在のユーザー (お客様) だけにアクセス権限を与えるように限定する必要があります。例えば、**chmod** Linux、macOS、または UNIX の場合は、次のように入力します。

   ```
   chmod 400 /path/to/codedeploydemo.pem
   ```

1. サインインしたら、Amazon EC2 インスタンスについては、AMI のバナーを参照してください。Amazon Linux の場合は、次のようになります。

   ```
          __|  __|_  )
          _|  (     /   Amazon Linux AMI
         ___|\___|___|
   ```

1. 実行中の Amazon EC2 インスタンスからサインアウトできます。
**警告**  
Amazon EC2 インスタンスを停止または削除しないでください。そうしないと、CodeDeploy がインスタンスにデプロイできません。

## HTTP トラフィックを許可するインバウンドルールの Amazon Linux または RHEL Amazon EC2 インスタンスへの追加
<a name="tutorials-wordpress-launch-instance-add-inbound-rule"></a>

次のステップでは、デプロイされた WordPress アプリケーションのホームページがブラウザに表示されるように、Amazon EC2 インスタンスに開いている HTTP ポートがあることを確認します。

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

1. **インスタンス** を選択後、ご自分のインスタンスを選択します。

1. **セキュリティグループ** 内の **説明** タブで、**インバウンドのルールの表示** を選択します。

   セキュリティグループのルールの一覧は、次のように表示されます。

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  **セキュリティグループ** では、Amazon EC2 インスタンスのセキュリティグループを選択します。**launch-wizard-*N*** と名前が付けられる可能性があります。***N*** は、インスタンスの作成時にセキュリティグループに割り当てられた名前です。

    **[Inbound]** (インバウンド) タブを選択します。次の値を持つルールが表示された場合、ご利用のインスタンスのセキュリティグループは正しく設定されています。
   + [**Type**]: HTTP
   + [**Protocol**]: TCP
   + **[Port Range**]: 80
   + **ソース**: 0.0.0.0/0

1.  これらの値を持つルールが表示されない場合は、[セキュリティグループへのルールの追加](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule) の手順を使用して、新しいセキュリティルールに追加します。

# ステップ 2: Amazon Linux または Red Hat エンタープライズ Linux Amazon EC2 インスタンスにデプロイされるようにソースコンテンツを設定する
<a name="tutorials-wordpress-configure-content"></a>

ここでは、アプリケーションのソースコンテンツを設定し、インスタンスにデプロイできるものを用意します。

**Topics**
+ [ソースコードの入手](#tutorials-wordpress-configure-content-download-code)
+ [アプリケーションを実行するスクリプトの作成](#tutorials-wordpress-configure-content-create-scripts)
+ [アプリケーション仕様ファイルの追加](#tutorials-wordpress-configure-content-add-appspec-file)

## ソースコードの入手
<a name="tutorials-wordpress-configure-content-download-code"></a>

このチュートリアルでは、開発マシンからターゲット Amazon EC2 インスタンスに WordPress コンテンツ発行プラットフォームをデプロイします。WordPress のソースコードを入手するには、組み込みのコマンドラインの呼び出しを使用できます。または、開発マシンに Git をインストールしている場合は、代わりにそれを使用します。

これらのステップでは、WordPress ソースコードのコピーを開発マシンの `/tmp` ディレクトリにダウンロードすることを前提としています (任意のディレクトリを選択できますが、ステップで `/tmp` が指定されている場合は、その場所に必ず置き換えてください)。

次の 2 つのオプションのいずれかを選択して、開発マシンに WordPress ソースファイルをコピーします。最初のオプションでは、組み込みのコマンドラインの呼び出しを使用します。2 番目のオプションでは、Git を使用します。

**Topics**
+ [WordPress のソースコード (組み込みのコマンドライン呼び出し) のコピーを入手するには](#tutorials-wordpress-configure-content-download-code-command-line)
+ [WordPress ソースコード (Git) のコピーを入手するには](#tutorials-wordpress-configure-content-download-code-git)

### WordPress のソースコード (組み込みのコマンドライン呼び出し) のコピーを入手するには
<a name="tutorials-wordpress-configure-content-download-code-command-line"></a>

1. **wget** コマンドを呼び出して、WordPress のソースコードのコピーを .zip ファイル形式で現在のディレクトリにダウンロードします。

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

1. **unzip**、**mkdir**、**cp**、**rm** コマンドを呼び出して、以下を実行します。
   + `master`.zip ファイルを `/tmp/WordPress_Temp` ディレクトリ (フォルダ) に解凍します。
   + 解凍された内容を、`/tmp/WordPress` 宛先フォルダにコピーします。
   + 一時的な `/tmp/WordPress_Temp` フォルダと `master` ファイルを削除します。

   コマンドを一度に 1 つずつ実行します。

   ```
   unzip master -d /tmp/WordPress_Temp
   ```

   ```
   mkdir -p /tmp/WordPress
   ```

   ```
   cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress
   ```

   ```
   rm -rf /tmp/WordPress_Temp
   ```

   ```
   rm -f master
   ```

   これにより、`/tmp/WordPress` フォルダに WordPress ソースコードファイルのクリーンなセットが配置されます。

### WordPress ソースコード (Git) のコピーを入手するには
<a name="tutorials-wordpress-configure-content-download-code-git"></a>

1. 開発マシンで [Git](http://git-scm.com) をダウンロードしてインストールします。

1. `/tmp/WordPress` フォルダで **git init** コマンドを呼び出します。

1. **git clone** コマンドを呼び出してパブリック WordPress レポジトリのクローンを作成し、その独自のコピーを `/tmp/WordPress` 宛先フォルダで作成します。

   ```
   git clone https://github.com/WordPress/WordPress.git /tmp/WordPress
   ```

   これにより、`/tmp/WordPress` フォルダに WordPress ソースコードファイルのクリーンなセットが配置されます。

## アプリケーションを実行するスクリプトの作成
<a name="tutorials-wordpress-configure-content-create-scripts"></a>

次に、ディレクトリでフォルダとスクリプトを作成します。CodeDeploy はこれらのスクリプトを使用して、ターゲット Amazon EC2 インスタンスでアプリケーションリビジョンをセットアップし、デプロイします。スクリプトの作成には任意のテキストエディタを使用できます。

1. WordPress ソースコードのコピーでスクリプトディレクトリを作成します。

   ```
   mkdir -p /tmp/WordPress/scripts
   ```

1. `install_dependencies.sh` に `/tmp/WordPress/scripts` ファイルを作成します。ファイルに以下の行を追加します。この `install_dependencies.sh` スクリプトは Apache、MySQL、および PHP をインストールします。また、PHP に MySQL のサポートを追加します。

   ```
   #!/bin/bash
   sudo amazon-linux-extras install php7.4
   sudo yum install -y httpd mariadb-server php
   ```

1. `start_server.sh` に `/tmp/WordPress/scripts` ファイルを作成します。ファイルに以下の行を追加します。この `start_server.sh` スクリプトは Apache および MySQL を起動します。

   ```
   #!/bin/bash
   systemctl start mariadb.service
   systemctl start httpd.service
   systemctl start php-fpm.service
   ```

1. `stop_server.sh` に `/tmp/WordPress/scripts` ファイルを作成します。ファイルに以下の行を追加します。この `stop_server.sh` スクリプトは Apache および MySQL を停止します。

   ```
   #!/bin/bash
   isExistApp="pgrep httpd"
   if [[ -n $isExistApp ]]; then
   systemctl stop httpd.service
   fi
   isExistApp=pgrep mysqld
   if [[ -n $isExistApp ]]; then
   systemctl stop mariadb.service
   fi
   isExistApp=pgrep php-fpm
   if [[ -n $isExistApp ]]; then
   systemctl stop php-fpm.service
   
   fi
   ```

1. `create_test_db.sh` に `/tmp/WordPress/scripts` ファイルを作成します。ファイルに以下の行を追加します。この `create_test_db.sh` スクリプトは、MySQL を使用して、WordPress で使用する **test** データベースを作成します。

   ```
   #!/bin/bash
   mysql -uroot <<CREATE_TEST_DB
   CREATE DATABASE IF NOT EXISTS test;
   CREATE_TEST_DB
   ```

1. 最後に、`/tmp/WordPress/scripts` に `change_permissions.sh` スクリプトファイルを作成します。これは Apache のフォルダのアクセス権限を変更するために使用されます。
**重要**  
 このスクリプトにより、誰でも書き込めるように、`/tmp/WordPress` フォルダのアクセス権限が更新されました。これは、「[ステップ 5: WordPress アプリケーションを更新して再デプロイする](tutorials-wordpress-update-and-redeploy-application.md)」で WordPress がそのデータベースに書き込みを行うために必要です。WordPress アプリケーションがセットアップされたら、次のコマンドを実行して、アクセス権限をよりセキュアな設定に更新します。  

   ```
   chmod -R 755 /var/www/html/WordPress
   ```

   ```
   #!/bin/bash
   chmod -R 777 /var/www/html/WordPress
   ```

1. すべてのスクリプトに実行可能権限を付与します。コマンドラインで、次のように入力します。

   ```
   chmod +x /tmp/WordPress/scripts/*
   ```

## アプリケーション仕様ファイルの追加
<a name="tutorials-wordpress-configure-content-add-appspec-file"></a>

次に、アプリケーション仕様ファイル (AppSpec ファイル) [YAML](http://www.yaml.org) CodeDeploy によって使用されるフォーマットされたファイルを追加します。
+ アプリケーションリビジョンのソースファイルを、ターゲット Amazon EC2 インスタンスの宛先にマッピングする。
+ デプロイされたファイルのカスタムアクセス権限を指定する。
+ デプロイ中にターゲット Amazon EC2 インスタンスで実行するスクリプトを指定する。

AppSpec のファイル名は、`appspec.yml` とする必要があります。アプリケーションソースコードのルートディレクトリに配置する必要があります。このチュートリアルでは、ルートディレクトリは `/tmp/WordPress` です。

テキストエディタで `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/change_permissions.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/start_server.sh
    - location: scripts/create_test_db.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: root
```

CodeDeploy はこの AppSpec ファイルを使用して、開発マシンの `/tmp/WordPress` フォルダのすべてのファイルを、ターゲットの Amazon EC2 インスタンスの `/var/www/html/WordPress` フォルダにコピーします。デプロイ中に CodeDeploy は、デプロイライフサイクルで `root` や `/var/www/html/WordPress/scripts` などの中に指定されたイベントで、指定するスクリプトをターゲットの Amazon EC2 インスタンスの **BeforeInstall**、**AfterInstall** のフォルダとして実行します。これらのスクリプトのいずれかで実行に 300 秒 (5 分) 以上かかる場合、CodeDeploy はデプロイを停止し、デプロイを失敗としてマークします。

これらの設定の詳細については、「[CodeDeploy AppSpec ファイルのリファレンス](reference-appspec-file.md)」を参照してください。

**重要**  
このファイルの項目間のスペースの場所と数は重要です。間隔が正しくない場合、CodeDeploy はデバッグが困難な可能性のあるエラーを発生させます。詳細については、「[AppSpec ファイルの間隔](reference-appspec-file.md#reference-appspec-file-spacing)」を参照してください。

# ステップ 3: Amazon S3 に WordPress アプリケーションをアップロードする
<a name="tutorials-wordpress-upload-application"></a>

ここでソースコンテンツを CodeDeploy がデプロイできる場所に準備してアップロードします。次の手順では、Amazon S3 バケットをプロビジョニングしてバケット用のアプリケーションリビジョンのファイルを準備し、リビジョンのファイルをバンドルしてから、そのリビジョンをバケットにプッシュする方法を示します。

**注記**  
このチュートリアルでは説明されていませんが、CodeDeploy を使用して GitHub リポジトリからインスタンスにアプリケーションをデプロイできます。詳細については、「[GitHub と CodeDeploy との統合](integrations-partners-github.md)」を参照してください。

**Topics**
+ [Amazon S3 バケットをプロビジョニングします](#tutorials-wordpress-upload-application-create-s3-bucket)
+ [バケットのアプリケーションファイルを準備する](#tutorials-wordpress-upload-application-prepare-application-files)
+ [アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする](#tutorials-wordpress-upload-application-bundle-and-push-archive)

## Amazon S3 バケットをプロビジョニングします
<a name="tutorials-wordpress-upload-application-create-s3-bucket"></a>

ストレージコンテナあるいは Amazon S3 *バケット* を作成、または既存のバケットを使用します。バケットにリビジョンをアップロードできること、およびデプロイで使用する Amazon EC2 インスタンスがバケットからリビジョンをダウンロードできることを確認します。

 AWS CLI、Amazon S3 コンソール、または Amazon S3 APIs を使用してAmazon S3バケットを作成できます。バケットを作成したら、バケットとその AWS アクセス許可を付与します。

**注記**  
バケット名は、すべての AWS アカウントで Amazon S3 全体で一意である必要があります。**amzn-s3-demo-bucket** を使用できない場合、**amzn-s3-demo-bucket** の後にダッシュと自分の名前のイニシャル、または他の一意な識別子など別のバケット名を試してください。このチュートリアル全体で、バケット名を **amzn-s3-demo-bucket** に置き換えます。  
Amazon S3 バケットは、ターゲット Amazon EC2 インスタンスが起動されるのと同じ AWS リージョンに作成する必要があります。例えば、バケットを米国東部 (バージニア北部) リージョンで作成する場合、対象の Amazon EC2 インスタンスを米国東部 (バージニア北部) リージョンで起動する必要があります。

**Topics**
+ [Amazon S3 バケット (CLI) の作成](#tutorials-wordpress-upload-application-create-s3-bucket-cli)
+ [Amazon S3 バケット (コンソール) の作成](#tutorials-wordpress-upload-application-create-s3-bucket-console)
+ [Amazon S3 バケットと AWS アカウントにアクセス許可を付与する](#tutorials-wordpress-upload-application-create-s3-bucket-grant-permissions)

### Amazon S3 バケット (CLI) の作成
<a name="tutorials-wordpress-upload-application-create-s3-bucket-cli"></a>

**mb** コマンドを呼び出して、**amzn-s3-demo-bucket** という名前の Amazon S3 バケットを作成します。

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### Amazon S3 バケット (コンソール) の作成
<a name="tutorials-wordpress-upload-application-create-s3-bucket-console"></a>

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

1. Amazon S3 コンソールで [**バケットの作成**] を選択します。

1. [**Bucket name**] ボックスで、バケットの名前を入力します。

1. [**Region**] リストで、ターゲットリージョンを選択し、[**Create**] を選択します。

### Amazon S3 バケットと AWS アカウントにアクセス許可を付与する
<a name="tutorials-wordpress-upload-application-create-s3-bucket-grant-permissions"></a>

Amazon S3 バケットへのアップロードには、許可が必要です。Amazon S3 バケットポリシーで、これらのアクセス許可を指定できます。たとえば、次の Amazon S3 バケットポリシーでは、ワイルドカード文字 (\$1) を使用すると、 AWS アカウント`111122223333`は という名前の Amazon S3 バケット内の任意のディレクトリにファイルをアップロードできます`amzn-s3-demo-bucket`。

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

 AWS アカウント ID を表示するには、[AWS 「アカウント ID の検索](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)」を参照してください。

今は、Amazon S3 バケットが参加している各 Amazon EC2 インスタンスからのダウンロードリクエストを許可していることを確認するのに適した時期です。Amazon S3 バケットポリシーで、これを指定できます。例えば、次の Amazon S3 バケットポリシーでは、ワイルドカード文字 (\$1) を使用すると、ARN `arn:aws:iam::444455556666:role/CodeDeployDemo` を含む IAM インスタンスプロファイルがアタッチされた Amazon EC2 インスタンスが、`amzn-s3-demo-bucket` という名前の Amazon S3 バケットの任意のディレクトリからファイルをダウンロードすることを許可します。

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

 Amazon S3 バケットポリシーを生成しアタッチする方法の詳細については、「[バケットポリシーの例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)」を参照してください。

IAM ポリシーを作成しアタッチする方法については、「[ポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html#AddingPermissions_Console)」を参照してください。

## バケットのアプリケーションファイルを準備する
<a name="tutorials-wordpress-upload-application-prepare-application-files"></a>

WordPress アプリケーションファイル、 およびスクリプトが、次のような開発用マシンで構成されることを確認します。

```
/tmp/
  |--WordPress/
      |-- appspec.yml  
      |-- scripts/
      |    |-- change_permissions.sh
      |    |-- create_test_db.sh
      |    |-- install_dependencies.sh
      |    |-- start_server.sh
      |    |-- stop_server.sh
      |-- wp-admin/
      |    |-- (various files...)
      |-- wp-content/
      |    |-- (various files...)
      |-- wp-includes/
      |    |-- (various files...)
      |-- index.php
      |-- license.txt
      |-- readme.html
      |-- (various files ending with .php...)
```

## アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする
<a name="tutorials-wordpress-upload-application-bundle-and-push-archive"></a>

WordPress アプリケーションファイルと をアーカイブファイル (アプリケーション *リビジョン* と呼ばれる) にバンドルします。

**注記**  
バケットにオブジェクトを保存したり、バケットの内外にアプリケーションのリビジョンを転送したりする場合に課金されることがあります。詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

1. 開発マシンで、ファイルが保存されたフォルダに切り替えます。

   ```
   cd /tmp/WordPress
   ```
**注記**  
このフォルダに切替わらなければ、ファイルのバンドルは現在のフォルダで起動されます。例えば、現在のフォルダが `/tmp` ではなく `/tmp/WordPress` である場合、バンドルは、`tmp` サブフォルダ以上を含む可能性のある `WordPress` フォルダ内のファイルとサブフォルダから開始します。

1. **create-application** コマンドを呼び出して、**WordPress\$1App** という名前の新しいアプリケーションを登録します。

   ```
   aws deploy create-application --application-name WordPress_App
   ```

1. CodeDeploy で [push](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) コマンドを呼び出してファイルをまとめてバンドルし、Amazon S3 にリビジョンをアップロードし、アップロードされたリビジョンに関する情報を 1 つの操作で CodeDeploy に登録します。

   ```
   aws deploy push \
     --application-name WordPress_App \
     --s3-location s3://amzn-s3-demo-bucket/WordPressApp.zip \
     --ignore-hidden-files
   ```

   このコマンドは、現在のディレクトリ (隠しファイルを除く) から、**WordPressApp.zip** という名前の 1 つのアーカイブファイルにファイルをバンドルし、リビジョンを **amzn-s3-demo-bucket** バケットにアップロードし、CodeDeploy でアップロードしたリビジョンについての情報を登録します。

# ステップ 4: WordPress アプリケーションをデプロイする
<a name="tutorials-wordpress-deploy-application"></a>

ここで、Amazon S3 にアップロードしたサンプルの WordPress アプリケーションリビジョンをデプロイします。 AWS CLI または CodeDeploy コンソールを使用してリビジョンをデプロイし、デプロイの進行状況をモニタリングできます。アプリケーションリビジョンが正常にデプロイされた後に、その結果を確認します。

**Topics**
+ [CodeDeploy を使用して、アプリケーションリビジョンをデプロイします](#tutorials-wordpress-deploy-application-create-deployment)
+ [デプロイをモニタリングおよびトラブルシューティングします。](#tutorials-wordpress-deploy-application-monitor)
+ [デプロイの確認](#tutorials-wordpress-deploy-application-verify-deployment)

## CodeDeploy を使用して、アプリケーションリビジョンをデプロイします
<a name="tutorials-wordpress-deploy-application-create-deployment"></a>

 AWS CLI または コンソールを使用して、アプリケーションリビジョンをデプロイします。

**Topics**
+ [アプリケーションリビジョン (CLI) をデプロイするには](#tutorials-wordpress-deploy-application-create-deployment-cli)
+ [アプリケーションリビジョン (コンソール) のデプロイ](#tutorials-wordpress-deploy-application-create-deployment-console)

### アプリケーションリビジョン (CLI) をデプロイするには
<a name="tutorials-wordpress-deploy-application-create-deployment-cli"></a>

1. デプロイにはデプロイグループが必要です。ただし、デプロイグループを作成する前に、サービスロール ARN が必要です。サービスロールは、ユーザーに代わってサービスアクセス権限を付与する IAM ロールです。この場合、サービスロールは、Amazon EC2 インスタンスにアクセスして Amazon EC2 インスタンスタグを拡張 (読み込み) するためのアクセス権限を CodeDeploy に付与します。

   すでに [サービスロールの作成 (CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli) の手順に従ってサービスロールを作成している必要があります。サービスロールの ARN を取得するには、「[サービスロール ARN の取得 (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli)」を参照してください。

1. サービスロールの ARN を取得したら、**create-deployment-group** コマンドを呼び出し、**WordPress\$1DepGroup** という名前の Amazon EC2 タグと **WordPress\$1App** という名前のデプロイ設定を使用して、**CodeDeployDemo** という名前のアプリケーションと関連付けられる **CodeDeployDefault.OneAtATime** という名前のデプロイグループを作成します。

   ```
   aws deploy create-deployment-group \
     --application-name WordPress_App \
     --deployment-group-name WordPress_DepGroup \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE \
     --service-role-arn serviceRoleARN
   ```

   
**注記**  
[デプロイメントグループの作成](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) コマンドは、デプロイおよびインスタンス内の指定されたイベントについて、トピックサブスクライバーに Amazon SNS 通知を送信するトリガーの作成に対応しています。このコマンドは、Amazon CloudWatch アラームのモニタリングしきい値が満たされたときにデプロイを自動的にロールバックし、デプロイを停止するアラームを設定するオプションもサポートします。このチュートリアルでは、これらのアクションに関するコマンドは含まれていません。

1. デプロイを作成する前に、デプロイグループのインスタンスに CodeDeploy エージェントがインストールされている必要があります。 AWS Systems Manager で次のコマンドを使用して、コマンドラインからエージェントをインストールできます。

   ```
   aws ssm create-association \
     --name AWS-ConfigureAWSPackage \
     --targets Key=tag:Name,Values=CodeDeployDemo \
     --parameters action=Install,name=AWSCodeDeployAgent \
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

   このコマンドは、CodeDeploy エージェントをインストールし、毎週日曜日の午前 2:00 に更新を試行する関連付けを Systems Manager ステートマネージャーに作成します。CodeDeploy エージェントの詳細については、「[CodeDeploy エージェントの使用](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)」を参照してください。Systems Manager のさらなる詳細については、「[AWS Systems Managerとは](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」 を参照してください。

1. 次に、**create-deployment** コマンドを呼び出して、**amzn-s3-demo-bucket** という名前のバケットで **WordPressApp.zip** という名前のアプリケーションバージョンを使用して、**WordPress\$1App** という名前のアプリケーション、**CodeDeployDefault.OneAtATime** という名前のデプロイ設定と **WordPress\$1DepGroup** という名前のデプロイグループに関連付けられるデプロイを作成します。

   ```
   aws deploy create-deployment \
     --application-name WordPress_App \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name WordPress_DepGroup \
     --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=WordPressApp.zip
   ```

### アプリケーションリビジョン (コンソール) のデプロイ
<a name="tutorials-wordpress-deploy-application-create-deployment-console"></a>

1. CodeDeploy コンソールを使用してアプリケーションリビジョンをデプロイする前に、サービスロール ARN が必要になります。サービスロールは、ユーザーに代わってサービスアクセス権限を付与する IAM ロールです。この場合、サービスロールは、Amazon EC2 インスタンスにアクセスして Amazon EC2 インスタンスタグを拡張 (読み込み) するためのアクセス権限を CodeDeploy に付与します。

   すでに [サービスロールの作成 (コンソール)](getting-started-create-service-role.md#getting-started-create-service-role-console) の手順に従ってサービスロールを作成している必要があります。サービスロールの ARN を取得するには、「[サービスロール ARN の取得 (コンソール)](getting-started-create-service-role.md#getting-started-get-service-role-console)」を参照してください。

1. ARN があるので、CodeDeploy コンソールを使用して、アプリケーションリビジョンをデプロイします。

   にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1. アプリケーションのリストで、**WordPress\$1App** を選択します。

1. [**デプロイグループ**] タブで、[**デプロイグループの作成**] を選択します。

1. **[Deployment group name]** (デプロイグループ名) に「**WordPress\$1DepGroup**」と入力します。

1. [**Deployment type**] で、[**In-place deployment**] を選択します。

1. [**環境設定**] で、[**Amazon EC2 インスタンス**] を選択します。

1. **を使用した エージェント設定 AWS Systems Manager**では、デフォルトのままにします。

1. **[Key]** (キー) に、「**Name**」と入力します。

1. **[値]** には「**CodeDeployDemo**」と入力します。
**注記**  
**CodeDeployDemo** と入力すると、[**1**] が [**Matching instances**] の下に表示され、CodeDeploy が一致する Amazon EC2 インスタンスを 1 つ見つけたことを確認します。

1. [**デプロイ設定**] で [**CodeDeployDefault.OneAtATime**] を選択します。

1. [**サービスロール ARN**] でサービスロール ARN を選択し、[**デプロイグループの作成**] を選択します。

1. **[デプロイの作成]** を選択します。

1. [**デプロイグループ**] で [**WordPress\$1DepGroup**] を選択します。

1. [**Repository type**] の横の [**My application is stored in Amazon S3**] を選択します。[**リビジョンの場所**] で、前に Amazon S3 にアップロードしたサンプルアプリケーション WordPress のリビジョンの場所を入力します。場所の取得

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

   1. バケットのリストで、**[amzn-s3-demo-bucket]** (または、アプリケーションリビジョンをアップロードしたバケットの名前) を選択します。

   1. オブジェクトのリストで、**WordPressApp.zip** を選択します。

   1. [**概要**] タブで、[**リンク**] フィールドの値をクリップボードにコピーします。

      次のように表示されます。

      **https://s3.amazonaws.com/amzn-s3-demo-bucket/WordPressApp.zip**

   1. CodeDeploy コンソールに戻り、**[リビジョンの場所]** に **[リンク]** フィールドの値を貼り付けます。

1. [**ファイルタイプ**] リストで、ファイルの種類を検出できないというメッセージが表示される場合は、[**.zip**] を選択します。

1. (オプション) [**Deployment description**] ボックスにコメントを入力します。

1. [**Deployment group overrides (デプロイグループの上書き)**] を展開し、[**デプロイ設定**] から [**CodeDeployDefault.OneAtATime**] を選択します。

1. **デプロイの開始** を選択します。新しく作成されたデプロイに関する情報は [**Deployments**] ページに表示されます。

## デプロイをモニタリングおよびトラブルシューティングします。
<a name="tutorials-wordpress-deploy-application-monitor"></a>

 AWS CLI または コンソールを使用して、デプロイをモニタリングおよびトラブルシューティングします。

**Topics**
+ [デプロイ (CLI) をモニタリングおよびトラブルシューティングするには](#tutorials-wordpress-deploy-application-monitor-cli)
+ [デプロイ (コンソール) をモニタリングおよびトラブルシューティングするには](#tutorials-wordpress-deploy-application-monitor-console)

### デプロイ (CLI) をモニタリングおよびトラブルシューティングするには
<a name="tutorials-wordpress-deploy-application-monitor-cli"></a>

1. **WordPress\$1App** という名前のアプリケーションと **WordPress\$1DepGroup** という名前のデプロイグループに対して **list-deployments** コマンドを呼び出して、デプロイの ID を取得します。

   ```
   aws deploy list-deployments --application-name WordPress_App --deployment-group-name WordPress_DepGroup --query 'deployments' --output text
   ```

1. デプロイ ID を使用して **get-deployment** コマンドを呼び出します。

   ```
   aws deploy get-deployment --deployment-id deploymentID --query 'deploymentInfo.status' --output text
   ```

1. コマンドはデプロイの全体ステータスを返します。成功すると、値は `Succeeded` になります。

   全体的なステータスが `Failed` の場合、[list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) や [デプロイメントインスタンスの取得](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) などのコマンドを呼び出してトラブルシューティングを行います。トラブルシューティングの他のオプションについては、「[ログファイルの分析によるインスタンスでのデプロイの失敗の調査](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)」を参照してください。

### デプロイ (コンソール) をモニタリングおよびトラブルシューティングするには
<a name="tutorials-wordpress-deploy-application-monitor-console"></a>

CodeDeploy コンソール の [**Deployments**] ページで、[**Status**] 列でデプロイのステータスをモニタリングできます。

特に [**Status**] 列の値が [**Succeeded**] 以外の値である場合にデプロイに関する詳細情報を取得するには。

1. [**デプロイ**] テーブルで、デプロイの名前を選択します。デプロイが失敗すると、失敗の原因を説明するメッセージが表示されます。

1. [**インスタンスアクティビティ**] に、デプロイに関する詳細情報が表示されます。デプロイ失敗後、デプロイが失敗した Amazon EC2 インスタンスおよびステップを特定できる場合があります。

1. より多くのトラブルシューティングを行う場合、「[CodeDeploy を用いてインスタンスの詳細の表示](instances-view-details.md)」で説明されているような手法を使用できます。また、Amazon EC2 インスタンスでデプロイログファイルを分析できます。詳細については、「[ログファイルの分析によるインスタンスでのデプロイの失敗の調査](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)」を参照してください。

## デプロイの確認
<a name="tutorials-wordpress-deploy-application-verify-deployment"></a>

デプロイが成功したら、WordPress インストールが動作していることを確認します。Amazon EC2 インスタンスのパブリック DNS アドレスの後に `/WordPress` を使用して、ウェブブラウザのサイトを表示します。(Amazon EC2 コンソールでパブリック DNS 値を取得するには、Amazon EC2 インスタンスを選択して [**説明**] タブで **[パブリック DNS**] で値を探します。)

例えば、Amazon EC2 インスタンスのパブリック DNS アドレスが **ec2-01-234-567-890.compute-1.amazonaws.com** である場合、次の URL を使用します。

```
http://ec2-01-234-567-890.compute-1.amazonaws.com/WordPress
```

ブラウザでサイトを表示すると、次のような WordPress のウェルカムページが表示されます。

![\[WordPress ウェルカムページ\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/WordPress-Welcome-Page-013118.png)


 Amazon EC2 インスタンスで、HTTP インバウンドルールがそのセキュリティグループに追加されていない場合、WordPress ウェルカムページは表示されません。リモートサーバーが応答していないというメッセージが表示された場合は、Amazon EC2 インスタンスのセキュリティグループにインバウンドルールがあることを確認します。詳細については、「[HTTP トラフィックを許可するインバウンドルールの Amazon Linux または RHEL Amazon EC2 インスタンスへの追加Windows Server の Amazon EC2 インスタンスへの HTTP トラフィックを許可するインバウンドルールを追加する](tutorials-wordpress-launch-instance.md#tutorials-wordpress-launch-instance-add-inbound-rule)」を参照してください。

# ステップ 5: WordPress アプリケーションを更新して再デプロイする
<a name="tutorials-wordpress-update-and-redeploy-application"></a>

正常にアプリケーションリビジョンをデプロイしたので、開発用マシンで WordPress コードを更新し、 CodeDeploy を使用して、サイトを再デプロイします。後で、Amazon EC2 インスタンスのコード変更を確認する必要があります。

**Topics**
+ [WordPress サイトの設定](#tutorials-wordpress-update-and-redeploy-application-configure-and-install)
+ [サイトの変更](#tutorials-wordpress-update-and-redeploy-application-modify-code)
+ [サイトの再デプロイ](#tutorials-wordpress-update-and-redeploy-application-deploy-updates)

## WordPress サイトの設定
<a name="tutorials-wordpress-update-and-redeploy-application-configure-and-install"></a>

コード変更の効果を表示するには、完全に機能するインストールができるように、WordPress サイトの設定を終了します。

1. ウェブブラウザにサイトの URL を入力します。URL は Amazon EC2 インスタンスと `/WordPress` 拡張子のパブリック DNS アドレスです。この WordPress サイト例 (Amazon EC2 インスタンスのパブリック DNS アドレスの例) では、URL は **http://ec2-01-234-567-890.compute-1.amazonaws.com/WordPress** です。

1. サイトをまだ設定していない場合は、WordPress のデフォルトのウェルカムページが表示されます。[**始めましょう**] を選択します。

1. デフォルトの MySQL データベースを使用するため、データベース設定ページで、以下の値を入力します。
   + **データベース名**: **test**
   + **ユーザー名**: **root**
   + **パスワード**: 空白のままにします。
   + **データーベースホスト**: **localhost**
   + **テーブルプレフィックス**: **wp\$1**

   [**Submit**] を選択して、データベースをセットアップします。

1. サイト設定を続行します。[**Welcome**] ページで任意の値を入力して [**Install WordPress**] を選択します。インストールが完了したら、ダッシュボードにサインインできます。

**重要**  
 WordPress アプリケーションのデプロイ中に、**change\$1permissions.sh** スクリプトにより `/tmp/WordPress` フォルダのアクセス権限が更新されたため、誰でもこのフォルダに書き込むことができます。ここで、次のコマンドを実行して、所有者のみが書き込めるようにアクセス権限を制限します。  

```
chmod -R 755 /var/www/html/WordPress
```

## サイトの変更
<a name="tutorials-wordpress-update-and-redeploy-application-modify-code"></a>

WordPress サイトを変更するには、開発用マシンのアプリケーションのフォルダを参照してください。

```
cd /tmp/WordPress
```

サイトの色の一部を変更するには、`wp-content/themes/twentyfifteen/style.css` ファイルで、テキストエディターまたは **sed** を使用して、`#fff` を `#768331` に変更します。

Linux または、GNU **sed** を持つほかのシステムでは、以下を使用します。

```
sed -i 's/#fff/#768331/g' wp-content/themes/twentyfifteen/style.css
```

macOS、Unix、または BSD **sed** を持つ他のシステムでは、以下を使用します。

```
sed -i '' 's/#fff/#768331/g' wp-content/themes/twentyfifteen/style.css
```

## サイトの再デプロイ
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates"></a>

サイトのコードを変更したので、Amazon S3 および CodeDeploy を使用してサイトを再デプロイします。

「[アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする](tutorials-wordpress-upload-application.md#tutorials-wordpress-upload-application-bundle-and-push-archive)」の説明に従って、変更内容をバンドルして Amazon S3 にアップロードします。(これらの手順に従うときに、アプリケーションを作成する必要がないことに注意してください。) 新しいリビジョンに以前と同じキーを指定します (**WordPressApp.zip**)。それを先に作成した同じ Amazon S3 バケットにアップロードします (例: **amzn-s3-demo-bucket**)。

サイトを再デプロイするには AWS CLI、、CodeDeploy コンソール、または CodeDeploy APIs を使用します。

**Topics**
+ [サイト (CLI) に再デプロイするには](#tutorials-wordpress-update-and-redeploy-application-deploy-updates-cli)
+ [サイト (コンソール) の再デプロイ](#tutorials-wordpress-update-and-redeploy-application-deploy-updates-console)

### サイト (CLI) に再デプロイするには
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates-cli"></a>

**create-deployment** コマンドを呼び出して、新しくアップロードされたリビジョンに基づいたデプロイを作成します。**amzn-s3-demo-bucket** という名前のバケットにある **WordPress\$1App** という名前のアプリケーション、**CodeDeployDefault.OneAtATime** という名前のデプロイ設定、**WordPress\$1DepGroup** という名前のデプロイグループ、**WordPressApp.zip** という名前のリビジョンを使用します。

```
 aws deploy create-deployment \
  --application-name WordPress_App \
  --deployment-config-name CodeDeployDefault.OneAtATime \
  --deployment-group-name WordPress_DepGroup \  
  --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=WordPressApp.zip
```

「[デプロイをモニタリングおよびトラブルシューティングします。](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor)」に説明されているように、デプロイのステータスを確認できます。

CodeDeploy がサイトを再デプロイしたら、ウェブブラウザのサイトに再度アクセスして、色が変更されたことを確認します。(ブラウザを更新することが必要な場合があります。) 色が変更されていた場合は、サイトは正常に変更され、再デプロイされています。

### サイト (コンソール) の再デプロイ
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates-console"></a>

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1. アプリケーションのリストで、**WordPress\$1App** を選択します。

1. [**デプロイグループ**] タブで、[**WordPress\$1DepGroup**] を選択します。

1. **[デプロイの作成]** を選択します。

1. [**Create deployment**] ページの

   1. [**デプロイグループ**] で [**WordPress\$1DepGroup**] を選択します。

   1. [**リポジトリタイプ**] エリアで、[**My application is stored in (アプリケーションは Amazon S3 に格納されています)**] を選択し、リビジョンの Amazon S3 リンクを [**リビジョンの場所**] ボックスにコピーします。リンク値の確認 

      1. 別のブラウザタブで

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

          **[amzn-s3-demo-bucket]** を参照して開き、リビジョンとして **WordPressApp.zip** を選択します。

      1.  [**Properties**] ペインが Amazon S3 コンソールに表示されない場合、[**Properties**] ボタンを選択します。

      1.  [**Properties**] ペインで、[**Link**] フィールドの値をCodeDeploy コンソールの [**Revision location**] ボックスにコピーします。

   1. ファイルの種類を検出できないというメッセージが表示される場合は、[**.zip**] を選択します。

   1. [**Deployment description**] ボックスを空白のままにしておきます。

   1. [**Deployment group overrides (デプロイグループの上書き)**] を展開し、[**デプロイ設定**] から [**CodeDeployDefault.OneAtATime**] を選択します。

   1. **デプロイの開始** を選択します。新しく作成されたデプロイに関する情報は [**Deployments**] ページに表示されます。

   1. 「[デプロイをモニタリングおよびトラブルシューティングします。](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor)」に説明されているように、デプロイのステータスを確認できます。

      CodeDeploy がサイトを再デプロイしたら、ウェブブラウザのサイトに再度アクセスして、色が変更されたことを確認します。(ブラウザを更新することが必要な場合があります。) 色が変更されていた場合は、サイトは正常に変更され、再デプロイされています。

# ステップ 6: WordPress のアプリケーションと関連リソースのクリーンアップ
<a name="tutorials-wordpress-clean-up"></a>

これで、WordPress コードを正常に更新し、サイトを再デプロイしました。このチュートリアル用に作成したリソースの継続的な料金の発生を回避するため、以下を削除する必要があります。
+  CloudFormation スタック (または、 の外部で作成した場合は Amazon EC2 インスタンスを終了 CloudFormation)。
+ Amazon S3 バケットの場合。
+ CodeDeploy 内の `WordPress_App` アプリケーションの名前です。
+ CodeDeploy エージェントの AWS Systems Manager ステートマネージャーの関連付け。

クリーンアップを実行するには AWS CLI、、 CloudFormation、Amazon S3、Amazon EC2、CodeDeploy コンソール、または AWS APIsを使用できます。

**Topics**
+ [リソース (CLI) をクリーンアップするには](#tutorials-wordpress-clean-up-cli)
+ [リソース (コンソール) をクリーンアップするには](#tutorials-wordpress-clean-up-console)
+ [次のステップ](#tutorials-wordpress-clean-up-whats-next)

## リソース (CLI) をクリーンアップするには
<a name="tutorials-wordpress-clean-up-cli"></a>

1. このチュートリアルで CloudFormation テンプレートを使用した場合は、 という名前のスタックに対して **delete-stack** コマンドを呼び出します**CodeDeployDemoStack**。これにより、付随するすべての Amazon EC2 インスタンスが終了し、スタックによって作成された付随するすべての IAM ロールが削除されます。

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. Amazon S3 バケットを削除するには、**rm** スイッチを使用して **--recursive** という名前のバケットに対して **amzn-s3-demo-bucket** コマンドを呼び出します。これにより、バケットとバケット内のすべてのオブジェクトが削除されます。

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. `WordPress_App` アプリケーションを削除するには、**delete-application** コマンドを呼び出します。これにより、関連するすべてのデプロイグループレコードと、アプリケーションのデプロイレコードも削除されます。

   ```
   aws deploy delete-application --application-name WordPress_App
   ```

1. Systems Manager ステートマネージャーの関連付けを削除する場合、**delete-association** コマンドを呼び出します。

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   **describe-association** コマンドを呼び出して、*アソシエーション ID* を取得することができます。

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

このチュートリアルで CloudFormation スタックを使用しなかった場合は、 **terminate-instances** コマンドを呼び出して、手動で作成した Amazon EC2 インスタンスをすべて終了します。終了させる Amazon EC2 インスタンスの ID を指定します。

```
aws ec2 terminate-instances --instance-ids instanceId
```

## リソース (コンソール) をクリーンアップするには
<a name="tutorials-wordpress-clean-up-console"></a>

このチュートリアルで CloudFormation テンプレートを使用した場合は、関連する CloudFormation スタックを削除します。

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

1. **フィルター**ボックスに、前に作成した CloudFormation スタック名を入力します (例: **CodeDeployDemoStack**)。

1. スタック名の横のボックスをオンにします。[**Actions**] メニューで、[**Delete Stack**] を選択します。

   CloudFormation はスタックを削除し、付随するすべての Amazon EC2 インスタンスを終了し、付随するすべての IAM ロールを削除します。

 CloudFormation スタックの外部で作成した Amazon EC2 インスタンスを終了するには:

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

1. [**INSTANCES**] リストで、[**Instances**] を選択します。

1. 検索ボックスで、終了する Amazon EC2 インスタンス名 (例: **CodeDeployDemo**) を入力して Enter キーを押します。

1. Amazon EC2 インスタンスを選択します。

1. [**Actions**] メニューで [**Instance State**] をポイントし、[**Terminate**] を選択します。プロンプトが表示されたら、[**Yes, Terminate**] を選択します。

インスタンスごとにこれらの手順を繰り返します。

Amazon S3 バケットの削除

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

1. バケットのリストで、前に作成した Amazon S3 バケットの名前を参照して選択します (例: **amzn-s3-demo-bucket**)。

1. バケットを削除する前に、まず、そのコンテンツを削除する必要があります。**WordPressApp.zip** のようなバケット内のすべてのファイルを選択します。[**Actions**] メニューで、[**Delete**] を選択します。削除を確認するプロンプトが表示されたら、[**OK**] を選択します。

1. バケットが空になると、バケットを削除できます。バケットのリストで、バケットの行 (バケット名ではなく) を選択します。[**Delete bucket**] を選択し、確認が求められたら [**OK**] を選択します。

CodeDeploy から `WordPress_App` アプリケーションの削除

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1. アプリケーションのリストで、**WordPress\$1App** を選択します。

1. [**Application details**] ページで、[**Delete application**] を選択します。

1. プロンプトが表示されたら、アプリケーションの名前を入力して削除することを確定し、[**削除**] を選択します。

Systems Manager ステートマネージャーの関連付けの削除

1. https://console.aws.amazon.com/systems-manager で AWS Systems Manager コンソールを開きます。

1. ナビゲーションペインで、[**ステートマネージャー**] を選択してください。

1. 作成した関連付けを選択し、[**削除**] を選択します。

## 次のステップ
<a name="tutorials-wordpress-clean-up-whats-next"></a>

ここまでの作業で、CodeDeploy デプロイが正常に完了し、サイトのコードが更新され、再デプロイされました。

# チュートリアル: 「Hello, World\$1」 CodeDeploy を使用したアプリケーション (Windows Server)
<a name="tutorials-windows"></a>

このチュートリアルでは、ウェブサーバーとしてインターネットインフォメーションサービス (IIS) を実行している単一の Windows Server の Amazon EC2 インスタンスに 1 つのウェブページをデプロイします。このウェブページには、「Hello, World\$1」というシンプルなメッセージが表示されます。メッセージ

お探しのものではありませんか。
+ 代わりに Amazon Linux または Red Hat Enterprise Linux (RHEL) Amazon EC2 インスタンスへのデプロイを練習する場合、[チュートリアル: Amazon EC2 インスタンスに WordPress をデプロイする (Amazon Linux または Red Hat エンタープライズ Linux および Linux、macOS、または Unix)](tutorials-wordpress.md) を参照してください。
+ 代わりにオンプレミスインスタンスへのデプロイの演習を行う場合は、「[チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。](tutorials-on-premises-instance.md)」を参照してください。

このチュートリアルのステップは、Windows の使用を前提としています。これらのステップのほとんどは Linux、macOS、Unix を実行しているローカルマシンでも完了できますが、`c:\temp` などの Windows ベースのディレクトリパスを扱うステップでは、対応するパスを使用する必要があります。また、Amazon EC2 インスタンスに接続する場合は、Remote Desktop Protocol (RDP) 経由で、Windows Server を実行する Amazon EC2 インスタンスに接続できるクライアントアプリケーションが必要です。(Windows にはデフォルトで、RDP 接続クライアントアプリケーションが搭載されています)。

このチュートリアルを開始する前に、ユーザーの設定[CodeDeploy の開始方法](getting-started-codedeploy.md)、 のインストールまたはアップグレード、IAM インスタンスプロファイルとサービスロールの作成など AWS CLI、 の前提条件を満たす必要があります。

**Topics**
+ [ステップ 1: Windows Server の Amazon EC2 インスタンスを起動する](tutorials-windows-launch-instance.md)
+ [ステップ 2: Windows Server の Amazon EC2 instance インスタンスにデプロイするソースコンテンツを設定する](tutorials-windows-configure-content.md)
+ [ステップ 3: 「Hello, World\$1」をアップロードする Amazon S3 へのアプリケーション](tutorials-windows-upload-application.md)
+ [ステップ 4: Hello World アプリケーションをデプロイする](tutorials-windows-deploy-application.md)
+ [ステップ 5:「Hello World\$1」を更新およびデプロイする アプリケーション](tutorials-windows-update-and-redeploy-application.md)
+ [ステップ 6: 「Hello, World\$1」をクリーンアップする アプリケーションと関連リソース](tutorials-windows-clean-up.md)

# ステップ 1: Windows Server の Amazon EC2 インスタンスを起動する
<a name="tutorials-windows-launch-instance"></a>

CodeDeploy で Hello World アプリケーションをデプロイする場合、Windows Server を実行している Amazon EC2 インスタンスが必要です。

「[CodeDeploy のための Amazon EC2 インスタンスを作成します。](instances-ec2-create.md)」の手順に従います。Amazon EC2 インスタンスタグをインスタンスに割り当てる準備ができたら、必ず **Name** のタグキーと、**CodeDeployDemo** のタグ値を指定します。(別のタグキーまたはタグ値を指定した場合、「[ステップ 4: Hello World アプリケーションをデプロイする](tutorials-windows-deploy-application.md)」の手順で予期しない結果が生成される場合があります)。

Amazon EC2 インスタンスを起動後、このページに戻り、次のセクションに進みます。次のステップとして、[CodeDeploy でアプリケーションを作成する](applications-create.md) には進まないでください。

## Amazon EC2 インスタンスに接続します。
<a name="tutorials-windows-launch-instance-connect"></a>

Amazon EC2 インスタンスが起動した後、手順に従ってインスタンスに接続する演習をします。

**注記**  
これらの手順では、Windows および Windows Desktop Connection クライアントアプリケーションを実行していることを前提としています。詳細については、「[RDP を使用して Windows インスタンスに接続する](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)」を参照してください。他のオペレーティングシステムまたは他の RDP 接続クライアントアプリケーションに、これらの手順を適用する必要が生じる場合もあります。

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

1. ナビゲーションペインの **[Instances]** (インスタンス) で、**[Instances]** (インスタンス) を選択します。

1. 一覧で Windows Server インスタンスを参照して選択します。

1. **接続** を選択します。

1. [**パスワードの取得**]、[**ファイルの選択**] の順に選択します。

1. Windows Server の Amazon EC2 インスタンスと関連付けられた Amazon EC2 インスタンスキーペアファイルを参照して選択し、**[オープン]** を選択します。

1. **[Decrypt Password]** (パスワードを復号化) を選択します。表示されるパスワードをメモしておきます。これはステップ 10 で必要になります。

1. [**Download Remote Desktop File**] を選択し、ファイルを開きます。

1. リモート接続の発行元を特定できなくても接続を求められる場合は、続行します。

1. ステップ 7 でメモしておいたパスワードを入力し、次に進みます (RDP 接続クライアントアプリケーションでユーザー名が求められた場合は、**Administrator** と入力します)。

1. リモートコンピュータの ID を確認できなくても接続を求められた場合は、続行します。

1. 接続後、Windows Server を実行している Amazon EC2 インスタンスのデスクトップが表示されます。

1. これで、Amazon EC2 インスタンスから切断することができます。
**警告**  
インスタンスを停止または削除しないでください。それ以外の場合は、CodeDeploy を デプロイすることはできません。

## Windows Server の Amazon EC2 インスタンスへの HTTP トラフィックを許可するインバウンドルールを追加する
<a name="tutorials-windows-launch-instance-add-inbound-rule"></a>

次のステップでは、Windows Server の Amazon EC2 インスタンスにデプロイされたホームページがブラウザに表示されるように、Amazon EC2 インスタンスに開いている HTTP ポートがあることを確認します。

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

1. **インスタンス** を選択後、ご自分のインスタンスを選択します。

1. **セキュリティグループ** 内の **説明** タブで、**インバウンドのルールの表示** を選択します。

   セキュリティグループのルールの一覧は、次のように表示されます。

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  **セキュリティグループ** では、Amazon EC2 インスタンスのセキュリティグループを選択します。**launch-wizard-*N*** と名前が付けられる可能性があります。***N*** は、インスタンスの作成時にセキュリティグループに割り当てられた名前です。

    **[Inbound]** (インバウンド) タブを選択します。次の値を持つルールが表示された場合、ご利用のインスタンスのセキュリティグループは正しく設定されています。
   + [**Type**]: HTTP
   + [**Protocol**]: TCP
   + **[Port Range**]: 80
   + **ソース**: 0.0.0.0/0

1.  これらの値を持つルールが表示されない場合は、[セキュリティグループへのルールの追加](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule) の手順を使用して、新しいセキュリティルールに追加します。

# ステップ 2: Windows Server の Amazon EC2 instance インスタンスにデプロイするソースコンテンツを設定する
<a name="tutorials-windows-configure-content"></a>

ここでは、アプリケーションのソースコンテンツを設定して、Amazon EC2 インスタンスにデプロイできるものを準備します。このチュートリアルでは、 Windows Server を実行する Amazon EC2 インスタンスに 1 つのウェブページをデプロイします。これはウェブサーバーとして Internet Information Services (IIS) を実行します。このウェブページには、「Hello, World\$1」というシンプルなメッセージが表示されます。メッセージ

**Topics**
+ [ウェブページの作成](#tutorials-windows-configure-content-download-code)
+ [アプリケーションを実行するスクリプトの作成](#tutorials-windows-configure-content-create-scripts)
+ [アプリケーション仕様ファイルの追加](#tutorials-windows-configure-content-add-appspec-file)

## ウェブページの作成
<a name="tutorials-windows-configure-content-download-code"></a>

1. `HelloWorldApp` フォルダで `c:\temp` というサブディレクトリ (サブフォルダ) を作成し、そのフォルダに切り替えます。

   ```
   mkdir c:\temp\HelloWorldApp
   cd c:\temp\HelloWorldApp
   ```
**注記**  
`c:\temp` という場所、または `HelloWorldApp` というサブフォルダ名を必ず使用する必要はありません。別の場所またはサブフォルダ名を使用する場合は、必ずこのチュートリアル全体で使用してください。

1. テキストエディタを使用して、フォルダ内にファイルを作成します。ファイルを `index.html` と名付けます。

   ```
   notepad index.html
   ```

1. 次の HTML コードをファイルに追加し、ファイルを保存します。

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #0188cc;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello, World!</h1></div>
     <div align="center"><h2>You have successfully deployed an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## アプリケーションを実行するスクリプトの作成
<a name="tutorials-windows-configure-content-create-scripts"></a>

次に、ターゲットの Amazon EC2 インスタンスでウェブサーバーをセットアップするために CodeDeploy が使用するスクリプトを作成します。

1. `index.html` ファイルが保存されているのと同じサブフォルダで、テキストエディタを使用して別のファイルを作成します。ファイルを `before-install.bat` と名付けます。

   ```
   notepad before-install.bat
   ```

1. 次のバッチスクリプトコードをファイルに追加し、ファイルを保存します。

   ```
   REM Install Internet Information Server (IIS).
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server
   ```

## アプリケーション仕様ファイルの追加
<a name="tutorials-windows-configure-content-add-appspec-file"></a>

次に、ウェブページとバッチスクリプトファイルに加えて、 アプリケーション指定のファイル (AppSpec ファイル) を追加します。AppSpec ファイルは、CodeDeploy によって次の方式で使用される [YAML](http://www.yaml.org) ファイルです。
+ アプリケーションリビジョンのソースファイルを、インスタンスの宛先にマッピングします。
+ デプロイ中にインスタンスで実行するスクリプトを指定します。

AppSpec のファイル名は、`appspec.yml` とする必要があります。アプリケーションソースコードのルートフォルダに配置する必要があります。

1. `index.html` および `before-install.bat` ファイルが保存されているのと同じサブフォルダで、テキストエディタを使用して別のファイルを作成します。ファイルを `appspec.yml` と名付けます。

   ```
   notepad appspec.yml
   ```

1. 次の YAML コードをファイルに追加し、ファイルを保存します。

   ```
   version: 0.0
   os: windows
   files:
     - source: \index.html
       destination: c:\inetpub\wwwroot
   hooks:
     BeforeInstall:
       - location: \before-install.bat
         timeout: 900
   ```

CodeDeploy は、この AppSpec ファイルを使用してアプリケーションソースコードのルートフォルダにある `index.html` ファイルを、ターゲット Amazon EC2 インスタンスの `c:\inetpub\wwwroot` フォルダにコピーします。デプロイ中に、CodeDeploy は `before-install.bat` デプロイライフサイクルイベントの間にターゲット Amazon EC2 インスタンスで **BeforeInstall** バッチスクリプトを実行します。このスクリプトの実行に 900 秒 (15 分) 以上かかる場合、CodeDeploy はデプロイを停止し、Amazon EC2 インスタンスへのデプロイを失敗とマークします。

これらの設定の詳細については、「[CodeDeploy AppSpec ファイルのリファレンス](reference-appspec-file.md)」を参照してください。

**重要**  
このファイルの項目間のスペースの場所と数は重要です。間隔が正しくない場合、 CodeDeploy はデバッグが困難な可能性のあるエラーを発生させます。詳細については、「[AppSpec ファイルの間隔](reference-appspec-file.md#reference-appspec-file-spacing)」を参照してください。

# ステップ 3: 「Hello, World\$1」をアップロードする Amazon S3 へのアプリケーション
<a name="tutorials-windows-upload-application"></a>

ここでソースコンテンツを CodeDeploy がデプロイできる場所に準備してアップロードします。次の手順では、Amazon S3 バケットをプロビジョニングしてバケット用のアプリケーションリビジョンのファイルを準備し、リビジョンのファイルをバンドルしてから、そのリビジョンをバケットにプッシュする方法を示します。

**注記**  
このチュートリアルでは説明されていませんが、CodeDeploy を使用して GitHub リポジトリからインスタンスにアプリケーションをデプロイできます。詳細については、「[GitHub と CodeDeploy との統合](integrations-partners-github.md)」を参照してください。

**Topics**
+ [Amazon S3 バケットをプロビジョニングします](#tutorials-windows-upload-application-create-s3-bucket)
+ [バケットのアプリケーションファイルを準備する](#tutorials-windows-upload-application-prepare-application-files)
+ [アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする](#tutorials-windows-upload-application-bundle-and-push-archive)

## Amazon S3 バケットをプロビジョニングします
<a name="tutorials-windows-upload-application-create-s3-bucket"></a>

ストレージコンテナあるいは Amazon S3 *バケット* を作成、または既存のバケットを使用します。バケットにリビジョンをアップロードできること、およびデプロイで使用する Amazon EC2 インスタンスがバケットからリビジョンをダウンロードできることを確認します。

 AWS CLI、Amazon S3 コンソール、または Amazon S3 APIs を使用してAmazon S3バケットを作成できます。バケットを作成したら、バケットとその CodeDeploy ユーザーにアクセス許可を付与します。

**注記**  
バケット名は、すべての AWS アカウントで Amazon S3 全体で一意である必要があります。**amzn-s3-demo-bucket** を使用できない場合、**amzn-s3-demo-bucket** の後にダッシュと自分の名前のイニシャル、または他の一意な識別子など別のバケット名を試してください。このチュートリアル全体で、バケット名を **amzn-s3-demo-bucket** に置き換えます。  
Amazon S3 バケットは、ターゲット Amazon EC2 インスタンスが起動されるのと同じ AWS リージョンに作成する必要があります。例えば、バケットを米国東部 (バージニア北部) リージョンで作成する場合、対象の Amazon EC2 インスタンスを米国東部 (バージニア北部) リージョンで起動する必要があります。

**Topics**
+ [Amazon S3 バケット (CLI) の作成](#tutorials-windows-upload-application-create-s3-bucket-cli)
+ [Amazon S3 バケット (コンソール) の作成](#tutorials-windows-upload-application-create-s3-bucket-console)
+ [Amazon S3 バケットと AWS アカウントにアクセス許可を付与する](#tutorials-windows-upload-application-create-s3-bucket-grant-permission)

### Amazon S3 バケット (CLI) の作成
<a name="tutorials-windows-upload-application-create-s3-bucket-cli"></a>

**mb** コマンドを呼び出して、**amzn-s3-demo-bucket** という名前の Amazon S3 バケットを作成します。

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### Amazon S3 バケット (コンソール) の作成
<a name="tutorials-windows-upload-application-create-s3-bucket-console"></a>

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

1. Amazon S3 コンソールで [**バケットの作成**] を選択します。

1. [**Bucket name**] ボックスで、バケットの名前を入力します。

1. [**Region**] リストで、ターゲットリージョンを選択し、[**Create**] を選択します。

### Amazon S3 バケットと AWS アカウントにアクセス許可を付与する
<a name="tutorials-windows-upload-application-create-s3-bucket-grant-permission"></a>

Amazon S3 バケットへのアップロードには、許可が必要です。Amazon S3 バケットポリシーで、これらのアクセス許可を指定できます。たとえば、次の Amazon S3 バケットポリシーでは、ワイルドカード文字 (\$1) を使用すると、 AWS アカウント`111122223333`は という名前の Amazon S3 バケット内の任意のディレクトリにファイルをアップロードできます`amzn-s3-demo-bucket`。

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

 AWS アカウント ID を表示するには、[AWS 「アカウント ID の検索](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)」を参照してください。

今は、Amazon S3 バケットが参加している各 Amazon EC2 インスタンスからのダウンロードリクエストを許可していることを確認するのに適した時期です。Amazon S3 バケットポリシーで、これを指定できます。例えば、次の Amazon S3 バケットポリシーでは、ワイルドカード文字 (\$1) を使用すると、ARN `arn:aws:iam::444455556666:role/CodeDeployDemo` を含む IAM インスタンスプロファイルがアタッチされた Amazon EC2 インスタンスが、`amzn-s3-demo-bucket` という名前の Amazon S3 バケットの任意のディレクトリからファイルをダウンロードすることを許可します。

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

Amazon S3 バケットポリシーを生成しアタッチする方法の詳細については、「[バケットポリシーの例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)」を参照してください。

[ステップ 1: セットアップ](getting-started-setting-up.md) で作成した CodeDeploy 管理ユーザーに Amazon S3 バケットにリビジョンをアップロードするアクセス許可が必要です。これを指定する 1 つの方法は、IAM ポリシーを使用してユーザーのアクセス権限セットに追加するか、IAM ロール (ユーザーに引き受けを許可する) に追加することです。次の IAM ポリシーでは、ユーザーが `amzn-s3-demo-bucket` という名前の Amazon S3 バケット内の任意の場所でリビジョンをアップロードできるようにします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	   
  "Statement":[
    {
      "Effect":"Allow",
      "Action":["s3:PutObject"],
      "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

------

IAM ポリシーの作成方法については、「IAM ユーザーガイド**」の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。アクセス権限セットにポリシーを追加する方法については、「AWS IAM アイデンティティセンター ユーザーガイド**」の「[アクセス権限セットを作成します。](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html)」を参照してください。

## バケットのアプリケーションファイルを準備する
<a name="tutorials-windows-upload-application-prepare-application-files"></a>

ウェブページ、AppSpec ファイル、およびスクリプトが開発マシン上で次のように整理されていることを確認します。

```
c:\
  |-- temp\
        |--HelloWorldApp\
             |-- appspec.yml
             |-- before-install.bat
             |-- index.html
```

## アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする
<a name="tutorials-windows-upload-application-bundle-and-push-archive"></a>

ファイルをアーカイブファイル (アプリケーション*リビジョン*とも呼ばれる) にバンドルします。

**注記**  
バケットにオブジェクトを保存したり、バケットの内外にアプリケーションのリビジョンを転送したりする場合に課金されることがあります。詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

1. 開発マシンで、ファイルが保存されたフォルダに切り替えます。

   ```
   cd c:\temp\HelloWorldApp
   ```
**注記**  
このフォルダに切替わらなければ、ファイルのバンドルは現在のフォルダで起動されます。例えば、現在のフォルダが `c:\temp` ではなく `c:\temp\HelloWorldApp` である場合、バンドルは、`c:\temp` サブフォルダ以上を含む可能性のある `HelloWorldApp` フォルダ内のファイルとサブフォルダから開始します。

1. **create-application** コマンドを呼び出して、**HelloWorld\$1App** という名前の新しいアプリケーションを CodeDeploy に登録します。

   ```
   aws deploy create-application --application-name HelloWorld_App
   ```

1. CodeDeploy び [push](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) コマンドを呼び出してファイルをまとめてバンドルし、Amazon S3 にリビジョンをアップロードし、アップロードされたリビジョンに関する情報を 1 つの操作で CodeDeploy に登録します。

   ```
   aws deploy push --application-name HelloWorld_App --s3-location s3://amzn-s3-demo-bucket/HelloWorld_App.zip --ignore-hidden-files
   ```

   このコマンドは、現在のディレクトリ (隠しファイルを除く) から、`HelloWorld_App.zip` という名前の 1 つのアーカイブファイルにファイルをバンドルし、リビジョンを **amzn-s3-demo-bucket** バケットにアップロードし、CodeDeploy でアップロードしたリビジョンについての情報を登録します。

# ステップ 4: Hello World アプリケーションをデプロイする
<a name="tutorials-windows-deploy-application"></a>

ここで、Amazon S3 にアップロードした Hello World サンプルアプリケーションのリビジョンをデプロイします。 AWS CLI または CodeDeploy ンソールを使用して、リビジョンをデプロイし、デプロイのの進行状況をモニタリングします。アプリケーションリビジョンが正常にデプロイされた後に、その結果を確認します。

**Topics**
+ [CodeDeploy を使用して、アプリケーションリビジョンをデプロイします。](#tutorials-windows-deploy-application-create-deployment)
+ [デプロイをモニタリングおよびトラブルシューティングします。](#tutorials-windows-deploy-application-monitor)
+ [デプロイの確認](#tutorials-windows-deploy-application-verify)

## CodeDeploy を使用して、アプリケーションリビジョンをデプロイします。
<a name="tutorials-windows-deploy-application-create-deployment"></a>

 アプリケーションをデプロイするには、CLI またはコンソールを使用できます。

**Topics**
+ [アプリケーションリビジョン (CLI) をデプロイするには](#tutorials-windows-deploy-application-create-deployment-cli)
+ [アプリケーションリビジョン (コンソール) のデプロイ](#tutorials-windows-deploy-application-create-deployment-console)

### アプリケーションリビジョン (CLI) をデプロイするには
<a name="tutorials-windows-deploy-application-create-deployment-cli"></a>

1. まず、デプロイにはデプロイグループが必要です。ただし、デプロイグループを作成する前に、サービスロール ARN が必要です。サービスロールは、ユーザーに代わってサービスアクセス権限を付与する IAM ロールです。この場合、サービスロールは、Amazon EC2 インスタンスにアクセスして Amazon EC2 インスタンスタグを拡張 (読み込み) するためのアクセス権限を CodeDeploy に付与します。

   すでに [サービスロールの作成 (CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli) の手順に従ってサービスロールを作成している必要があります。サービスロールの ARN を取得するには、「[サービスロール ARN の取得 (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli)」を参照してください。

1. ARN を取得したら、**create-deployment-group** コマンドを呼び出して、**HelloWorld\$1DepGroup** という名前のアプリケーションと関連付けられる **HelloWorld\$1App** という名前のデプロイグループを作成し、**CodeDeployDemo** という名前の Amazon EC2 インスタンスタグと、サービスロールARNと関連付けられる **CodeDeployDefault.OneAtATime** という名前のデプロイ設定を使用します。

   ```
   aws deploy create-deployment-group --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --deployment-config-name CodeDeployDefault.OneAtATime --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE --service-role-arn serviceRoleARN
   ```
**注記**  
-[デプロイメントグループの作成](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) コマンドは、デプロイおよびインスタンス内の指定されたイベントについて、トピックサブスクライバーに Amazon SNS 通知を送信するトリガーの作成に対応しています。このコマンドは、Amazon CloudWatch アラームのモニタリングしきい値が満たされたときにデプロイを自動的にロールバックし、デプロイを停止するアラームを設定するオプションもサポートします。このチュートリアルでは、これらのアクションに関するコマンドは含まれていません。

1. デプロイを作成する前に、デプロイグループのインスタンスに CodeDeploy エージェントがインストールされている必要があります。 AWS Systems Manager で次のコマンドを使用して、コマンドラインからエージェントをインストールできます。

   ```
   aws ssm create-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo --parameters action=Install,name=AWSCodeDeployAgent --schedule-expression "cron(0 2 ? * SUN *)" 
   ```

   このコマンドは、CodeDeploy エージェントをインストールし、毎週日曜日の午前 2:00 に更新を試行する関連付けを Systems Manager ステートマネージャーに作成します。CodeDeploy エージェントの詳細については、「[CodeDeploy エージェントの使用](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)」を参照してください。Systems Manager のさらなる詳細については、「[AWS Systems Managerとは](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」 を参照してください。

1. 次に、**create-deployment** コマンドを呼び出して、**amzn-s3-demo-bucket** という名前のバケットで **HelloWorld\$1App.zip** という名前のアプリケーションバージョンを使用して、**HelloWorld\$1App** という名前のアプリケーション、**CodeDeployDefault.OneAtATime** という名前のデプロイ設定と **HelloWorld\$1DepGroup** という名前のデプロイグループに関連付けられるデプロイを作成します。

   ```
   aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
   ```

### アプリケーションリビジョン (コンソール) のデプロイ
<a name="tutorials-windows-deploy-application-create-deployment-console"></a>

1. CodeDeploy コンソールを使用してアプリケーションリビジョンをデプロイする前に、サービスロール ARN が必要になります。サービスロールは、ユーザーに代わってサービスアクセス権限を付与する IAM ロールです。この場合、サービスロールは、Amazon EC2 インスタンスにアクセスして Amazon EC2 インスタンスタグを拡張 (読み込み) するためのアクセス権限を CodeDeploy に付与します。

   すでに [サービスロールの作成 (コンソール)](getting-started-create-service-role.md#getting-started-create-service-role-console) の手順に従ってサービスロールを作成している必要があります。サービスロールの ARN を取得するには、「[サービスロール ARN の取得 (コンソール)](getting-started-create-service-role.md#getting-started-get-service-role-console)」を参照してください。

1. ARN があるため、CodeDeploy コンソールを使用して、アプリケーションリビジョンをデプロイできます。

   にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1. [**HelloWorld\$1App**] を選択します。

1. [**デプロイグループ**] タブで、[**デプロイグループの作成**] を選択します。

1. **[Deployment group name]** (デプロイグループ名) に「**HelloWorld\$1DepGroup**」と入力します。

1. [**サービスロール**] で、サービスロールの名前を選択します。

1. [**デプロイタイプ**] で、[**インプレース**] を選択します。

1. [**環境設定**] で、[**Amazon EC2 インスタンス**] を選択します。

1. **を使用した エージェント設定 AWS Systems Manager**では、デフォルトのままにします。

1. **[Key]** (キー) に、「**Name**」と入力します。

1. **[値]** には「**CodeDeployDemo**」と入力します。

1. [**デプロイ設定**] で [**CodeDeployDefault.OneAtATime**] を選択します。

1. [**ロードバランサー**] で、[**Enable load balancing (ロードバランシングの有効化)**] をオフにします。

1. **デプロイグループの作成** を選択します。

1. **[デプロイの作成]** を選択します。

1. [**Deployment group**] で、[**HelloWorld\$1DepGroup**] を選択します。

1. [**リビジョンタイプ**] では [**アプリケーションは Amazon S3 に格納されています**] を選択し、[**リビジョンの場所**] では以前に Amazon S3 にアップロードしたサンプルの Hello World アプリケーションリビジョンの場所を入力します。場所の取得

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

   1. バケットのリストで、**[amzn-s3-demo-bucket]** (または、アプリケーションリビジョンをアップロードしたバケットの名前) を選択します。

   1. オブジェクトのリストで、**HelloWorld\$1App.zip** を選択します。

   1. [**概要**] タブで、[**パスのコピー**] を選択します。

   1. CodeDeploy コンソールに戻り、**[リビジョンの場所]** に **[リンク]** フィールドの値を貼り付けます。

1. [**リビジョンファイルの種類**] で、[**.zip**] を選択します。

1. (オプション) [**デプロイの説明**] にコメントを入力します。

1. **[デプロイの作成]** を選択します。新しく作成されたデプロイに関する情報は [**Deployments**] ページに表示されます。

## デプロイをモニタリングおよびトラブルシューティングします。
<a name="tutorials-windows-deploy-application-monitor"></a>

 AWS CLI または コンソールを使用して、デプロイをモニタリングおよびトラブルシューティングします。

**Topics**
+ [デプロイ (CLI) をモニタリングおよびトラブルシューティングするには](#tutorials-windows-deploy-application-monitor-cli)
+ [デプロイ (コンソール) をモニタリングおよびトラブルシューティングするには](#tutorials-windows-deploy-application-monitor-console)

### デプロイ (CLI) をモニタリングおよびトラブルシューティングするには
<a name="tutorials-windows-deploy-application-monitor-cli"></a>

1. **HelloWorld\$1App** という名前のアプリケーションと **HelloWorld\$1DepGroup** という名前のデプロイグループに対して **list-deployments** コマンドを呼び出して、デプロイの ID を取得します。

   ```
   aws deploy list-deployments --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --query "deployments" --output text
   ```

1. デプロイ ID を使用して **get-deployment** コマンドを呼び出します。

   ```
   aws deploy get-deployment --deployment-id deploymentID --query "deploymentInfo.status" --output text
   ```

1. コマンドはデプロイの全体ステータスを返します。成功すると、値は `Succeeded` になります。

   全体的なステータスが `Failed` の場合、[list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) や [デプロイメントインスタンスの取得](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) などのコマンドを呼び出してトラブルシューティングを行います。トラブルシューティングの他のオプションについては、「[ログファイルの分析によるインスタンスでのデプロイの失敗の調査](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)」を参照してください。

### デプロイ (コンソール) をモニタリングおよびトラブルシューティングするには
<a name="tutorials-windows-deploy-application-monitor-console"></a>

CodeDeploy コンソール の [**Deployments**] ページで、[**Status**] 列でデプロイのステータスをモニタリングできます。

特に [**Status**] 列の値が [**Succeeded**] 以外の値である場合にデプロイに関する詳細情報を取得するには。

1. [**デプロイ**] テーブルで、デプロイ ID を選択します。デプロイが失敗したら、失敗の原因を説明するメッセージがデプロイの詳細ページに表示されます。

1. インスタンスのデプロイに関する詳細情報が表示されます。デプロイ失敗後、デプロイが失敗した Amazon EC2 インスタンスおよびステップを特定できる場合があります。

1. より多くのトラブルシューティングを行う場合、[CodeDeploy を用いてインスタンスの詳細の表示](instances-view-details.md) のような手法を使用できます。また、Amazon EC2 インスタンスでデプロイログファイルを分析できます。詳細については、「[ログファイルの分析によるインスタンスでのデプロイの失敗の調査](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)」を参照してください。

## デプロイの確認
<a name="tutorials-windows-deploy-application-verify"></a>

デプロイが成功したら、インストールが動作していることを確認します。Amazon EC2 インスタンスのパブリック DNS アドレスを使用して、ウェブブラウザのウェブページを表示します。(Amazon EC2 コンソールでパブリック DNS 値を取得するには、 Amazon EC2 インスタンスを選択して **[説明]** タブで **[パブリック DNS]** で値を探します。)

例えば、Amazon EC2 インスタンスのパブリック DNS アドレスが **ec2-01-234-567-890.compute-1.amazonaws.com** である場合、次の URL を使用します。

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

成功すると、Hello World ウェブページが表示されます。

# ステップ 5:「Hello World\$1」を更新およびデプロイする アプリケーション
<a name="tutorials-windows-update-and-redeploy-application"></a>

アプリケーションリビジョンを正常にデプロイしたので、開発マシンでウェブページのコードを更新し、CodeDeploy を使用してサイトを再デプロイします。デプロイ後、Amazon EC2 インスタンスで変更を確認できます。

**Topics**
+ [ウェブページの変更](#tutorials-windows-update-and-redeploy-application-modify-code)
+ [サイトの再デプロイ](#tutorials-windows-update-and-redeploy-application-deploy-updates)

## ウェブページの変更
<a name="tutorials-windows-update-and-redeploy-application-modify-code"></a>

1. `c:\temp\HelloWorldApp` サブフォルダに移動して、テキストエディタを使用して `index.html` ファイルを変更します。

   ```
   cd c:\temp\HelloWorldApp
   notepad index.html
   ```

1. `index.html` ファイルのコンテンツを改訂するために、ウェブページの背景色と一部のテキストを変更し、ファイルを保存します。

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello Again, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #66cc00;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello Again, World!</h1></div>
     <div align="center"><h2>You have successfully deployed a revision of an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## サイトの再デプロイ
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates"></a>

コードを変更したので、Amazon S3 と CodeDeploy を使用して、ウェブページを再デプロイします。

「[アプリケーションのファイルを 1 つのアーカイブファイルにバンドルし、アーカイブファイルをプッシュする](tutorials-windows-upload-application.md#tutorials-windows-upload-application-bundle-and-push-archive)」の説明に従って、変更内容をバンドルして Amazon S3 にアップロードします。(これらの手順に従うときに、新しいアプリケーションを作成する必要はありません。) このリビジョンに以前と同じキーを指定します (**HelloWorld\$1App.zip**)。それを先に作成した同じ Amazon S3 バケットにアップロードします (例: **amzn-s3-demo-bucket**)。

 AWS CLI または CodeDeploy コンソールを使用してサイトを再デプロイします。

**Topics**
+ [サイト (CLI) に再デプロイするには](#tutorials-windows-update-and-redeploy-application-deploy-updates-cli)
+ [サイト (コンソール) の再デプロイ](#tutorials-windows-update-and-redeploy-application-deploy-updates-console)

### サイト (CLI) に再デプロイするには
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-cli"></a>

**create-deployment** コマンドを呼び出して、**amzn-s3-demo-bucket** という名前のバケットにある、**HelloWorld\$1App** という名前のアプリケーション、**CodeDeployDefault.OneAtATime** という名前のデプロイ設定、**HelloWorld\$1DepGroup** という名前のデプロイグループ、および **HelloWorld\$1App.zip** という名前のリビジョンをそれぞれ再度使用して、アップロードしたリビジョンに基づくデプロイを作成します。

```
 aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
```

「[デプロイをモニタリングおよびトラブルシューティングします。](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)」に説明されているように、新しいデプロイのステータスを確認できます。

CodeDeploy でサイトを再デプロイしたら、ウェブブラウザでサイトに再度アクセスし、ウェブページの背景色とテキストが変更されていることを確認します。(ブラウザを更新することが必要な場合があります。) 背景色とテキストが変更されていれば、これで完了です。サイトは変更され、再デプロイされています。

### サイト (コンソール) の再デプロイ
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-console"></a>

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで、[**アプリケーション**] を選択します。

1. [**アプリケーション**] リストで、[**HelloWorld\$1App**] を選択します。

1. [**デプロイ**] タブで、[**デプロイの作成**] を選択します。

   1. [**Deployment group**] リストで、[**HelloWorld\$1DepGroup**] を選択します。

   1.  **[リビジョンの場所]** に、リビジョンの Amazon S3 リンクを入力します。

      リンク値の確認

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

         **amzn-s3-demo-bucket** を参照して開いた後、Amazon S3 コンソールでリビジョン、**HelloWorld\$1App.zip** を選択します。

      1. [**Properties**] ペインが Amazon S3 コンソールに表示されない場合、[**Properties**] ボタンを選択します。

      1. [**プロパティ**] ペインで、[**リンク**] フィールドの値をコピーします 

      1. CodeDeploy コンソールに戻り、**[リビジョンの場所]** にリンクを貼り付けます。

   1. [**リビジョンファイルの種類**] で、ファイルの種類を検出できないというメッセージが表示された場合は、[**.zip**] を選択します。

   1. [**デプロイメントの説明**] は空白のままにしておきます。

   1. [**Deployment group overrides (デプロイグループのオーバーライド)**] を展開し、[**デプロイ設定**] リストで、[**CodeDeployDefault.OneAtATime**]、[**デプロイの作成**] の順に選択します。

      「[デプロイをモニタリングおよびトラブルシューティングします。](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)」に説明されているように、デプロイのステータスを確認できます。

      CodeDeploy でサイトを再デプロイしたら、ウェブブラウザでサイトに再度アクセスし、ウェブページの背景色とテキストが変更されていることを確認します。(ブラウザを更新することが必要な場合があります。) 背景色とテキストが変更されていれば、これで完了です。サイトは変更され、再デプロイされています。

# ステップ 6: 「Hello, World\$1」をクリーンアップする アプリケーションと関連リソース
<a name="tutorials-windows-clean-up"></a>

これで「Hello, World\$1」コードを正常に更新しました。コードを記述し、サイトを再デプロイします。このチュートリアルを完了するために作成したリソースの継続的な料金の発生を回避するため、以下を削除する必要があります。
+  CloudFormation スタック (または、 の外部で作成した Amazon EC2 インスタンス) CloudFormation。
+ Amazon S3 バケットの場合。
+ CodeDeploy 内の `HelloWorld_App` アプリケーションの名前です。
+ CodeDeploy エージェントの AWS Systems Manager ステートマネージャーの関連付け。

クリーンアップを実行するには AWS CLI、、 CloudFormation、Amazon S3、Amazon EC2、CodeDeploy コンソール、または AWS APIsを使用できます。

**Topics**
+ [クリーンアップリソース (CLI) の使用](#tutorials-windows-clean-up-cli)
+ [リソース (コンソール) をクリーンアップするには](#tutorials-windows-clean-up-console)
+ [次のステップ](#tutorials-windows-clean-up-whats-next)

## クリーンアップリソース (CLI) の使用
<a name="tutorials-windows-clean-up-cli"></a>

1. このチュートリアルで CloudFormation スタックを使用した場合は、 という名前のスタックに対して **delete-stack** コマンドを呼び出してスタックを削除します**CodeDeployDemoStack**。これにより、すべての付随する Amazon EC2 インスタンスが削除され、スタックによって最初に作成されたすべての付随する IAM ロールが削除されます。

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. Amazon S3 バケットを削除するには、**rm** スイッチを使用して **--recursive** という名前のバケットに対して **amzn-s3-demo-bucket** コマンドを呼び出します。これにより、バケットとバケット内のすべてのオブジェクトが削除されます。

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. CodeDeploy から `HelloWorld_App` アプリケーションを削除する場合、**delete-application** コマンドを呼び出します。これにより、すべての関連するデプロイグループレコードと、アプリケーションのデプロイレコードが削除されます。

   ```
   aws deploy delete-application --application-name HelloWorld_App
   ```

1. Systems Manager ステートマネージャーの関連付けを削除する場合、**delete-association** コマンドを呼び出します。

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   **describe-association** コマンドを呼び出して、*アソシエーション ID* を取得することができます。

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

1. このチュートリアルで CloudFormation スタックを使用しなかった場合は、 **terminate-instances** コマンドを呼び出して、手動で作成した Amazon EC2 インスタンスを終了します。終了する Amazon EC2 インスタンスの ID を指定します。

   ```
   aws ec2 terminate-instances --instance-ids instanceId
   ```

## リソース (コンソール) をクリーンアップするには
<a name="tutorials-windows-clean-up-console"></a>

このチュートリアルで CloudFormation テンプレートを使用した場合は、関連する CloudFormation スタックを削除します。

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

1. 検索ボックスに、 CloudFormation スタック名 ( など**CodeDeployDemoStack**) を入力します。

1. スタック名の横のチェックボックスをオンにします。

1. [**Actions**] メニューで、[**Delete Stack**] を選択します。これにより、スタックが削除され、すべての付随する Amazon EC2 インスタンスとすべての付随する IAM ロールも削除されます。

 CloudFormation スタックの外部で作成した Amazon EC2 インスタンスを終了するには:

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

1. [**Instances**] エリアで、[**Instances**] を選択します。

1. 検索ボックスで、削除する Amazon EC2 インスタンスの名前を入力し、**[Enter]** キーを押します。

1. Amazon EC2 インスタンスを選択します。

1. [**Actions**] を選択して [**Instance State**] をポイントし、[**Terminate**] を選択します。プロンプトが表示されたら、[**Yes, Terminate**] を選択します。追加の Amazon EC2 インスタンスに対して、これらのステップを繰り返します。

Amazon S3 バケットの削除

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

1. バケットのリストで、Amazon S3 バケットの名前 (**amzn-s3-demo-bucket** など) を参照して選択します。

1. バケットを削除する前に、まず、そのコンテンツを削除する必要があります。**HelloWorld\$1App.zip** のようなバケット内のすべてのファイルを選択します。[**Actions**] メニューで、[**Delete**] を選択します。削除を確認するプロンプトが表示されたら、[**OK**] を選択します。

1. バケットが空になると、バケットを削除できます。バケットのリストで、バケットの行 (バケット名ではなく) を選択します。[**Delete bucket**] を選択し、確認が求められたら [**OK**] を選択します。

CodeDeploy から `HelloWorld_App` アプリケーションの削除

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

   

1. **`HelloWorld_App`** を選択します。

1. [**アプリケーションを削除**] を選択します。

1. 確認を求めるメッセージが表示されたら、**Delete**と入力し、[**削除**] を選択してください。

Systems Manager ステートマネージャーの関連付けの削除。

1. https://console.aws.amazon.com/systems-manager で AWS Systems Manager コンソールを開きます。

1. ナビゲーションペインで、[**ステートマネージャー**] を選択してください。

1. 作成した関連付けを選択し、[**削除**] を選択します。

## 次のステップ
<a name="tutorials-windows-clean-up-whats-next"></a>

ここまでの作業で、CodeDeploy を使って正常にデプロイを完了しました。お疲れ様でした。

# チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。
<a name="tutorials-on-premises-instance"></a>

このチュートリアルでは、Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux (RHEL) を実行する単一のオンプレミスインスタンス (つまりは、Amazon EC2 インスタンスではない物理デバイス) へのサンプルアプリケーションリビジョンのデプロイをガイドすることで、CodeDeploy の経験を得ることができます。オンプレミスインスタンスについての情報、および CodeDeploy の使用方法については、[CodeDeploy 用のオンプレミスインスタンスを用いての作業](instances-on-premises.md) を参照してください。

お探しのものではありませんか。
+ Amazon Linux または RHEL を実行する Amazon EC2 インスタンスへのデプロイの演習を行うには、[チュートリアル: Amazon EC2 インスタンスに WordPress をデプロイする (Amazon Linux または Red Hat エンタープライズ Linux および Linux、macOS、または Unix)](tutorials-wordpress.md) を参照してください。
+ Windows サーバーを実行する Amazon EC2 インスタンスへのデプロイの演習を行うには、[チュートリアル: 「Hello, World\$1」 CodeDeploy を使用したアプリケーション (Windows Server)](tutorials-windows.md) を参照してください。

**Topics**
+ [前提条件](tutorials-on-premises-instance-prerequisites.md)
+ [ステップ 1: オンプレミスインスタンスを設定する](tutorials-on-premises-instance-1-configure-instance.md)
+ [ステップ 2: サンプルのアプリケーションリビジョンを作成する](tutorials-on-premises-instance-2-create-sample-revision.md)
+ [ステップ 3: アプリケーションリビジョンをバンドルし、Amazon S3 にアップロードする](tutorials-on-premises-instance-3-bundle-sample-revision.md)
+ [ステップ 4: アプリケーションリビジョンをデプロイする](tutorials-on-premises-instance-4-deploy-sample-revision.md)
+ [ステップ 5: デプロイを確認する](tutorials-on-premises-instance-5-verify-deployment.md)
+ [ステップ 6: リソースをクリーンアップする](tutorials-on-premises-instance-6-clean-up-resources.md)

# 前提条件
<a name="tutorials-on-premises-instance-prerequisites"></a>

このチュートリアルを開始する前に、ユーザーの設定[CodeDeploy の開始方法](getting-started-codedeploy.md)、 のインストールまたはアップグレード、サービスロールの作成など AWS CLI、 の前提条件を満たす必要があります。前提条件で説明したように、IAM インスタンスプロファイルを作成する必要はありません。オンプレミスインスタンスは、IAM インスタンスプロファイルを使用しません。

オンプレミスインスタンスとして設定する物理デバイスでは、「[CodeDeploy エージェントで対応するオペレーティングシステム](codedeploy-agent.md#codedeploy-agent-supported-operating-systems)」に示したいずれかのオペレーティングシステムを実行している必要があります。

# ステップ 1: オンプレミスインスタンスを設定する
<a name="tutorials-on-premises-instance-1-configure-instance"></a>

オンプレミスインスタンスにデプロイする前に、設定を行う必要があります。「[CodeDeploy 用のオンプレミスインスタンスを用いての作業](instances-on-premises.md)」の指示に従ってから、このページに戻ります。

## CodeDeploy エージェントをインストールします。
<a name="tutorials-on-premises-instance-1-configure-instance-agent"></a>

オンプレミスインスタンスを設定したら、[CodeDeploy エージェントのインストール](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html) のオンプレミスインスタンスのステップに従い、このページに戻ります。

# ステップ 2: サンプルのアプリケーションリビジョンを作成する
<a name="tutorials-on-premises-instance-2-create-sample-revision"></a>

このステップでは、オンプレミスインスタンスにデプロイするサンプルのアプリケーションリビジョンを作成します。

オンプレミスインスタンス上に既にインストールされている、または組織のポリシーによってインストールが許可されているソフトウェアと機能を知るのは難しいため、オンプレミスインスタンスの場所にテキストファイルを書き込むために、ここで提供するサンプルアプリケーションリビジョンでは、バッチスクリプト (Windows Server の場合) またはシェルスクリプト (Ubuntu Server および RHEL の場合) を使用します。**Install**、 **AfterInstall**、 **ApplicationStart** および **ValidateService** を含む、複数の CodeDeploy デプロイライフサイクルイベントごとに 1 つのファイルが書き込まれます。**BeforeInstall** デプロイライフサイクルイベント中にスクリプトが実行され、このサンプルの前のデプロイ中に書き込まれた古いファイルを削除し、新しいファイルを書き込むオンプレミスインスタンス上に場所を作成します。

**注記**  
以下のいずれも該当しない場合、このサンプルのアプリケーションリビジョンはデプロイに失敗することがあります。  
オンプレミスインスタンスで CodeDeploy エージェントを起動するユーザーには、スクリプトを実行する権限がありません。
ユーザーに、スクリプトにリストされている場所でフォルダを作成または削除する権限がない。
ユーザーに、スクリプトにリストされている場所でテキストファイルを作成する権限がない。

**注記**  
Windows Server インスタンスを設定し、別のサンプルをデプロイする場合は、[ステップ 2: Windows Server の Amazon EC2 instance インスタンスにデプロイするソースコンテンツを設定する](tutorials-windows-configure-content.md) チュートリアルの「[チュートリアル: 「Hello, World\$1」 CodeDeploy を使用したアプリケーション (Windows Server)](tutorials-windows.md)」のサンプルを使用することをお勧めします。  
RHEL インスタンスを設定し、別のサンプルをデプロイする場合は、[ステップ 2: Amazon Linux または Red Hat エンタープライズ Linux Amazon EC2 インスタンスにデプロイされるようにソースコンテンツを設定する](tutorials-wordpress-configure-content.md) のチュートリアルの [チュートリアル: Amazon EC2 インスタンスに WordPress をデプロイする (Amazon Linux または Red Hat エンタープライズ Linux および Linux、macOS、または Unix)](tutorials-wordpress.md) のサンプルを使用することをお勧めします。  
現在、Ubuntu サーバー用の代替サンプルはありません。

1. 開発マシンで、サンプルのアプリケーションリビジョンのファイルを保存する、`CodeDeployDemo-OnPrem` という名前のサブディレクトリ (サブフォルダ) を作成し、そのサブフォルダに切り替えます。この例では、`c:\temp` のフォルダを Windows サーバーのルートフォルダとして使用するか、`/tmp` のフォルダを Ubuntu サーバーおよび RHEL のルートフォルダとして使用することを前提としています。別のフォルダを使用する場合は、このチュートリアル全体でそのフォルダに置き換えてください。

   Windows の場合:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem
   cd c:\temp\CodeDeployDemo-OnPrem
   ```

   Linux、macOS、Unix の場合:

   ```
   mkdir /tmp/CodeDeployDemo-OnPrem
   cd /tmp/CodeDeployDemo-OnPrem
   ```

1. `CodeDeployDemo-OnPrem` サブフォルダのルートで、テキストエディタを使用して `appspec.yml` および `install.txt` という 2 つのファイルを作成します。

   Windows サーバーのための `appspec.yml`

   ```
   version: 0.0
   os: windows
   files:
     - source: .\install.txt
       destination: c:\temp\CodeDeployExample
   hooks:
     BeforeInstall:
       - location: .\scripts\before-install.bat
         timeout: 900
     AfterInstall:
       - location: .\scripts\after-install.bat     
         timeout: 900
     ApplicationStart:
       - location: .\scripts\application-start.bat  
         timeout: 900
     ValidateService:
       - location: .\scripts\validate-service.bat    
         timeout: 900
   ```

   Ubuntu ServerとRHELのための `appspec.yml`：

   ```
   version: 0.0
   os: linux
   files:
     - source: ./install.txt
       destination: /tmp/CodeDeployExample
   hooks:
     BeforeInstall:
       - location: ./scripts/before-install.sh
         timeout: 900
     AfterInstall:
       - location: ./scripts/after-install.sh
         timeout: 900
     ApplicationStart:
       - location: ./scripts/application-start.sh
         timeout: 900
     ValidateService:
       - location: ./scripts/validate-service.sh
         timeout: 900
   ```

   AppSpec ファイルの詳細については、「[CodeDeploy 用のアプリケーション仕様ファイルをリビジョンに追加](application-revisions-appspec-file.md)」および「[CodeDeploy AppSpec ファイルのリファレンス](reference-appspec-file.md)」を参照してください。

   `install.txt`:

   ```
   The Install deployment lifecycle event successfully completed.
   ```

1. `CodeDeployDemo-OnPrem` サブフォルダのルートの下に、`scripts` サブフォルダを作成し、そのサブフォルダに切り替えます。

   Windows の場合:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem\scripts
   cd c:\temp\CodeDeployDemo-OnPrem\scripts
   ```

   Linux、macOS、Unix の場合:

   ```
   mkdir -p /tmp/CodeDeployDemo-OnPrem/scripts
   cd /tmp/CodeDeployDemo-OnPrem/scripts
   ```

1. `scripts` のサブフォルダのルートで、テキストエディタを使用して、 Windows サーバーの場合は `before-install.bat`、`after-install.bat`、`application-start.bat`、 `validate-service.bat`、あるいは Ubuntu サーバーおよび RHEL の場合は、`before-install.sh`、`after-install.sh`、`application-start.sh`、`validate-service.sh` という名前の 4 つのファイルを作成します。

   Windows サーバーの場合

   `before-install.bat`:

   ```
   set FOLDER=%HOMEDRIVE%\temp\CodeDeployExample
   
   if exist %FOLDER% (
     rd /s /q "%FOLDER%"
   )
   
   mkdir %FOLDER%
   ```

   `after-install.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The AfterInstall deployment lifecycle event successfully completed. > after-install.txt
   ```

   `application-start.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ApplicationStart deployment lifecycle event successfully completed. > application-start.txt
   ```

   `validate-service.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ValidateService deployment lifecycle event successfully completed. > validate-service.txt
   ```

   Ubuntu Server と RHEL の場合:

   `before-install.sh`:

   ```
   #!/bin/bash
   export FOLDER=/tmp/CodeDeployExample
   
   if [ -d $FOLDER ]
   then
    rm -rf $FOLDER
   fi
   
   mkdir -p $FOLDER
   ```

   `after-install.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The AfterInstall deployment lifecycle event successfully completed." > after-install.txt
   ```

   `application-start.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ApplicationStart deployment lifecycle event successfully completed." > application-start.txt
   ```

   `validate-service.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ValidateService deployment lifecycle event successfully completed." > validate-service.txt
   
   unset FOLDER
   ```

1. Ubuntu サーバーおよび RHEL の場合のみ、4 つのシェルスクリプトに実行権限があることを確認します。

   ```
   chmod +x ./scripts/*
   ```

# ステップ 3: アプリケーションリビジョンをバンドルし、Amazon S3 にアップロードする
<a name="tutorials-on-premises-instance-3-bundle-sample-revision"></a>

アプリケーションリビジョンをデプロイする前に、ファイルをバンドルし、ファイルバンドルを Amazon S3 バケットにアップロードしておく必要があります。「[CodeDeploy でアプリケーションを作成する](applications-create.md)」および「[Amazon S3 に CodeDeploy のリビジョンをプッシュする (EC2/オンプレミスのデプロイのみ)](application-revisions-push.md)」の手順に従います。(アプリケーションとデプロイグループには任意の名前を付けることができますが、アプリケーション名に「`CodeDeploy-OnPrem-App`」、デプロイグループ名に「`CodeDeploy-OnPrem-DG`」を使用することをお勧めします)。これらの手順を実行したら、このページに戻ります。

**注記**  
または、GitHub リポジトリにファイルバンドルをアップロードし、そこからデプロイできます。詳細については、「[GitHub と CodeDeploy との統合](integrations-partners-github.md)」を参照してください。

# ステップ 4: アプリケーションリビジョンをデプロイする
<a name="tutorials-on-premises-instance-4-deploy-sample-revision"></a>

アプリケーションリビジョンを Amazon S3 バケットにアップロードしたら、オンプレミスインスタンスへのデプロイを試します。「[CodeDeploy でデプロイを作成する](deployments-create.md)」の指示に従ってから、このページに戻ります。

# ステップ 5: デプロイを確認する
<a name="tutorials-on-premises-instance-5-verify-deployment"></a>

デプロイが成功したことを確認するには、「[CodeDeploy デプロイの詳細を表示する](deployments-view-details.md)」の手順に従い、このページに戻ります。

デプロイが成功している場合は、`c:\temp\CodeDeployExample` のフォルダ (Windows の場合) または `/tmp/CodeDeployExample` (Ubuntu サーバーおよび RHEL の場合) に、 4 つのテキストフォルダが見つかります。

デプロイが失敗した場合は、「[CodeDeploy を用いてインスタンスの詳細の表示](instances-view-details.md)」および「[インスタンスの問題のトラブルシューティング](troubleshooting-ec2-instances.md)」のトラブルシューティングステップに従ってください。必要な修正を行い、アプリケーションリビジョンを再バンドルしてアップロードしてから、デプロイを再試行します。

# ステップ 6: リソースをクリーンアップする
<a name="tutorials-on-premises-instance-6-clean-up-resources"></a>

このチュートリアル用に作成したリソースの料金が継続的に発生しないようにするため、それ以上使用しない場合は Amazon S3 バケットを削除します。CodeDeploy とオンプレミスインスタンス中のアプリケーションおよびデプロイグループレコードのような関連リソースを、クリーンアップすることもできます。

 AWS CLI または CodeDeploy コンソールと Amazon S3 コンソールの組み合わせと を使用して、リソース AWS CLI をクリーンアップできます。

## リソースのクリーンアップ (CLI)
<a name="tutorials-on-premises-instance-6-clean-up-resources-cli"></a>

**Amazon S3 バケットを削除するには**
+ バケット (例: `--recursive`) に対して、`amzn-s3-demo-bucket` のスイッチを用いて [rm](https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html) コマンドを呼び出します。バケットとバケット内のすべてのオブジェクトが削除されます。

  ```
  aws s3 rm s3://your-bucket-name --recursive --region region
  ```

**CodeDeploy 中のアプリケーションとデプロイグループレコードを削除するには**
+ アプリケーションに対して [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) コマンドを呼び出します (例: `CodeDeploy-OnPrem-App`)。デプロイおよびデプロイグループのレコードが削除されます。

  ```
  aws deploy delete-application --application-name your-application-name
  ```<a name="tutorials-on-premises-instance-6-clean-up-resources-deregister-cli"></a>

**オンプレミスインスタンスを登録解除し、IAM ユーザーを削除するには**
+ オンプレミスインスタンスとリージョンに対して [deregister](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html) コマンドを呼び出します。

  ```
  aws deploy deregister --instance-name your-instance-name --delete-iam-user --region your-region
  ```
**注記**  
このオンプレミスインスタンスに関連付けられた IAM ユーザーを削除しない場合は、代わりに `--no-delete-iam-user` のオプションを使用します。

**CodeDeploy エージェントをアンインストールし、オンプレミスインスタンスから設定ファイルを削除するには**
+ オンプレミスインスタンスから [uninstall](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html) コマンドを呼び出します。

  ```
  aws deploy uninstall
  ```

これで、このチュートリアルで使用したリソースをクリーンアップするすべてのステップが完了しました。

## リソースのクリーンアップ (コンソール)
<a name="tutorials-on-premises-instance-6-clean-up-resources-console"></a>

**Amazon S3 バケットを削除するには**

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

1. 削除するバケットの横にあるアイコン (例: `amzn-s3-demo-bucket`) を選択します。ただし、バケット自体を選択しないでください。

1. **[アクション]**、**[削除]** の順に選択します。

1. バケットを削除するように求められたら、[**OK**] を選択します。

**CodeDeploy 中のアプリケーションとデプロイグループレコードを削除するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで、[**アプリケーション**] を選択します。

1. 削除するアプリケーションの名前 (`CodeDeploy-OnPrem-App` など) を選択し、[**アプリケーションの削除**] を選択します。

1. プロンプトが表示されたら、アプリケーションの名前を入力して削除することを確定し、[**削除**] を選択します。

 AWS CodeDeploy コンソールを使用してオンプレミスインスタンスの登録を解除したり、CodeDeploy エージェントをアンインストールしたりすることはできません。「[オンプレミスインスタンスを登録解除し、IAM ユーザーを削除するには](#tutorials-on-premises-instance-6-clean-up-resources-deregister-cli)」の手順に従います。

# チュートリアル: CodeDeploy を使用して、Auto Scaling グループにアプリケーションをデプロイします。
<a name="tutorials-auto-scaling-group"></a>

このチュートリアルでは、CodeDeploy を使用して Auto Scaling グループにアプリケーションリビジョンをデプロイします。Amazon EC2 Auto Scaling は、事前定義された条件を使用して Amazon EC2 インスタンスを起動した後に、不要になった Amazon EC2 インスタンスを終了します。Amazon EC2 Auto Scaling は、デプロイメントの負荷を処理するために常に適切な数の Amazon EC2 インスタンスを利用できるようにすることで、CodeDeploy のスケーリングに役立ちます。CodeDeploy による Amazon EC2 Auto Scaling 統合の詳細については、[CodeDeploy と Amazon EC2 Auto Scaling の統合](integrations-aws-auto-scaling.md) を参照してください。

**Topics**
+ [前提条件](tutorials-auto-scaling-group-prerequisites.md)
+ [ステップ 1: Auto Scaling グループを作成して設定します。](tutorials-auto-scaling-group-create-auto-scaling-group.md)
+ [ステップ 2: Auto Scaling グループにアプリケーションをデプロイする](tutorials-auto-scaling-group-create-deployment.md)
+ [ステップ 3: 結果の確認](tutorials-auto-scaling-group-verify.md)
+ [ステップ 4: Auto Scaling グループの Amazon EC2 インスタンスの数を増やす](tutorials-auto-scaling-group-scale-up.md)
+ [ステップ 5: 結果を再度確認します](tutorials-auto-scaling-group-reverify.md)
+ [ステップ 6: クリーンアップする](tutorials-auto-scaling-group-clean-up.md)

# 前提条件
<a name="tutorials-auto-scaling-group-prerequisites"></a>

このチュートリアルを実行するには:
+ のセットアップと設定[CodeDeploy の開始方法](getting-started-codedeploy.md)、IAM インスタンスプロファイル (**CodeDeployDemo-EC2-Instance-Profile**) AWS CLI とサービスロール () の作成など、 のすべてのステップを完了します**CodeDeployDemo**。*サービスロール* は、ユーザーに代わってサービスアクセス権限を付与する、特別なタイプの IAM ロールです。
+ 起動テンプレートを使用して Auto Scaling グループを作成する場合は、次の権限を追加する必要があります。
  +  `ec2:RunInstances` 
  +  `ec2:CreateTags` 
  +  `iam:PassRole` 

  さらなる詳細については、[ステップ 2: サービスロールを作成する](getting-started-create-service-role.md)、[Creating a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html)、および *Amazon EC2 Auto Scaling User Guide* 中の [Launch template support](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-launch-template-permissions.html) を参照してください。
+  Ubuntu サーバーインスタンスおよび CodeDeploy と互換性のあるリビジョンを作成して使用します。リビジョンでは、次のいずれかを実行できます。
  + 「[チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。](tutorials-on-premises-instance.md)」チュートリアルの [ステップ 2: サンプルのアプリケーションリビジョンを作成する](tutorials-on-premises-instance-2-create-sample-revision.md) のサンプルリビジョンを作成して使用します。
  + リビジョンを独自に作成するには、「[CodeDeploy のアプリケーションリビジョンの操作](application-revisions.md)」を参照してください。
+ **Inbound rule** を用いて、**CodeDeployDemo-AS-SG** という名前のセキュリティグループを作成します。
  + Type: HTTP
  + ソース：どこでも

  これは、アプリケーションを表示し、デプロイメントの成功を確認するために必要です。セキュリティグループの作成方法については、*Amazon EC2 user guide* 中の [Creating a security group](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#creating-security-group) を参照してください。

 

# ステップ 1: Auto Scaling グループを作成して設定します。
<a name="tutorials-auto-scaling-group-create-auto-scaling-group"></a>

このステップでは、単一の Amazon Linux、RHEL、または Windows サーバーの Amazon EC2 インスタンスを含む Auto Scaling グループを作成します。後のステップで、もう 1 つの Amazon EC2 インスタンスを追加するように Amazon EC2 Auto Scaling に指示し、CodeDeploy はそれにリビジョンをデプロイします。

**Topics**
+ [Auto Scaling グループ (CLI) を作成して設定するには](#tutorials-auto-scaling-group-create-auto-scaling-group-cli)
+ [Auto Scaling グループ (コンソール) を作成して設定するには](#tutorials-auto-scaling-group-create-auto-scaling-group-console)

## Auto Scaling グループ (CLI) を作成して設定するには
<a name="tutorials-auto-scaling-group-create-auto-scaling-group-cli"></a>

1. **create-launch-template** コマンドを呼び出して、Amazon EC2 起動テンプレートを作成します。

   このコマンドを呼び出す前に、プレースホルダー *image-id* で表される、このチュートリアルで使用する AMI の ID が必要です。プレースホルダー *key-name* で表される、 Amazon EC2 インスタンスへのアクセスを有効にする Amazon EC2 インスタンスのキーペアの名前も必要です。

   このチュートリアルで使用する AMI の ID を取得するには。

   1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

   1. ナビゲーションペインで、[**Instances**] の下にある、[**Instances**] を選択して、[**Launch Instance**] を選択します。

   1. **Choose an Amazon Machine Image** ページの **Quick Start** タブ上で、**Amazon Linux 2 AMI**、 **Red Hat Enterprise Linux 7.1**、**Ubuntu Server 14.04 LTS**、あるいは **Microsoft Windows Server 2012 R2** の横にある AMI の ID をメモします。
**注記**  
CodeDeploy と互換性がある AMI のカスタムバージョンの場合、**クイックスタート** タブを参照する代わりに、ここでそれを選択します。CodeDeploy および Amazon EC2 Auto Scaling でカスタム AMI を使用することについての詳細については、[CodeDeploy と Amazon EC2 Auto Scaling でのカスタム AMI の使用](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-custom-ami) を参照してください。

   Amazon EC2 インスタンスのキーペアについては、Amazon EC2 インスタンスのキーペアの名前を使用します。

   **create-launch-template** コマンドを呼び出します。

   ローカル Linux、macOS、あるいは Unix マシンについて

   ```
   aws ec2 create-launch-template \
     --launch-template-name CodeDeployDemo-AS-Launch-Template \
     --launch-template-data file://config.json
   ```

   `config.json` ファイルのコンテンツ:

   ```
   { 
     "InstanceType":"t1.micro",
     "ImageId":"image-id",
     "IamInstanceProfile":{
       "Name":"CodeDeployDemo-EC2-Instance-Profile"
     },
     "KeyName":"key-name"
   }
   ```

   ローカル Windows マシンの場合

   ```
   aws ec2 create-launch-template --launch-template-name CodeDeployDemo-AS-Launch-Template --launch-template-data file://config.json
   ```

   `config.json` ファイルのコンテンツ:

   ```
   { 
     "InstanceType":"t1.micro",
     "ImageId":"image-id",
     "IamInstanceProfile":{
       "Name":"CodeDeployDemo-EC2-Instance-Profile"
     },
     "KeyName":"key-name"
   }
   ```

   これらのコマンドは、`config.json` ファイルとともに、Auto Scaling グループ用の CodeDeployDemo-as-Launch-Template という名前の Amazon EC2 起動テンプレートを作成します。このテンプレートは、t1.micro Amazon EC2 インスタンスタイプに基づいて次のステップで作成されます。`ImageId`、`IamInstanceProfile`、`KeyName` への入力に基づいて、起動テンプレートでは AMI ID、起動時にインスタンスに渡す IAM ロールに関連付けられたインスタンスプロファイルの名前、およびインスタンスへの接続時に使用する Amazon EC2 キーペアも指定します。

1.  **create-auto-scaling-group** のコマンドをを呼び出して、Auto Scaling グループを作成します。*AWS 全般のリファレンス* の[リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)に一覧表示されているリージョンの 1 つで、プレースホルダー *availability-zone* で表される、1 つのアベイラビリティーゾーンの名前が必要になります。
**注記**  
リージョンでアベイラビリティーゾーンのリストを表示するには、以下を呼び出します。  

   ```
   aws ec2 describe-availability-zones --region region-name
   ```
例えば、米国西部 (オレゴン) リージョンのアベイラビリティーゾーンのリストを表示するには、次のように呼び出します。  

   ```
   aws ec2 describe-availability-zones --region us-west-2
   ```
リージョン名識別子のリストについては、「[リージョン別リソースキットバケット名](resource-kit.md#resource-kit-bucket-names)」を参照してください。

   ローカル Linux、macOS、Unix マシンについて

   ```
   aws autoscaling create-auto-scaling-group \
     --auto-scaling-group-name CodeDeployDemo-AS-Group \
     --launch-template CodeDeployDemo-AS-Launch-Template,Version='$Latest' \
     --min-size 1 \
     --max-size 1 \
     --desired-capacity 1 \
     --availability-zones availability-zone \
     --tags Key=Name,Value=CodeDeployDemo,PropagateAtLaunch=true
   ```

   ローカル Windows マシンの場合

   ```
   aws autoscaling create-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --launch-template LaunchTemplateName=CodeDeployDemo-AS-Launch-Template,Version="$Latest" --min-size 1 --max-size 1 --desired-capacity 1 --availability-zones availability-zone --tags Key=Name,Value=CodeDeployDemo,PropagateAtLaunch=true
   ```

   これらのコマンドは、**CodeDeployDemo-AS-Group** という名前の Amazon EC2 起動テンプレートに基づいた **CodeDeployDemo-AS-Launch-Template** という名前の Auto Scaling グループを作成します。この Auto Scaling グループには Amazon EC2 インスタンスが 1 つだけあり、指定したアベイラビリティーゾーンに作成されます。この Auto Scaling グループ内の各インスタンスには、タグ `Name=CodeDeployDemo` があります。このタグは、後で CodeDeploy エージェントをインストールするときに使用されます。

1. **CodeDeployDemo-AS-Group** に対して **describe-auto-scaling-groups** コマンドを呼び出します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].[HealthStatus, LifecycleState]" --output text
   ```

   戻り値に、`Healthy` および `InService` と表示されるまで続行しないでください。

1.  Auto Scaling グループ中のインスタンスには、CodeDeploy デプロイで使用されるためにインストールされている CodeDeploy エージェントがある必要があります。Auto Scaling グループの作成時に追加されたタグ AWS Systems Manager を使用して、 から **create-association** コマンドを呼び出して CodeDeploy エージェントをインストールします。

   ```
   aws ssm create-association \
     --name AWS-ConfigureAWSPackage \
     --targets Key=tag:Name,Values=CodeDeployDemo \
      --parameters action=Install, name=AWSCodeDeployAgent \
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

   このコマンドは、Systems Manager ステートマネージャーで関連付けを作成します。これは、Auto Scaling グループのすべてのインスタンスに CodeDeploy エージェントをインストールし、毎週日曜日の午前 2 時に更新を試みます。CodeDeploy エージェントの詳細については、「[CodeDeploy エージェントの使用](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)」を参照してください。Systems Manager のさらなる詳細については、「[AWS Systems Managerとは](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」 を参照してください。

## Auto Scaling グループ (コンソール) を作成して設定するには
<a name="tutorials-auto-scaling-group-create-auto-scaling-group-console"></a>

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. グローバルナビゲーションバーで、*AWS 全般のリファレンス* の[リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)で一覧表示されているリージョンのいずれかが選択されていることを確認してください。Amazon EC2 Auto Scaling リソースは、指定したリージョンに関連付けられ、CodeDeploy は選択されたリージョンでのみサポートされます。

1. ナビゲーションペインで、[**インスタンス**] の [**テンプレートの起動**] を選択します。

1. [**起動テンプレートの作成**] を選択してください。

1. **Launch template name and description** ダイアログで、**Launch template name** に **CodeDeployDemo-AS-Launch-Template** を入力します。他のフィールドはデフォルトのためのデフォルトをそのままにします。

1. **Amazon machine image (AMI)** ダイアログで、**AMI** の下にあるドロップダウンをクリックし、このチュートリアルで使用する AMI を選択します。

   1. **AMI** ドロップダウンの **Quick Start** 上で、次のどれかを選択します：**Amazon Linux 2 AMI**、**Red Hat Enterprise Linux 7.1**、**Ubuntu Server 14.04 LTS**、または**Microsoft Windows Server 2012 R2** 
**注記**  
CodeDeploy と互換性がある AMI のカスタムバージョンの場合、**クイックスタート** タブを参照する代わりに、ここでそれを選択します。CodeDeploy および Amazon EC2 Auto Scaling でカスタム AMI を使用する方法についての詳細は、[CodeDeploy と Amazon EC2 Auto Scaling でのカスタム AMI の使用](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-custom-ami) を参照してください。

1. **Instance type** で、ドロップダウンを選択し、**t1.micro** を選択します。検索バーを使用すると、よりすばやく検索できます。

1. **Key pair (login)** ダイアログボックスで、[**Choose an existing key pair** を選択します。[**キーペアの選択**] のドロップダウンリストで、前のステップで作成した Amazon EC2 インスタンスのキーペアを選択します。

1. **Network settings** ダイアログボックスで、[**Virtual Public Cloud (VPC)** を選択します。

   **Security groups**ドロップダウンで、[tutorial's prerequisites section](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-auto-scaling-group-prerequisites.html) (**CodeDeployDemo-AS-SG**)で作成したセキュリティグループを選択します。

1. **Advanced details** ダイアログボックスを展開します。**IAM instance profile** ドロップダウンで、**IAM instance profile** の下で以前の (**CodeDeployDemo-EC2-Instance-Profile**) を作成した IAM ロールを選択します。

   デフォルトの残りはそのままにしておきます。

1. [**起動テンプレートの作成**] を選択してください。

1. **Next steps** ダイアログボックスで、[**Create Auto Scaling group** を選択します。

1. **Choose launch template or configuration (起動テンプレートまたは設定の選択)** ページで、**Auto Scaling group name** を **CodeDeployDemo-AS-Group** に入力します。

1. **起動テンプレート**ダイアログボックスで、起動テンプレート (**CodeDeployDemo-AS-Launch-Template**) を入力する必要があります。そうでない場合は、ドロップダウンメニューから、それを選択します。デフォルトのままにして、**Next** を選択します。

1. [**ネットワーク**] セクションの下にある [**インスタンス起動オプションを選択**] ページで、[**VPC**] はデフォルト VPC を選択します。次に、**アベイラビリティーゾーンとサブネット**にはデフォルトサブネットを選択します。デフォルトを選択できない場合は、VPC を作成する必要があります。Amazon S3 の詳細については、[Amazon VPC の開始方法](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html) を参照してください。

1. **[Instance type requirements]** (インスタンスタイプの要件) セクションでは、このステップを簡略化するためにデフォルト設定を使用します。(起動テンプレートを上書きしないでください。) このチュートリアルでは、起動テンプレートで指定されたインスタンスタイプを使用して、オンデマンドインスタンスのみを起動します。

1. **Next** を選択して **Configure advanced options** ページに行きます。

1. デフォルト値をそのまま保ち、**Next** を選択します。

1. **Configure group size and scaling policies** ページで、1 のデフォルトの **Group size** の値をそのままにします。[**次へ**] を選択します。

1. 通知の設定の手順をスキップし、**Next** を選択します。

1. **Add tags** ページ上で、後で CodeDeploy エージェントをインストールするときに使用するタグを追加します。**[タグを追加]** を選択します。

   1. **[Key]** (キー) に、「**Name**」と入力します。

   1. **[値]** には「**CodeDeployDemo**」と入力します。

   [**次へ**] を選択します。

1. **Review** ページで上の Auto Scaling グループの情報を確認し、**Create Auto Scaling group** を選択します。

1. ナビゲーションバーで、選択された **Auto Scaling Groups** を用いて **CodeDeployDemo-AS-Group** を選択し、**Instance Management** タブを選びます。**[Lifecycle]** 列に **[InService]** の値が表示されて、**[Health Status]** 列に、**[Healthy]** の値が表示されるまで進まないでください。

1. CodeDeploy エージェントをインストールするには、「[CodeDeploy エージェントのインストール](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html)」のステップに従い、`Name=CodeDeployDemo` インスタンスタグを使用します。

# ステップ 2: Auto Scaling グループにアプリケーションをデプロイする
<a name="tutorials-auto-scaling-group-create-deployment"></a>

このステップでは、Auto Scaling グループの単一 Amazon EC2 インスタンスにリビジョンをデプロイします。

**Topics**
+ [デプロイを作成するには (CLI)](#tutorials-auto-scaling-group-create-deployment-cli)
+ [デプロイを作成するには (コンソール)](#tutorials-auto-scaling-group-create-deployment-console)

## デプロイを作成するには (CLI)
<a name="tutorials-auto-scaling-group-create-deployment-cli"></a>

1. **create-application** コマンドを呼び出して、**SimpleDemoApp** と言う名前のアプリケーションを作成します。

   ```
   aws deploy create-application --application-name SimpleDemoApp
   ```

1. [ステップ 2: CodeDeployのサービスのロールを作成する](getting-started-create-service-role.md) の手順に従ってサービスロールを作成している必要があります。サービスロールは、Amazon EC2 インスタンスにアクセスしてタグを拡張 (読み込み) する許可を CodeDeploy に付与します。サービスロール ARN が必要になります。サービスロール ARN を取得するには、[サービスロール ARN の取得 (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli) の手順に従います。

1. これで、指定したサービスロール ARN で、**create-deployment-group** コマンドを呼び出して **SimpleDemoDG** という名前のデプロイグループを作成し、**SimpleDemoApp** という名前のアプリケーションと関連付け、**CodeDeployDemo-AS-Group** と言う名前の Auto Scaling グループと **CodeDeployDefault.OneAtATime** と言う名前のデプロイ設定を使用するサービスロール ARN が作成されました。
**注記**  
[create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) コマンドは、デプロイおよびインスタンス内の指定されたイベントについて、トピックサブスクライバーに Amazon SNS 通知を送信するトリガーの作成をサポートします。このコマンドは、Amazon CloudWatch アラームのモニタリングしきい値が満たされたときにデプロイを自動的にロールバックし、デプロイを停止するアラームを設定するオプションもサポートします。このチュートリアルでは、これらのアクションのためのコマンドは含まれていません。

   ローカル Linux、macOS、Unix マシンについて

   ```
   aws deploy create-deployment-group \
     --application-name SimpleDemoApp \
     --auto-scaling-groups CodeDeployDemo-AS-Group \
     --deployment-group-name SimpleDemoDG \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --service-role-arn service-role-arn
   ```

   ローカル Windows マシンの場合

   ```
   aws deploy create-deployment-group --application-name SimpleDemoApp --auto-scaling-groups CodeDeployDemo-AS-Group --deployment-group-name SimpleDemoDG --deployment-config-name CodeDeployDefault.OneAtATime --service-role-arn service-role-arn
   ```

1. 指定された場所のリビジョンを使用して、**SimpleDemoApp** という名前のアプリケーションと関連付けられたデプロイ、**CodeDeployDefault.OneAtATime** という名前のデプロイ設定、**SimpleDemoDG** という名前のデプロイグループを作成する **create-deployment** コマンドを呼び出します。

   **Amazon Linux および RHEL の Amazon EC2インスタンスの場合、ローカルの Linux、macOS、または Unixマシンから呼び出します**

    

   ```
   aws deploy create-deployment \
     --application-name SimpleDemoApp \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name SimpleDemoDG \
     --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Linux.zip
   ```

   *bucket-name* は、リージョンの CodeDeploy リソースキットファイルが含まれている Amazon S3 バケットの名前です。例えば、米国東部 (オハイオ) リージョンの場合、*バケット名* を `aws-codedeploy-us-east-2` に置き換えます。バケット名のリストについては、[リージョン別リソースキットバケット名](resource-kit.md#resource-kit-bucket-names) を参照してください。

   **ローカル Windows マシンから呼び出した Amazon Linux および RHEL Amazon EC2 instances の場合**

    

   ```
   aws deploy create-deployment --application-name SimpleDemoApp --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name SimpleDemoDG --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Linux.zip
   ```

   *bucket-name* は、リージョンの CodeDeploy リソースキットファイルが含まれている Amazon S3 バケットの名前です。例えば、米国東部 (オハイオ) リージョンの場合、*バケット名* を `aws-codedeploy-us-east-2` に置き換えます。バケット名のリストについては、[リージョン別リソースキットバケット名](resource-kit.md#resource-kit-bucket-names) を参照してください。

   **ローカルの Linux、macOS、または Unix マシンから呼び出した Windows サーバー Amazon Linux および RHEL の Amazon EC2インスタンスの場合**

    

   ```
   aws deploy create-deployment \
     --application-name SimpleDemoApp \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name SimpleDemoDG \
     --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Windows.zip
   ```

   *bucket-name* は、リージョンの CodeDeploy リソースキットファイルが含まれている Amazon S3 バケットの名前です。例えば、米国東部 (オハイオ) リージョンの場合、*バケット名* を `aws-codedeploy-us-east-2` に置き換えます。バケット名のリストについては、[リージョン別リソースキットバケット名](resource-kit.md#resource-kit-bucket-names) を参照してください。

   **ローカル Windows マシンから呼び出した Windows サーバー Amazon EC2 インスタンスの場合**

   ```
   aws deploy create-deployment --application-name SimpleDemoApp --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name SimpleDemoDG --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Windows.zip
   ```

   *bucket-name* は、リージョンの CodeDeploy リソースキットファイルが含まれている Amazon S3 バケットの名前です。例えば、米国東部 (オハイオ) リージョンの場合、*バケット名* を `aws-codedeploy-us-east-2` に置き換えます。バケット名のリストについては、[リージョン別リソースキットバケット名](resource-kit.md#resource-kit-bucket-names) を参照してください。
**注記**  
現在のところ、CodeDeploy は Ubuntu サーバーの Amazon EC2 インスタンスにデプロイするサンプルリビジョンを提供していません。リビジョンを独自に作成するには、[CodeDeploy のアプリケーションリビジョンの操作](application-revisions.md) を参照してください。

1. **get-deployment** コマンドを呼び出して、デプロイが成功したことを確認します。

   このコマンドを呼び出す前に、**create-deployment** コマンドの呼び出しで返された、デプロイの ID が必要になります。デプロイ ID を再度取得することが必要な場合には、**SimpleDemoApp** という名前のアプリケーションと **SimpleDemoDG** と言う名前のデプロイグループに対して、**list-deployments** コマンドを呼び出します。

   ```
   aws deploy list-deployments --application-name SimpleDemoApp --deployment-group-name SimpleDemoDG --query "deployments" --output text
   ```

   次に、デプロイ ID を使用して **get-deployment** コマンドを呼び出します。

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.status" --output text
   ```

   `Succeeded` の値が返されるまで続けないでください。

## デプロイを作成するには (コンソール)
<a name="tutorials-auto-scaling-group-create-deployment-console"></a>

1. [ステップ 2: CodeDeployのサービスのロールを作成する](getting-started-create-service-role.md) の手順に従ってサービスロールを作成している必要があります。サービスロールは、インスタンスにアクセスしてタグを拡張 (読み込み) する許可を CodeDeploy に付与します。CodeDeploy コンソールを使用してアプリケーションリビジョンをデプロイする前に、サービスロール ARN が必要になります。サービスロール ARN を取得するには、[サービスロール ARN の取得 (コンソール)](getting-started-create-service-role.md#getting-started-get-service-role-console) の手順に従います。

1. サービスロール ARN があるので、CodeDeploy コンソールを使用して、アプリケーションリビジョンをデプロイできます。

   にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1. [**アプリケーションを作成**] を選択します。

1. [**カスタムアプリケーション**] を選択します。

1. [**アプリケーション名**] に、「**SimpleDemoApp**」と入力します。

1. [**コンピューティングプラットフォーム**] で [**EC2/オンプレミス**] を選択します。

1. [**アプリケーションを作成**] を選択します。

1. [**デプロイグループ**] タブで、[**デプロイグループの作成**] を選択します。

1. **[Deployment group name]** (デプロイグループ名) に「**SimpleDemoDG**」と入力します。

1. [**サービスロール**] で、 サービスロールの名前を選択します。

1. [**デプロイタイプ**] で、[**インプレース**] を選択します。

1. [**環境設定**] で、[**Auto Scaling グループ**]、[**CodeDeployDemo-AS-Group**] の順に選択します。

1. [**デプロイ設定**] で [**CodeDeployDefault.OneAtATime**] を選択します。

1. [**Enable load balancing (ロードバランシングの有効化)**] のチェックを外します。

1. **デプロイグループの作成** を選択します。

1. デプロイグループページで、[**デプロイの作成**] を選択します。

1. [**Revision type (リビジョンのタイプ)**] の横の [**My application is stored in Amazon S3 (Amazon S3 に保存されているアプリケーション)**] を選択します。

1. [**リビジョンの場所**] に、オペレーティングシステムとリージョンのサンプルアプリケーションの場所を入力します。

   **Amazon Linux、RHEL Amazon EC2 インスタンスの場合**  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorials-auto-scaling-group-create-deployment.html)

   **Windows Server Amazon EC2 インスタンスの場合**  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorials-auto-scaling-group-create-deployment.html)

    **Ubuntu Server Amazon EC2 インスタンスの場合**

   Amazon S3 に格納されるカスタムアプリケーションリビジョンの場所を入力します。

1. [**デプロイメントの説明**] は空白のままにしておきます。

1. [**Advanced**] を展開します。

1. **[デプロイの作成]** を選択します。
**注記**  
**Succeeded** の代わりに **Failed** が表示された場合、[デプロイをモニタリングおよびトラブルシューティングします。](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor) にある手法の一部を試してみることもできます (**SimpleDemoApp** のアプリケーション名、および **SimpleDemoDG** のデプロイグループ名を使用して)。

# ステップ 3: 結果の確認
<a name="tutorials-auto-scaling-group-verify"></a>

このステップでは、CodeDeploy が Auto Scaling グループの単一 Amazon EC2 インスタンスについての **SimpleDemoApp** のリビジョンをインストールしたかどうかを確認します。

**Topics**
+ [結果を確認するには (CLI)](#tutorials-auto-scaling-group-verify-cli)
+ [結果を確認するには (コンソール)](#tutorials-auto-scaling-group-verify-console)

## 結果を確認するには (CLI)
<a name="tutorials-auto-scaling-group-verify-cli"></a>

まず、Amazon EC2 インスタンスのパブリック DNS が必要です。

を使用して AWS CLI 、 **describe-instances** コマンドを呼び出して Auto Scaling グループ内の Amazon EC2 インスタンスのパブリック DNS を取得します。

このコマンドを呼び出す前に、Amazon EC2 インスタンスの ID が必要です。この ID を取得するには、以前に行ったように、**CodeDeployDemo-AS-Group** に対して **describe-auto-scaling-groups** を呼び出します。

```
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].InstanceId" --output text
```

次に **describe-instances** コマンドを呼び出します。

```
aws ec2 describe-instances --instance-id instance-id --query "Reservations[0].Instances[0].PublicDnsName" --output text
```

返される値は Amazon EC2 インスタンスのパブリック DNS です。

ウェブブラウザを使用して、次のような URL を使用して Amazon EC2 インスタンスにデプロイした [SimpleDemoApp] リビジョンを表示します。

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

成功のページが表示されると、リビジョンは Auto Scaling グループの単一の Amazon EC2 インスタンスに CodeDeploy を使用して正しくデプロイされました。

次に、Amazon EC2 インスタンスを Auto Scaling グループに追加します。Amazon EC2 Auto Scaling が Amazon EC2 インスタンスを追加すると、CodeDeploy は新しいインスタンスにリビジョンをデプロイします。

## 結果を確認するには (コンソール)
<a name="tutorials-auto-scaling-group-verify-console"></a>

まず、Amazon EC2 インスタンスのパブリック DNS が必要です。

Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

Amazon EC2 ナビゲーションペインの **Auto Scaling** の下で、**Auto Scaling グループ** を選択し、**CodeDeployDemo-AS-Group** のエントリを選択します。

**インスタンス** タブで、リスト内の Amazon EC2 インスタンス ID を選択します。

[**Instances**] ページの、[**Description**] タブで、[**Public DNS**] 値をメモします。次のように表示されます。**ec2-01-234-567-890.compute-1.amazonaws.com**

ウェブブラウザを使用して、次のような URL を使用して Amazon EC2 インスタンスにデプロイした [SimpleDemoApp] リビジョンを表示します。

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

成功のページが表示されると、リビジョンは Auto Scaling グループの単一の Amazon EC2 インスタンスに CodeDeploy を使用して正しくデプロイされました。

次に、Auto Scaling グループに Amazon EC2 インスタンスを追加します。Amazon EC2 Auto Scaling が Amazon EC2 インスタンスを追加した後、CodeDeploy は新しい Amazon EC2 インスタンスにリビジョンをデプロイします。

# ステップ 4: Auto Scaling グループの Amazon EC2 インスタンスの数を増やす
<a name="tutorials-auto-scaling-group-scale-up"></a>

このステップでは、追加の Amazon EC2 インスタンスを作成するように Auto Scaling グループに指示します。Amazon EC2 Auto Scaling がインスタンスを作成すると、CodeDeploy によってリビジョンがデプロイされます。

**Topics**
+ [Auto Scaling グループ (CLI) の Amazon EC2 インスタンスの数をスケールアウトする](#tutorials-auto-scaling-group-scale-up-cli)
+ [デプロイグループ (コンソール) で Amazon EC2 インスタンスの数をスケールアップするには](#tutorials-auto-scaling-group-scale-up-console)

## Auto Scaling グループ (CLI) の Amazon EC2 インスタンスの数をスケールアウトする
<a name="tutorials-auto-scaling-group-scale-up-cli"></a>

1. **update-auto-scaling-group** のコマンドを呼び出し、**CodeDeployDemo-AS-Group** という名前の Auto Scaling グループの Amazon EC2 インスタンスを、1 から 2 に増やします。

   ローカル Linux、macOS、あるいは Unix マシンについて

   ```
   aws autoscaling update-auto-scaling-group \
     --auto-scaling-group-name CodeDeployDemo-AS-Group \
     --min-size 2 \
     --max-size 2 \
     --desired-capacity 2
   ```

   ローカル Windows マシンの場合

   ```
   aws autoscaling update-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --min-size 2 --max-size 2 --desired-capacity 2
   ```

1. Auto Scaling グループに 2 つの Amazon EC2 インスタンスが存在することを確認します。**CodeDeployDemo-AS-Group** に対して **describe-auto-scaling-groups** コマンドを呼び出します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].[HealthStatus, LifecycleState]" --output text
   ```

   戻り値に、`Healthy` と `InService` の両方が表示されるまで続行しないでください。

## デプロイグループ (コンソール) で Amazon EC2 インスタンスの数をスケールアップするには
<a name="tutorials-auto-scaling-group-scale-up-console"></a>

1. Amazon EC2 ナビゲーションバーで、**Auto Scaling** の下で、**Auto Scaling Groups** を選択し、次に **CodeDeployDemo-AS-Group** を選択します。

1. **[アクション]** を選択し、**[編集]** を選択します。

1. [**詳細**] タブで、[**必要**]、[**最小**] および [**最大**] ボックスに **2** と入力し、[**保存**] を選択します。

1. [**Instances**] タブを選択します。新しい Amazon EC2 インスタンスが一覧に表示されます。(インスタンスが表示されない場合、[**Refresh**] ボタンを数回選択する必要が生じる場合があります)。**[Lifecycle]** 列に **[InService]** の値が表示されて、**[Health Status]** 列に、**[Healthy]** の値が表示されるまで進まないでください。

# ステップ 5: 結果を再度確認します
<a name="tutorials-auto-scaling-group-reverify"></a>

このステップでは、CodeDeploy が Auto Scaling グループの新しいインスタンスの [SimpleDemoApp] リビジョンをインストールしたかどうかを確認します。

**Topics**
+ [自動デプロイの結果を確認するには (CLI)](#tutorials-auto-scaling-group-reverify-cli)
+ [自動デプロイの結果を確認するには (コンソール)](#tutorials-auto-scaling-group-reverify-console)

## 自動デプロイの結果を確認するには (CLI)
<a name="tutorials-auto-scaling-group-reverify-cli"></a>

1. **get-deployment** コマンドを確認する前に、自動デプロイの ID が必要です。ID を取得するには、**SimpleDemoApp** という名前のアプリケーションと **SimpleDemoDG** と言う名前のデプロイグループに対して **list-deployments** コマンドを呼び出します。

   ```
   aws deploy list-deployments --application-name SimpleDemoApp --deployment-group-name SimpleDemoDG --query "deployments" --output text
   ```

   2 つのデプロイ ID があるはずです。**get-deployment** コマンドの呼び出しでは、まだ使用していない ID を使用してください。

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.[status, creator]" --output text
   ```

   デプロイのステータスに加えて、`autoScaling` がコマンド出力に表示されます (`autoScaling` は Amazon EC2 Auto Scaling が作成したデプロイ)。

   デプロイのステータスに `Succeeded` が表示されるまで進まないでください。

1. **describe-instances** のコマンドを呼び出す前に、新しい Amazon EC2 インスタンスの ID が必要です。この ID を取得するには、**CodeDeployDemo-AS-Group** に対して **describe-auto-scaling-groups** コマンドをもう一度呼び出します。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].InstanceId" --output text
   ```

   次に **describe-instances** コマンドを呼び出します。

   ```
   aws ec2 describe-instances --instance-id instance-id --query "Reservations[0].Instances[0].PublicDnsName" --output text
   ```

   **describe-instances** のコマンドの出力で、新しい Amazon EC2 インスタンスの パブリック DNS をメモします。

1. ウェブブラウザを使用して、次のような URL を使用して Amazon EC2 インスタンスにデプロイした `SimpleDemoApp` のリビジョンを表示します。

   ```
   http://ec2-01-234-567-890.compute-1.amazonaws.com
   ```

   成功のページが表示されると、CodeDeploy によってリビジョンが Auto Scaling グループのスケールアップされた Amazon EC2 インスタンスに正常にデプロイされています。

## 自動デプロイの結果を確認するには (コンソール)
<a name="tutorials-auto-scaling-group-reverify-console"></a>

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで、**Deploy** を展開し、**Deployments** を選択します。

   

1. Amazon EC2 Auto Scaling が作成したデプロイのデプロイ ID を選択します。

   .

1.  [**デプロイ**] ページに、デプロイに関する情報が表示されます。通常の場合は、ユーザーがデプロイを作成しますが、Amazon EC2 Auto Scaling はユーザーに代わってリビジョンを新しい Amazon EC2 インスタンスにデプロイします。

1. ページ上部に [**成功**] と表示されたら、インスタンスで結果を確認します。最初に、インスタンスのパブリック DNS を取得する必要があります。

1. Amazon EC2 ナビゲーションペインの **Auto Scaling** の下で、**Auto Scaling グループ** を選択し、**CodeDeployDemo-AS-Group** のエントリを選択します。

1. **Instances** タブで、新しい Amazon EC2 インスタンスの ID を選択します。

1. [**Instances**] ページの、[**Description**] タブで、[**Public DNS**] 値をメモします。次のように表示されます。**ec2-01-234-567-890.compute-1.amazonaws.com**

インスタンスにデプロイされた `SimpleDemoApp` リビジョンを、次のような URL を使用して表示します。

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

成功のページが表示されると、CodeDeploy によってリビジョンが Auto Scaling グループのスケールアップされた Amazon EC2 インスタンスに正常にデプロイされています。

# ステップ 6: クリーンアップする
<a name="tutorials-auto-scaling-group-clean-up"></a>

このステップでは、このチュートリアルで使用したリソースの料金が継続的に発生するのを避けるために Auto Scaling グループを削除します。必要に応じて、Auto Scaling 設定、および CodeDeploy デプロイコンポーネントレコードを削除できます。

**Topics**
+ [リソース (CLI) をクリーンアップするには](#tutorials-auto-scaling-group-clean-up-cli)
+ [リソース (コンソール) をクリーンアップするには](#tutorials-auto-scaling-group-clean-up-console)

## リソース (CLI) をクリーンアップするには
<a name="tutorials-auto-scaling-group-clean-up-cli"></a>

1. **CodeDeployDemo-AS-Group** に対して **delete-auto-scaling-group** コマンドを呼び出すことによって、Auto Scaling グループを削除し ます。これにより、Amazon EC2 インスタンスも終了します。

   ```
   aws autoscaling delete-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --force-delete
   ```

1. 必要に応じて、**CodeDeployDemo-AS-Launch-Template** という名前の起動設定に対して、**delete-launch-template** のコマンドを呼び出し、Auto Scaling 起動テンプレートを削除します。

   ```
   aws ec2 delete-launch-template --launch-template-name CodeDeployDemo-AS-Launch-Template
   ```

1. 必要に応じて、**delete-application** という名前のアプリケーションに対して、**SimpleDemoApp** のコマンドを呼び出し、CodeDeploy からのアプリケーションを削除します。これにより、関連するすべてのデプロイ、デプロイグループ、およびリビジョンレコードも削除されます。

   ```
   aws deploy delete-application --application-name SimpleDemoApp
   ```

1. Systems Manager ステートマネージャーの関連付けを削除するには、**delete-association** のコマンドを呼び出します。

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   **describe-association** のコマンドを呼び出すことで、*association-id* を取得できます。

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

## リソース (コンソール) をクリーンアップするには
<a name="tutorials-auto-scaling-group-clean-up-console"></a>

Amazon EC2 インスタンスを終了する Auto Scaling グループを削除するには

1. 

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

1. Amazon EC2 ナビゲーションペインで、**Auto Scaling** の下で、**Auto Scaling Groups** を選択してから、**CodeDeployDemo-AS-Group** のエントリを選択します。

1. [**Actions**] を選択して、[**Delete**] を選択し、次に [**Yes, Delete**] を選択します。

(オプション) 起動テンプレートを削除するには

1.  ナビゲーションバーで、**Auto Scaling** の下で、**Launch Configurations** を選択し、**CodeDeployDemo-AS-Launch-Template** を選択します。

1. [**Actions**] を選択して、[**Delete launch configuration**] を選択し、[**Yes, Delete**] を選択します。

1. 必要に応じて、CodeDeploy からアプリケーションを削除します。これにより、関連するすべてのデプロイ、デプロイグループ、およびリビジョンレコードも削除されます。[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で、CodeDeploy コンソールを開きます。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

   ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

   

1. アプリケーションのリストで、**SimpleDemoApp** を選択します。

1. [**Application details**] ページで、[**Delete application**] を選択します。

1. 確認を求めるメッセージが表示されたら、**Delete**と入力し、[**削除**] を選択してください。

Systems Manager ステートマネージャーの関連付けの削除。

1. https://console.aws.amazon.com/systems-manager で AWS Systems Manager コンソールを開きます。

1. ナビゲーションペインで、[**ステートマネージャー**] を選択してください。

1. 作成した関連付けを選択し、[**削除**] を選択します。

# チュートリアル: CodeDeploy を使用して、GitHub からアプリケーションをデプロイします。
<a name="tutorials-github"></a>

このチュートリアルでは、CodeDeploy を使用して GitHub からサンプルアプリケーションリビジョンを、Amazon Linux を実行している単一の Amazon EC2 インスタンス、単一の Red Hat Enterprise Linux (RHEL) インスタンス、または単一の Windows サーバーインスタンスにデプロイします。GitHub と CodeDeploy の統合については、[GitHub と CodeDeploy との統合](integrations-partners-github.md) を参照してください。

**注記**  
CodeDeploy を使用して、アプリケーションリビジョンを GitHub から Ubuntu サーバーインスタンスにデプロイすることもできます。[ステップ 2: サンプルのアプリケーションリビジョンを作成する](tutorials-on-premises-instance-2-create-sample-revision.md) の [チュートリアル: CodeDeploy (Windows サーバー、Ubuntu サーバー、または Red Hat エンタープライズ Linux) を使用してオンプレミスインスタンスにアプリケーションをデプロイします。](tutorials-on-premises-instance.md) の中に記述されているサンプルリビジョンを使用するか、Ubuntu サーバーインスタンスおよび CodeDeploy と互換性があるリビジョンを作成できます。独自のリビジョンを作成するには、[CodeDeploy のリビジョンを計画する](application-revisions-plan.md) と [CodeDeploy 用のアプリケーション仕様ファイルをリビジョンに追加](application-revisions-appspec-file.md) を参照してください。

**Topics**
+ [前提条件](tutorials-github-prerequisites.md)
+ [ステップ 1: GitHub アカウントを設定します。](tutorials-github-create-github-account.md)
+ [ステップ 2: GitHub リポジトリを作成します。](tutorials-github-create-github-repository.md)
+ [ステップ 3: GitHub リポジトリにサンプルアプリケーションをアップロードします。](tutorials-github-upload-sample-revision.md)
+ [ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md)
+ [ステップ 5: アプリケーションおよびデプロイグループを作成します。](tutorials-github-create-application.md)
+ [ステップ 6: アプリケーションをインスタンスにデプロイします。](tutorials-github-deploy-application.md)
+ [ステップ 7: デプロイをモニタリングおよび確認します。](tutorials-github-verify.md)
+ [ステップ 8: クリーンアップする](tutorials-github-clean-up.md)

# 前提条件
<a name="tutorials-github-prerequisites"></a>

このチュートリアルを開始する前に、以下を実行します。
+ ローカルマシンで Git をインストールします。Git をインストールするには、[Git downloads](http://git-scm.com/downloads) を参照してください。
+  AWS CLIのインストールと設定を含む、「[CodeDeploy の開始方法](getting-started-codedeploy.md)」の手順を完了します。これは、 を使用して GitHub からインスタンス AWS CLI にリビジョンをデプロイする場合に特に重要です。

# ステップ 1: GitHub アカウントを設定します。
<a name="tutorials-github-create-github-account"></a>

リビジョンが保存される GitHub リポジトリを作成するには、GitHub アカウントが必要です。すでに GitHub アカウントをお持ちの場合は、[ステップ 2: GitHub リポジトリを作成します。](tutorials-github-create-github-repository.md) に進んでください。

1. [https://github.com/join](https://github.com) にアクセスします。

1. ユーザー名、E メールアドレス、パスワードを入力します。

1. [**Sign up for GitHub**] を選択し、指示に従います。

# ステップ 2: GitHub リポジトリを作成します。
<a name="tutorials-github-create-github-repository"></a>

リビジョンを保存するには、GitHub リポジトリが必要です。

すでに GitHub リポジトリがある場合は、このチュートリアル全体で **CodeDeployGitHubDemo** の名前を必ず置き換えて、「[ステップ 3: GitHub リポジトリにサンプルアプリケーションをアップロードします。](tutorials-github-upload-sample-revision.md)」に進んでください。

1. [GitHub home page](https://github.com/dashboard) で、次のいずれかの操作を実行します。
   + [**Your repositories**] で、[**New repository**] を選択します。
   + ナビゲーションバーで、[**Create new** (**\$1**)] を選択し、[**New repository**] を選択します。

1. [**Create a new repository**] ページで、次の操作を実行します。
   + [**リポジトリ名**] ボックスに「**CodeDeployGitHubDemo**」と入力します。
   + [**Public**] を選択します。
**注記**  
デフォルトの [**Public**] オプションを選択すると、誰でもこのリポジトリを表示できます。[**プライベート**] オプションを選択して、リポジトリを表示してコミットできるユーザーを制限できます。
   + [**Initialize this repository with a README**] チェックボックスをオフにします。代わりに、次のステップでは、`README.md` ファイルを手動で作成します。
   + [**Create repository (リポジトリの作成)**] を選択します。

1. ローカルマシンタイプ別の手順に従い、コマンドラインを使用してリポジトリを作成します。
**注記**  
GitHub で 2 要素認証を有効にした場合、パスワードの入力を求められたら、GitHub のログインパスワードの代わりに必ず個人アクセストークンを入力するようにしてください。詳細については、[Providing your 2FA authentication code](https://help.github.com/articles/providing-your-2fa-authentication-code/) を参照してください。

**ローカル Linux、macOS、Unix マシンについて**

1. ターミナルから、次のコマンドを一度に 1 つずつ実行します。*user-name* は GitHub のユーザー名です。

   ```
   mkdir /tmp/CodeDeployGitHubDemo
   ```

   ```
   cd /tmp/CodeDeployGitHubDemo
   ```

   ```
   touch README.md
   ```

   ```
   git init
   ```

   ```
   git add README.md
   ```

   ```
   git commit -m "My first commit"
   ```

   ```
   git remote add origin https://github.com/user-name/CodeDeployGitHubDemo.git
   ```

   ```
   git push -u origin master
   ```

1. ターミナルを `/tmp/CodeDeployGitHubDemo` の場所で開いたままにします。

**ローカル Windows マシンの場合**

1. 管理者として実行するコマンドプロンプトから、次のコマンドを一度に 1 つずつ実行します。

   ```
   mkdir c:\temp\CodeDeployGitHubDemo
   ```

   ```
   cd c:\temp\CodeDeployGitHubDemo
   ```

   ```
   notepad README.md
   ```

1. Notepad に `README.md` ファイルを保存します。Notepad を閉じます。次のコマンドを一度に 1 つずつ実行します。*user-name* は GitHub のユーザー名です。

   ```
   git init
   ```

   ```
   git add README.md
   ```

   ```
   git commit -m "My first commit"
   ```

   ```
   git remote add origin https://github.com/user-name/CodeDeployGitHubDemo.git
   ```

   ```
   git push -u origin master
   ```

1. コマンドプロンプトを `c:\temp\CodeDeployGitHubDemo` の場所で開いたままにします。

# ステップ 3: GitHub リポジトリにサンプルアプリケーションをアップロードします。
<a name="tutorials-github-upload-sample-revision"></a>

このステップでは、パブリックの Amazon S3 バケットから GitHub リポジトリにサンプルリビジョンをコピーします。(分かりやすいように、このチュートリアルに用意してあるサンプルリビジョンは単一のウェブページです。)

**注記**  
サンプルリビジョンの代わりに自身のリビジョンの 1 つを使用する場合は、以下が必要です。  
[CodeDeploy のリビジョンを計画する](application-revisions-plan.md) と [CodeDeploy 用のアプリケーション仕様ファイルをリビジョンに追加](application-revisions-appspec-file.md) のガイドラインに従う。
対応するインスタンスタイプを使用する。
GitHub のダッシュボードからアクセス可能である。
リビジョンがこれらの要件を満たしている場合は、「[ステップ 5: アプリケーションおよびデプロイグループを作成します。](tutorials-github-create-application.md)」に進んでください。  
Ubuntu インスタンスにデプロイする場合は、Ubuntu サーバーインスタンスおよび CodeDeploy と互換性があるリビジョンを GitHub リポジトリにアップロードする必要があります。詳細については、「[CodeDeploy のリビジョンを計画する](application-revisions-plan.md)」および「[CodeDeploy 用のアプリケーション仕様ファイルをリビジョンに追加](application-revisions-appspec-file.md)」を参照してください。

**Topics**
+ [ローカル Linux、macOS、あるいは Unix マシンからサンプルリビジョンをプッシュします](#tutorials-github-upload-sample-revision-unixes)
+ [ローカル Windows マシンからサンプルリビジョンをプッシュする](#tutorials-github-upload-sample-revision-windows)

## ローカル Linux、macOS、あるいは Unix マシンからサンプルリビジョンをプッシュします
<a name="tutorials-github-upload-sample-revision-unixes"></a>

ターミナルを `/tmp/CodeDeployGitHubDemo` などの場所で開いたままにして、以下のコマンドを一度に 1 つずつ実行します。

**注記**  
デプロイ先を Windows １サーバーインスタンスにする場合は、コマンドで `SampleApp_Windows.zip` の代わりに `SampleApp_Linux.zip` を使用します。

```
(Amazon S3 copy command)
```

```
unzip SampleApp_Linux.zip
```

```
rm SampleApp_Linux.zip
```

 

```
git add .
```

```
git commit -m "Added sample app"
```

```
git push
```

*(Amazon S3 copy command)* は次のいずれかです。
+ `aws s3 cp s3://aws-codedeploy-us-east-2/samples/latest/SampleApp_Linux.zip . --region us-east-2` (米国東部 (オハイオ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Linux.zip . --region us-east-1` (米国東部 (バージニア北部) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-west-1/samples/latest/SampleApp_Linux.zip . --region us-west-1` (米国西部 (北カリフォルニア) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-west-2/samples/latest/SampleApp_Linux.zip . --region us-west-2` (米国西部 (オレゴン) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ca-central-1/samples/latest/SampleApp_Linux.zip . --region ca-central-1` (カナダ (中部) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-eu-west-1/samples/latest/SampleApp_Linux.zip . --region eu-west-1` (欧州 (アイルランド) リージョンの場合) 
+ `aws s3 cp s3://aws-codedeploy-eu-west-2/samples/latest/SampleApp_Linux.zip . --region eu-west-2` (欧州 (ロンドン) リージョンの場合) 
+ `aws s3 cp s3://aws-codedeploy-eu-west-3/samples/latest/SampleApp_Linux.zip . --region eu-west-3` (欧州 (パリ) リージョンの場合) 
+ `aws s3 cp s3://aws-codedeploy-eu-central-1/samples/latest/SampleApp_Linux.zip . --region eu-central-1` (欧州（フランクフルト）リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-il-central-1/samples/latest/SampleApp_Linux.zip . --region il-central-1` (イスラエル (テルアビブ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-east-1/samples/latest/SampleApp_Linux.zip . --region ap-east-1` (アジアパシフィック (香港) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Linux.zip . --region ap-northeast-1` (アジアパシフィック (東京) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-2/samples/latest/SampleApp_Linux.zip . --region ap-northeast-2` (アジアパシフィック (ソウル) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-1/samples/latest/SampleApp_Linux.zip . --region ap-southeast-1` (アジアパシフィック (シンガポール) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-2/samples/latest/SampleApp_Linux.zip . --region ap-southeast-2` (アジアパシフィック (シドニー) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-4/samples/latest/SampleApp_Linux.zip . --region ap-southeast-4` (アジアパシフィック (メルボルン) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-south-1/samples/latest/SampleApp_Linux.zip . --region ap-south-1` (アジアパシフィック (ムンバイ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-sa-east-1/samples/latest/SampleApp_Linux.zip . --region sa-east-1` (南米 (サンパウロ) リージョンの場合)

## ローカル Windows マシンからサンプルリビジョンをプッシュする
<a name="tutorials-github-upload-sample-revision-windows"></a>

 コマンドプロンプトを `c:\temp\CodeDeployGitHubDemo` などの場所で開いたままにして、以下のコマンドを一度に 1 つずつ実行します。

**注記**  
デプロイ先を Amazon Linux または RHEL インスタンスにデプロイする予定がある場合は、コマンドで `SampleApp_Linux.zip` の代わりに `SampleApp_Windows.zip` を使用します。

```
(Amazon S3 copy command)
```

`the` ZIP ファイルの内容の解凍先を、新しいサブディレクトリではなく、直接ローカルディレクトリ (`c:\temp\CodeDeployGitHubDemo` など) にします。

```
git add .
```

```
git commit -m "Added sample app"
```

```
git push
```

*(Amazon S3 copy command)* は次のいずれかです。
+ `aws s3 cp s3://aws-codedeploy-us-east-2/samples/latest/SampleApp_Windows.zip . --region us-east-2` (米国東部 (オハイオ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Windows.zip . --region us-east-1` (米国東部 (バージニア北部) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-west-1/samples/latest/SampleApp_Windows.zip . --region us-west-1` (米国西部 (北カリフォルニア) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-us-west-2/samples/latest/SampleApp_Windows.zip . --region us-west-2` (米国西部 (オレゴン) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ca-central-1/samples/latest/SampleApp_Windows.zip . --region ca-central-1` (カナダ (中部) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-eu-west-1/samples/latest/SampleApp_Windows.zip . --region eu-west-1` (欧州 (アイルランド) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-eu-west-2/samples/latest/SampleApp_Windows.zip . --region eu-west-2` (欧州 (ロンドン) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-eu-west-3/samples/latest/SampleApp_Windows.zip . --region eu-west-3` (欧州 (パリ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-eu-central-1/samples/latest/SampleApp_Windows.zip . --region eu-central-1` (欧州（フランクフルト）リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-il-central-1/samples/latest/SampleApp_Windows.zip . --region il-central-1` (イスラエル (テルアビブ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-east-1/samples/latest/SampleApp_Windows.zip . --region ap-east-1` (アジアパシフィック (香港) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Windows.zip . --region ap-northeast-1` (アジアパシフィック (東京) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-2/samples/latest/SampleApp_Windows.zip . --region ap-northeast-2` (アジアパシフィック (ソウル) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-1/samples/latest/SampleApp_Windows.zip . --region ap-southeast-1` (アジアパシフィック (シンガポール) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-2/samples/latest/SampleApp_Windows.zip . --region ap-southeast-2` (アジアパシフィック (シドニー) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-4/samples/latest/SampleApp_Windows.zip . --region ap-southeast-4` (アジアパシフィック (メルボルン) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-ap-south-1/samples/latest/SampleApp_Windows.zip . --region ap-south-1` (アジアパシフィック (ムンバイ) リージョンの場合)
+ `aws s3 cp s3://aws-codedeploy-sa-east-1/samples/latest/SampleApp_Windows.zip . --region sa-east-1` (南米 (サンパウロ) リージョンの場合)

独自のリビジョンを Ubuntu サーバーインスタンスにプッシュするには、リビジョンをローカルリポジトリにコピーしてから、次のコマンドを呼び出します。

```
git add .
git commit -m "Added Ubuntu app"
git push
```

# ステップ 4: インスタンスをプロビジョニングします。
<a name="tutorials-github-provision-instance"></a>

このステップでは、サンプルアプリケーションのデプロイ先であるインスタンスを作成または設定します。CodeDeploy でサポートされているオペレーティングシステムのいずれかを実行している Amazon EC2 インスタンスまたはオンプレミスインスタンスにデプロイできます。詳細については、[CodeDeploy エージェントで対応するオペレーティングシステム](codedeploy-agent.md#codedeploy-agent-supported-operating-systems) を参照してください。(CodeDeploy デプロイで使用するインスタンスが設定済みである場合は、次のステップまでスキップします。)

**インスタンスをプロビジョニングするには**

1. [Amazon EC2 インスタンス (コンソール) を起動します。](instances-ec2-create.md#instances-ec2-create-console) の指示に従って、インスタンスをプロビジョニングします。

1. インスタンスを起動するときは、**タグの追加** ページで必ずタグを指定してください。タグを指定する方法の詳細については、[Amazon EC2 インスタンス (コンソール) を起動します。](instances-ec2-create.md#instances-ec2-create-console) を参照してください。

**CodeDeploy エージェントがインスタンスで実行されていることを確認するには、**
+ [CodeDeploy エージェントが実行されていることの確認](codedeploy-agent-operations-verify.md) の指示に従って、エージェントが実行されていることを確認します。

インスタンスを正常にプロビジョンし、CodeDeploy エージェントが実行されていることを確認したら、次のステップに進みます。

# ステップ 5: アプリケーションおよびデプロイグループを作成します。
<a name="tutorials-github-create-application"></a>

このステップでは、CodeDeploy コンソールまたは AWS CLI を使用して、GitHub リポジトリからサンプルリビジョンをデプロイするために使用するアプリケーションとデプロイグループを作成します。



## アプリケーションおよびデプロイグループの作成 (コンソール)
<a name="tutorials-github-create-application-console"></a>

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで **Deploy** を展開し、**Applications** を選択します。

   

1. [**アプリケーションの作成**]、[**カスタムアプリケーション**] の順に選択します。

1. [**アプリケーション名**] に、「**CodeDeployGitHubDemo-App**」と入力します。

1. [**コンピューティングプラットフォーム**] で [**EC2/オンプレミス**] を選択します。

1. [**アプリケーションを作成**] を選択します。

1. [**デプロイグループ**] タブで、[**デプロイグループの作成**] を選択します。

1. **[Deployment group name]** (デプロイグループ名) に「**CodeDeployGitHubDemo-DepGrp**」と入力します。

1. **Service role** で、[CodeDeploy のサービスロールを作成](getting-started-create-service-role.md) で作成した CodeDeploy サービスロールの名前を選択します。

1. [**デプロイタイプ**] で、[**インプレース**] を選択します。

1. **Environment configuration** で、使用するインスタンスのタイプに応じて、**Amazon EC2 instances** あるいは **On-premises instances** を選択します。[**キー**] と [**値**] に、[ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md) の一部としてインスタンスに適用されたインスタンスタグのキーと値を入力します。

1. [**デプロイ設定**] で [**CodeDeployDefault.AllatOnce**] を選択します。

1. [**ロードバランサー**] で、[**Enable load balancing (ロードバランシングの有効化)**] をオフにします。

1. [**Advanced**] を展開します。

1. [**アラーム**] で [**アラーム設定を無視する**] を選択します。

1. [**デプロイグループの作成**] を選択し、次のステップに進みます。

## アプリケーションおよびデプロイグループの作成 (CLI)
<a name="tutorials-github-create-application-cli"></a>

1. **create-application** のコマンドを呼び出して、CodeDeploy で `CodeDeployGitHubDemo-App` と言う名前のアプリケーションを作成します。

   ```
   aws deploy create-application --application-name CodeDeployGitHubDemo-App
   ```

1. **create-deployment-group** コマンドを呼び出して `CodeDeployGitHubDemo-DepGrp` と言う名前のデプロイグループを作成します。
   + Amazon EC2 インスタンスにデプロイする場合、*ec2-tag-key* は、[ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md) の一部として Amazon EC2 インスタンスに適用した Amazon EC2 インスタンスのタグキーです。
   + Amazon EC2 インスタンスにデプロイする場合、*ec2-tag-value* は、[ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md) の一部として Amazon EC2 インスタンスに適用した Amazon EC2 インスタンスのタグ値です。
   + オンプレミスインスタンスにデプロイする場合、*on-premises-tag-key* は、「[ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md)」の一部としてオンプレミスインスタンスに適用したオンプレミスインスタンスのタグキーです。
   + オンプレミスインスタンスにデプロイする場合、*on-premises-tag-value* は、「[ステップ 4: インスタンスをプロビジョニングします。](tutorials-github-provision-instance.md)」の一部としてオンプレミスインスタンスに適用したオンプレミスインスタンスのタグ値です。
   + *service-role-arn* は、[CodeDeploy のサービスロールを作成](getting-started-create-service-role.md) で作成したサービスロールのサービスロール ARN です。([サービスロール ARN の取得 (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli) の手順に従って、サービスロール ARN を見つけます)。

   ```
   aws deploy create-deployment-group --application-name CodeDeployGitHubDemo-App --ec2-tag-filters Key=ec2-tag-key,Type=KEY_AND_VALUE,Value=ec2-tag-value --on-premises-tag-filters Key=on-premises-tag-key,Type=KEY_AND_VALUE,Value=on-premises-tag-value --deployment-group-name CodeDeployGitHubDemo-DepGrp --service-role-arn service-role-arn
   ```
**注記**  
[create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) コマンドは、デプロイおよびインスタンス内の指定されたイベントについて、トピックサブスクライバーに Amazon SNS 通知を送信するトリガーの作成をサポートします。このコマンドは、Amazon CloudWatch アラームのモニタリングしきい値が満たされたときにデプロイを自動的にロールバックし、デプロイを停止するアラームを設定するオプションもサポートします。このチュートリアルでは、これらのアクションコマンドは含まれていません。

# ステップ 6: アプリケーションをインスタンスにデプロイします。
<a name="tutorials-github-deploy-application"></a>

このステップでは、CodeDeploy コンソールまたは AWS CLI を使用して、GitHub リポジトリからインスタンスにサンプルリビジョンをデプロイします。



## リビジョンをデプロイするには (コンソール)
<a name="tutorials-github-deploy-application-console"></a>

1. [**デプロイグループの詳細**] ページで、[**デプロイの作成**] を選択します。

1. [**デプロイグループ**] で [**`CodeDeployGitHubDemo-DepGrp`**] を選択します。

1. [**リビジョンタイプ**] で [**GitHub**] を選択します。

1. [**Connect to GitHub**] で、次のいずれかを実行します。
   + GitHub アカウントに対する CodeDeploy アプリケーションの接続を作成するには、ウェブブラウザの別のタブで GitHub からサインアウトします。[**GitHub アカウント**] に、この接続を識別する名前を入力し、[**GitHub に接続**] を選択します。`CodeDeployGitHubDemo-App` という名前のアプリケーションを GitHub で操作することを CodeDeploy に許可するよう求めるメッセージがウェブページに表示されます。ステップ 5 に進みます。
   + 作成済みの接続を使用するには、その名前を [**GitHub account**] で選択してから [**Connect to GitHub**] を選択します。ステップ 7 に進みます。
   + 別の GitHub アカウントへの接続を作成するには、ウェブブラウザの別のタブで GitHub からサインアウトします。[**Connect to a different GitHub account**] を選択し、[**Connect to GitHub**] を選択します。ステップ 5 に進みます。

1. [**Sign in**] ページの手順に従って、GitHub アカウントにサインインします。

1. [**Authorize application**] ページで、[**Authorize application**] を選択します。

1. CodeDeploy の **Create deployment** ページ上で、**Repository name** に、サインインに使用した GitHub のユーザー名に続いてスラッシュ (`/`)、アプリケーションリビジョンをプッシュしたリポジトリの名前 (例えば ***my-github-user-name*/CodeDeployGitHubDemo** など) を順に入力します。

   入力する値が不確実な場合、または異なるリポジトリを指定する場合:

   1. ウェブブラウザの別のタブで、[GitHub dashboard](https://github.com/dashboard) にアクセスします。

   1. [**Your repositories**] で、ターゲットリポジトリの名前の上にマウスを置きます。GitHub ユーザーまたは組織の名前、スラッシュ (`/`)、リポジトリの名前の順序でツールヒントが表示されます。この値を [**Repository name (リポジトリ名)**] に入力します。
**注記**  
[**Your repositories (自分のリポジトリ)**] にターゲットリポジトリの名前が表示されない場合は、[**Search GitHub (GitHub の検索)**] ボックスを使用して、ターゲットリポジトリと GitHub ユーザーまたは組織の名前を検索します。

1. [**Commit ID (コミット ID)**] ボックスに、アプリケーションリビジョンの GitHub へのプッシュに関連付けられているコミットの ID を入力します。

   入力する値が不確実な場合:

   1. ウェブブラウザの別のタブで、[GitHub dashboard](https://github.com/dashboard) にアクセスします。

   1. **Your repositories** で、**CodeDeployGitHubDemo** を選択します。

   1. コミットのリストで、アプリケーションリビジョンの GitHub へのプッシュに関連付けられているコミット ID を検索してコピーします。通常、この ID は 40 文字で、文字と数字の両方で構成されます (コミット ID の短いバージョンを使用しないでください。通常は、長いバージョンの最初の 10 文字です)。

   1. [**Commit ID**] ボックスにコミット ID を貼り付けます。

1. [**Deploy**] を選択して、次のステップに進みます。

## リビジョンをデプロイするには (CLI)
<a name="tutorials-github-deploy-application-cli"></a>

GitHub とやり取りする AWS CLI コマンド (次に呼び出す **create-deployment** コマンドなど) を呼び出す前に、GitHub ユーザーアカウントを使用して`CodeDeployGitHubDemo-App`アプリケーションの GitHub とやり取りするアクセス許可を CodeDeploy に付与する必要があります。現在、この操作を行うには、CodeDeploy コンソールを使用する必要があります。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで **Deploy** を展開し、**Applications** を選択します。

   

1. **CodeDeployGitHubDemo-App** を選択します。

1. [**デプロイ**] タブで、[**デプロイの作成**] を選択します。
**注記**  
新しいデプロイは作成されません。これは現在、GitHub ユーザーアカウントに代わって GitHub を操作するための権限を CodeDeploy に付与する唯一の方法です。

1. **CodeDeployGitHubDemo-App** から、**CodeDeployGitHubDemo-DepGrp** を選択します。

1. [**リビジョンタイプ**] で [**GitHub**] を選択します。

1. [**Connect to GitHub**] で、次のいずれかを実行します。
   + GitHub アカウントに対する CodeDeploy アプリケーションの接続を作成するには、ウェブブラウザの別のタブで GitHub からサインアウトします。[**GitHub account**] に、この接続を識別する名前を入力し、[**Connect to GitHub**] を選択します。`CodeDeployGitHubDemo-App` という名前のアプリケーションの GitHub を操作することを CodeDeployに許可するよう求めるメッセージがウェブページに表示されます。ステップ 8 に進みます。
   + 作成済みの接続を使用するには、その名前を [**GitHub account**] で選択してから [**Connect to GitHub**] を選択します。ステップ 10 に進みます。
   + 別の GitHub アカウントへの接続を作成するには、ウェブブラウザの別のタブで GitHub からサインアウトします。[**Connect to a different GitHub account**] を選択し、[**Connect to GitHub**] を選択します。ステップ 8 に進みます。

1. [**Sign in**] ページの手順に従って、GitHub のユーザー名、または E メールとパスワードでサインインします。

1. [**Authorize application**] ページで、[**Authorize application**] を選択します。

1. CodeDeploy の **Create deployment** ページで 、**Cancel** を選択します。

1. **create-deployment** コマンドを呼び出して、リビジョンを GitHub リポジトリからインスタンスにデプロイします。
   + *repository* は、GitHub アカウント名です。スラッシュ (`/`)、リポジトリの名前が後に続きます (`CodeDeployGitHubDemo`)。例: `MyGitHubUserName/CodeDeployGitHubDemo`。

     使用する値が不確実な場合、または異なるリポジトリを指定する場合:

     1. ウェブブラウザの別のタブで、[GitHub dashboard](https://github.com/dashboard) にアクセスします。

     1. [**Your repositories**] で、ターゲットリポジトリの名前の上にマウスを置きます。GitHub ユーザーまたは組織の名前、スラッシュ (`/`)、リポジトリの名前の順序でツールヒントが表示されます。これが使用する値です。
**注記**  
[**Your repositories**] にターゲットリポジトリの名前が表示されない場合、[**Search GitHub**] ボックスを使用して、ターゲットリポジトリと、対応する GitHub ユーザーまたは組織の名前を検索します。
   + *commit-id* は、リポジトリにプッシュしたアプリケーションリビジョンのバージョンに関連付けられているコミットです (例: `f835159a...528eb76f`)。

     使用する値が不確実な場合:

     1. ウェブブラウザの別のタブで、[GitHub dashboard](https://github.com/dashboard) にアクセスします。

     1. **Your repositories** で、**CodeDeployGitHubDemo** を選択します。

     1. コミットのリストで、アプリケーションリビジョンの GitHub へのプッシュに関連付けられているコミット ID を検索します。通常、この ID は 40 文字で、文字と数字の両方で構成されます (コミット ID の短いバージョンを使用しないでください。通常は、長いバージョンの最初の 10 文字です)。この値を使用します。

   ローカル Linux、macOS、あるいは Unix マシンを使用している場合

   ```
   aws deploy create-deployment \
     --application-name CodeDeployGitHubDemo-App \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name CodeDeployGitHubDemo-DepGrp \
     --description "My GitHub deployment demo" \
     --github-location repository=repository,commitId=commit-id
   ```

   ローカル Windows マシンを使用している場合

   ```
   aws deploy create-deployment --application-name CodeDeployGitHubDemo-App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name CodeDeployGitHubDemo-DepGrp --description "My GitHub deployment demo" --github-location repository=repository,commitId=commit-id
   ```

# ステップ 7: デプロイをモニタリングおよび確認します。
<a name="tutorials-github-verify"></a>

このステップでは、CodeDeploy コンソールまたは AWS CLI を使用してデプロイの成功を確認します。作成または設定したインスタンスにデプロイしたウェブページを表示するには、ウェブブラウザを使用します。

**注記**  
Ubuntu インスタンスにデプロイする場合、独自のテスト戦略を使用して、デプロイされたリビジョンがインスタンスで予期したとおりに機能するかどうかを確認し、次のステップに進みます。

**デプロイをモニタリングおよび確認するには (コンソール)**

1. ナビゲーションペインで **Deploy** を展開し、**Deployments** を選択します。

   

1. デプロイのリストで、**CodeDeployGitHubDemo-App** の **Application** の値、および **CodeDeployGitHubDemo-DepGrp** の **CodeDeployGitHubDemo-DepGrp** の値が [-DepGrp] である行を探します。**Succeeded** または **Failed** が、**[Status]** 列に表示されない場合は、定期的に **[Refresh]** ボタンを選択します。

1. **Status** の列に **Failed** が表示される場合は、[インスタンスの詳細の表示 (コンソール)](instances-view-details.md#instances-view-details-console) の指示に従って、デプロイのトラブルシューティングを行います。

1. **Status** 列で **Succeeded** が表示される場合は、ウェブブラウザを通してデプロイを確認できます。このサンプルリビジョンでは、インスタンスに単一のウェブページをデプロイします。Amazon EC2 インスタンスにデプロイする場合は、ウェブブラウザで、インスタンスの `http://public-dns` にアクセスします (例えば、`http://ec2-01-234-567-890.compute-1.amazonaws.com` など)。

1. ウェブページを表示できれば成功です。 AWS CodeDeploy を使用して GitHub からリビジョンが正しくデプロイされました。これで、「[ステップ 8: クリーンアップする](tutorials-github-clean-up.md)」に進むことができます。

**デプロイをモニタリングおよび確認するには (CLI)**

1. **list-deployments** コマンドを呼び出して、`CodeDeployGitHubDemo-App` という名前のアプリケーションと `CodeDeployGitHubDemo-DepGrp` という名前のデプロイグループのデプロイ ID を取得します。

   ```
   aws deploy list-deployments --application-name CodeDeployGitHubDemo-App --deployment-group-name CodeDeployGitHubDemo-DepGrp --query "deployments" --output text
   ```

1. **get-deployment** コマンドを呼び出して、**list-deployments** コマンドからの出力にデプロイメントの ID を指定します。

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.[status, creator]" --output text
   ```

1. [**Failed**] が返されたら、[インスタンスの詳細の表示 (コンソール)](instances-view-details.md#instances-view-details-console) の指示に従って、デプロイのトラブルシューティングを行います。

1. [**Succeeded**] が返されたら、ウェブブラウザでデプロイを確認できます。このサンプルリビジョンは、インスタンスにデプロイされた単一のウェブページです。Amazon EC2 インスタンスにデプロイする場合は、Amazon EC2 インスタンスのための `http://public-dns` にアクセスすることで、このページをウェブブラウザで表示できます (たとえば、`http://ec2-01-234-567-890.compute-1.amazonaws.com` など)。

1. ウェブページを表示できれば成功です。 AWS CodeDeploy を使用して GitHub リポジトリから正常にデプロイされました。

# ステップ 8: クリーンアップする
<a name="tutorials-github-clean-up"></a>

このチュートリアルの間に使用したリソースに対する追加料金を防ぐため、Amazon EC2 インスタンスと関連リソースを終了する必要があります。必要に応じて、このチュートリアルに関連付けられている CodeDeploy デプロイコンポーネントレコードを削除できます。このチュートリアル専用に GitHub リポジトリを使用した場合は、今すぐ削除することもできます。

## CloudFormation スタックを削除するには ( CloudFormation テンプレートを使用して Amazon EC2 インスタンスを作成した場合)
<a name="tutorials-github-clean-up-cloudformation-template"></a>

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

1. [**スタック**] 列で、`CodeDeploySampleStack` で始まるスタックを選択します。

1. **[削除]** を選択します。

1. プロンプトが表示されたら、**[スタックの削除]** を選択します。Amazon EC2 インスタンスおよび関連する IAM インスタンスプロファイルとサービスロールが削除されます。

## 手動で登録を解除およびオンプレミスインスタンスをクリーンアップするには (オンプレミスインスタンスをプロビジョニングした場合)
<a name="tutorials-github-clean-up-on-premises-instance"></a>

1. を使用して AWS CLI 、ここで *your-instance-name* で表されるオンプレミスインスタンスと、your-region で関連付けられたリージョンに対して[登録解除](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html)コマンドを呼び出します。 **

   ```
   aws deploy deregister --instance-name your-instance-name --no-delete-iam-user --region your-region
   ```

1. オンプレミスインスタンスから、[uninstall](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html) コマンドを呼び出します:

   ```
   aws deploy uninstall
   ```

## Amazon EC2 インスタンスを手動で終了するには (手動で Amazon EC2 インスタンスを起動した場合)
<a name="tutorials-github-clean-up-ec2-instance"></a>

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

1. ナビゲーションペインの **[Instances]** (インスタンス) で、**[Instances]** (インスタンス) を選択します。

1. 終了した Amazon EC2 インスタンスの横にあるボックスを選択します。[**Actions**] メニューで [**Instance State**] をポイントし、[**Terminate**] を選択します。

1. プロンプトが表示されたら、[**Yes, Terminate**] を選択します。

## CodeDeploy デプロイコンポーネントレコードを削除するには
<a name="tutorials-github-clean-up-codedeploy-records"></a>

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) で CodeDeploy コンソールを開きます。
**注記**  
「[CodeDeploy の開始方法](getting-started-codedeploy.md)」で設定したのと同じユーザーでサインインします。

1. ナビゲーションペインで **Deploy** を展開し、**Applications** を選択します。

   

1. **CodeDeployGitHubDemo-App** を選択します。

1. [**アプリケーションを削除**] を選択します。

1. 確認を求めるメッセージが表示されたら、**Delete**と入力し、[**削除**] を選択してください。

## GitHub リポジトリを削除するには
<a name="tutorials-github-clean-up-github-repository"></a>

[GitHub help](https://help.github.com) の [Deleting a repository](https://help.github.com/articles/deleting-a-repository/) を参照してください。

# チュートリアル: Amazon ECS へアプリケーションをデプロイする
<a name="tutorial-ecs-deployment"></a>

 このチュートリアルでは、CodeDeploy を使用して アプリケーションを Amazon ECS にデプロイする方法について学びます。すでに作成し、Amazon ECS にデプロイ済みのアプリケーションによって開始します。最初のステップは、タスク定義ファイルを新しいタグで変更してアプリケーションを更新することです。次に、CodeDeploy を使用して、更新をデプロイします。デプロイ中に、CodeDeploy は新しい置き換えタスクセットに更新をインストールします。そして、本稼働トラフィックは、元のタスクセットにある Amazon ECS アプリケーションの元のバージョンから、置き換えタスクセットの更新されたバージョンに移行します。

 Amazon ECS デプロイ中、CodeDeploy は 2 つのターゲットグループと 1 つの本稼働トラフィックリスナーで構成されたロードバランサーを使用します。次の図表は、デプロイが始まるの前に、ロードバランサー、本稼働、リスナー、ターゲットグループ、および Amazon ECS アプリケーションがどのように関連しているかを示しています。このチュートリアルでは、Application Load Balancer を使用します。Network Load Balancer を使用することもできます。

![\[Application Load Balancer またはNetwork Load Balancer、1 つの本稼働リスナー、2 つのターゲットグループ、1 つのタスクセット、および 1 つの Amazon ECS サービス。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-1.png)


 デプロイが成功すると、本稼働トラフィックリスナーは新しい置き換えタスクセットにトラフィックを提供し、元のタスクセットは終了します。次の図は、デプロイが成功した後にリソースがどのように関連しているかを示しています。詳細については、「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。

![\[Application Load Balancer または Network Load Balancer、1 つの本稼働リスナー、2 つのターゲットグループ、および 1 つの置換タスクセット。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-5.png)


を使用してアプリケーションを Amazon ECS に AWS CLI デプロイする方法については、[「チュートリアル: Blue/Green デプロイを使用したサービス](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html)の作成」を参照してください。CodePipeline を使用して、CodeDeploy を用いての Amazon ECS サービスへの deploy の変更を検出し、自動的にデプロイする方法については、[チュートリアル: Create a pipeline with an Amazon ECR source and ECS-to-CodeDeploy deployment](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html) を参照してください。

このチュートリアルを完了したら、作成した CodeDeploy アプリケーションとデプロイグループを使用して、[チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-deployment-with-hooks.md) 中にデプロイ検証テストを追加できます。

**Topics**
+ [前提条件](tutorial-ecs-prereqs.md)
+ [ステップ 1: Amazon ECS アプリケーションを更新する](tutorial-ecs-update-the-ecs-application.md)
+ [ステップ 2: AppSpec ファイルを作成します。](tutorial-ecs-create-appspec-file.md)
+ [ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする](tutorial-ecs-deployment-deploy.md)
+ [ステップ 4: クリーンアップする](tutorial-ecs-clean-up.md)

# 前提条件
<a name="tutorial-ecs-prereqs"></a>

このチュートリアルを完了するには、まず以下を行う必要があります。
+  「[CodeDeploy の開始方法](getting-started-codedeploy.md)」のステップ 2 と 3 を完了します。
+  2 つのターゲットグループと 1 つのリスナーを用いて設定した Application Load Balancer を作成します。コンソールを使用してロードバランサーを作成する方法については、「[CodeDeploy Amazon ECS デプロイ用のロードバランサー、ターゲットグループ、リスナーをセットアップする](deployment-groups-create-load-balancer-for-ecs.md)」を参照してください。を使用してロードバランサーを作成する方法については AWS CLI、*「Amazon Elastic Container Service ユーザーガイド*」の[「ステップ 1: Application Load Balancer を作成する](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html#create-blue-green-loadbalancer)」を参照してください。ロードバランサーを作成するときは、このチュートリアルで以下の点に注意してください。
  +  ロードバランサーの名前。
  +  ターゲットグループの名前。
  +  ロードバランサーのリスナーが使用するポート。
+  Amazon ECS クラスターとサービスを作成します。さらなる詳細については、ステップ 2、3、および *Amazon Elastic Container サービスユーザーガイド* の [チュートリアル: Creating a service using a blue/green deployment](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html) の ステップ 4 を参照してください。このチュートリアルでは、以下の点に注意してください。
  +  Amazon ECS クラスターの名前。
  +  Amazon ECS サービスによって使用されるタスク定義の ARN 
  +  Amazon ECS サービスによって使用されるコンテナの名前 
+  AppSpec ファイル用の Amazon S3 バケットを作成します。

# ステップ 1: Amazon ECS アプリケーションを更新する
<a name="tutorial-ecs-update-the-ecs-application"></a>

 このセクションでは、タスク定義の新しいリビジョンで Amazon ECS アプリケーションを更新します。更新されたリビジョンは、新しいキーとタグのペアを追加します。[ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする](tutorial-ecs-deployment-deploy.md) では、Amazon ECS アプリケーションの更新バージョンをデプロイします。

**タスク定義を更新するには**

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

1.  ナビゲーションペインで、**[タスク定義]** を選択します。

1. Amazon ECS サービスによって使用されるタスク定義を選択します。

1. タスク定義リビジョンを選択し、**[新しいリビジョンを作成]**、**[新しいリビジョンを作成]** を選択します。

1.  このチュートリアルでは、タグを追加してタスク定義を少し更新します。ページの下部にある [**タグ**] で、新しいキーと値のペアを入力して新しいタグを作成します。

1.  **[作成]** を選択します。

   タスク定義のリビジョン番号が 1 つずつ増加します。

1.  **JSON** タブを選択します。この情報は次のステップで必要なため、以下の点に注意してください。
   +  `taskDefinitionArn` の値。形式は `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision` です。これは、更新されたタスク定義の ARN です。
   +  `containerDefinitions` 要素の、`name` の値。これはコンテナの名前です。
   +  `portMappings` 要素の、`containerPort` の値。これはコンテナのポートです。

# ステップ 2: AppSpec ファイルを作成します。
<a name="tutorial-ecs-create-appspec-file"></a>

 このセクションでは、AppSpec ファイルを作成し、[前提条件](tutorial-ecs-prereqs.md) のセクションで作成した Amazon S3 バケットにアップロードします。Amazon ECS デプロイのための AppSpec ファイル は、タスク定義、コンテナ名、およびコンテナポートを指定します。詳細については、「[Amazon ECS デプロイの AppSpec ファイルの例](reference-appspec-file-example.md#appspec-file-example-ecs)」および「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」を参照してください。

**AppSpec ファイルを作成するには**

1.  [YAML] を使用して AppSpec ファイルを作成したい場合は、`appspec.yml` という名前のファイルを作成します。JSON を使用して AppSpec ファイルを作成したい場合は、`appspec.json` という名前のファイルを作成します。

1.  AppSpec ファイルのために YAML または JSON を使用するかどうかに応じて、適切なタブを選択し、そのコンテンツを、先ほど作成した AppSpec ファイルにコピーします。`TaskDefinition` プロパティには、「[ステップ 1: Amazon ECS アプリケーションを更新する](tutorial-ecs-update-the-ecs-application.md)」セクションで書き留めたタスク定義 ARN を使用します。

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "your-container-name",
               "ContainerPort": your-container-port
             }
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "your-container-name"
             ContainerPort: your-container-port
   ```

------
**注記**  
 置き換えタスクセットは、元のタスクセットからサブネット、セキュリティグループ、プラットフォームバージョン、割り当てられたパブリック IP 値を継承します。AppSpec ファイル中でオプションのプロパティを設定することで、置き換えタスクセットのこれらの値を上書きできます。詳細については、「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」および「[Amazon ECS デプロイの AppSpec ファイルの例](reference-appspec-file-example.md#appspec-file-example-ecs)」を参照してください。

1.  このチュートリアルの前提条件として、作成済みの S3 バケットに AppSpec ファイルをアップロードします。

# ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする
<a name="tutorial-ecs-deployment-deploy"></a>

 このセクションでは、CodeDeploy アプリケーションとデプロイグループを作成して、更新されたアプリケーションを Amazon ECS にデプロイします。デプロイ中、CodeDeploy はアプリケーションの本稼働トラフィックを、新しい置き換えタスクセットの新しいバージョンに移行します。このステップを完了するには、以下の項目が必要です。
+  Amazon ECS クラスターの名前。
+  Amazon ECS サービスの名前。
+  Application Load Balancer の名前 
+  本稼働リスナーポート。
+  ターゲットグループ名。
+  作成した S3 バケットの名前。

**CodeDeploy でアプリケーションを作成するには**

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

1. [**アプリケーションを作成**] を選択します。

1. [**アプリケーション名**] に、「**ecs-demo-codedeploy-app**」と入力します。

1. [**コンピューティングプラットフォーム**] で [**Amazon ECS**] を選択します。

1. [**アプリケーションを作成**] を選択します。

**CodeDeploy デプロイ グループを作成するには**

1. アプリケーションのページの [**デプロイグループ**] タブで、[**デプロイグループの作成**] を選択します。

1. **[Deployment group name]** (デプロイグループ名) に「**ecs-demo-dg**」と入力します。

1. **サービスロール** で、CodeDeploy に Amazon ECS へのアクセスを許可するサービスロールを選択します。詳細については、「[の ID とアクセスの管理 AWS CodeDeploy](security-iam.md)」を参照してください。

1. **環境設定** で、Amazon ECS クラスターの名前とサービス名を選択します。

1. **Load balancers** から、Amazon ECSサービスにトラフィックを提供するロードバランサーの名前を選択します。

1. **Production listener port (本稼働リスナーポート)** から、Amazon ECSサービスへの本稼働トラフィックを提供するリスナーのポートとプロトコルを選択します（例: **HTTP: 80**）。このチュートリアルにはオプションのテストリスナーが含まれていないため、[**Test listener port (リスナーポートをテスト)**]からポートを選択しないでください。

1. [**Target group 1 name (ターゲットグループ 1 の名前)**] および [**Target group 2 name (ターゲットグループ 2 の名前)**] から、デプロイ時にトラフィックをルーティングする 2 つの異なるターゲットグループを選択します。これらが、ロードバランサー用に作成したターゲットグループであることを確認します。どちらがターゲットグループ 1 に使用され、どちらがターゲットグループ 2 に使用されるかは関係ありません。

1. [**Reroute traffic immediately (すぐにトラフィックを再ルーティングする)**]を選択します。

1. [**Original revision termination (元のリビジョンの終了)**] で、0 日、0 時間、5 分を選択します。これにより、デフォルトの（1 時間）を使用するよりも迅速にデプロイが完了したことがわかります。  
![\[CodeDeploy コンソールの環境設定セクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-demo-create-acd-dg.png)

1. **デプロイグループの作成** を選択します。

**Amazon ECS アプリケーションをデプロイするには**

1. デプロイグループのコンソールページで、[**デプロイの作成**] を選択します。

1.  [**デプロイグループ**] で、[**ecs-demo-dg**] を選択します。

1.  [**Revision type (リビジョンのタイプ)**] の横の [**My application is stored in Amazon S3 (Amazon S3 に保存されているアプリケーション)**] を選択します。[**リビジョンの場所**] に、S3 バケットの名前を入力します。

1.  [**リビジョンファイルタイプ**] で、必要に応じて[**.json**] または [**.yaml**] を選択します。

1.  (オプション)[**デプロイの説明**] に、デプロイの説明を入力します。

1. **[デプロイの作成]** を選択します。

1.  [**Deployment status　(デプロイのステータス)**] で、デプロイをモニタリングできます。本稼働トラフィックの 100% が置き換えタスクセットにルーティングされた後、5 分の待機時間が期限切れになる前に、[**Terminate original task set (元のタスクセットの終了)**] を選択して元のタスクセットをすぐに終了できます。[**Terminate original task set (元のタスクセットの終了)**] を選択しない場合、指定した 5 分の待機時間が経過すると元のタスクセットが終了します。  
![\[CodeDeploy コンソールのデプロイステータスセクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-without-test-listener.png)

# ステップ 4: クリーンアップする
<a name="tutorial-ecs-clean-up"></a>

 次のチュートリアル、[チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-deployment-with-hooks.md) で、このチュートリアルを基盤として構築し、作成した CodeDeploy アプリケーションとデプロイグループを使用します。そのチュートリアルのステップを実行する場合は、このステップをスキップし、作成したリソースを削除しないでください。

**注記**  
 AWS アカウントでは、作成した CodeDeploy リソースに対して料金は発生しません。

これらのステップのリソース名は、このチュートリアルで提案されている名前です（例えば、CodeDeploy アプリケーションの名前のための **ecs-demo-codedeploy-app** など）。別の名前を使用した場合は、クリーンアップ時にそれらを使用してください。

1. [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) コマンドを使用して、CodeDeploy デプロイグループを削除します。

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-codedeploy-app --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) コマンドを使用して、 CodeDeploy アプリケーションを削除します。

   ```
   aws deploy delete-application --application-name ecs-demo-codedeploy-app --region aws-region-id
   ```

# チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする
<a name="tutorial-ecs-deployment-with-hooks"></a>

 このチュートリアルでは、Lambda 関数を使用して、更新された Amazon ECS アプリケーションのデプロイの一部を検証する方法について学びます。このチュートリアルでは、CodeDeploy アプリケーション、CodeDeploy デプロイグループ、および [チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md) で使用した Amazon ECS アプリケーションを使用します。そのチュートリアルを完了してからこのチュートリアルを開始してください。

 検証テストを追加するには、最初に Lambda 関数でテストを実装します。次に、デプロイ AppSpec ファイルで、テストしたい ライフサイクルフックのために Lambda 関数を指定します。検証テストが失敗した場合、デプロイは停止し、ロールバックされて、失敗とマークされます。テストが成功すると、デプロイは次のデプロイライフサイクルイベントまたはフックに進みます。

 検証テストを使用した Amazon ECS デプロイ中、CodeDeploy は 2 つのターゲットグループ (1 つの本稼働トラフィックリスナーと 1 つのテストトラフィックリスナー) で構成されたロードバランサーを使用します。次の図表は、デプロイの前に、ロードバランサー、本稼働およびテストリスナー、ターゲットグループ、および Amazon ECS アプリケーションがどのように関連しているかを示しています。このチュートリアルでは、Application Load Balancer を使用します。Network Load Balancer を使用することもできます。

![\[Application Load Balancer または Network Load Balancer、リスナー、ターゲットグループ、タスクセット、Amazon ECS サービス間の接続。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


 Amazon ECS デプロイ中、テスト用の 5 つのライフサイクルフックがあります。このチュートリアルでは、3 番目のライフサイクルデプロイフック、`AfterAllowTestTraffic` 中に 1 つのテストを実装します。詳細については、「[Amazon ECS のデプロイ向けのライフサイクルイベントフックのリスト](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs)」を参照してください。デプロイが成功すると、本稼働トラフィックリスナーは新しい置き換えタスクセットにトラフィックを提供し、元のタスクセットは終了します。次の図は、デプロイが成功した後にリソースがどのように関連しているかを示しています。詳細については、「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。

![\[デプロイ後の Application Load Balancer または Network Load Balancer、リスナー、ターゲットグループ、置換タスクセット間の接続。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)


**注記**  
このチュートリアルを完了すると、 AWS アカウントに料金が発生する可能性があります。これには、CodeDeploy、 AWS Lambda、CloudWatch に対して発生する可能性のある料金が含まれます。さらなる詳細については、[AWS CodeDeploy の料金](https://aws.amazon.com/codedeploy/pricing/)、[AWS Lambda の料金](https://aws.amazon.com/lambda/pricing/)、および [Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing/) を参照してください。

**Topics**
+ [前提条件](tutorial-ecs-with-hooks-prereqs.md)
+ [ステップ 1: テストリスナーを作成する](tutorial-ecs-with-hooks-create-second-listener.md)
+ [ステップ 2: Amazon ECS アプリケーションを更新する](tutorial-ecs-with-hooks-update-the-ecs-application.md)
+ [ステップ 3: ライフサイクルフック Lambda 関数を作成する](tutorial-ecs-with-hooks-create-hooks.md)
+ [ステップ 4: AppSpec ファイルを更新する](tutorial-ecs-with-hooks-create-appspec-file.md)
+ [ステップ 5: CodeDeploy コンソールを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-with-hooks-deployment.md)
+ [ステップ 6: CloudWatch Logs で Lambda フック関数の出力を表示する](tutorial-ecs-with-hooks-view-cw-logs.md)
+ [ステップ 7: クリーンアップする](tutoria-ecs-with-hooks-clean-up.md)

# 前提条件
<a name="tutorial-ecs-with-hooks-prereqs"></a>

このチュートリアルを正常に完了するには、まず以下を行う必要があります。
+  [前提条件](tutorial-ecs-prereqs.md) にある [チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md) の前提条件を完了します。
+  「[チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md)」のステップを完了します。以下を書き留めます。
  +  ロードバランサーの名前。
  +  ターゲットグループの名前。
  +  ロードバランサーのリスナーが使用するポート。
  +  ロードバランサーの ARN。これを使用して新しいリスナーを作成します。
  +  いずれかのターゲットグループの ARN。これを使用して新しいリスナーを作成します。
  +  作成する CodeDeploy アプリケーションとデプロイグループ。
  +  CodeDeploy デプロイで使用されることによって作成する AppSpec ファイル このチュートリアルでは、このファイルを編集します。

# ステップ 1: テストリスナーを作成する
<a name="tutorial-ecs-with-hooks-create-second-listener"></a>

 検証テストを使用する Amazon ECS デプロイには、2 番目のリスナーが必要です。このリスナーは、置き換えタスクセット中の更新された Amazon ECS アプリケーションにテストトラフィックを提供するために使用されます。検証テストは、テストトラフィックに対して実行されます。

 テストトラフィックのリスナーは、いずれのターゲットグループも使用できます。[create-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html) AWS CLI コマンドを使用して、テストトラフィックをポート 8080 に転送するデフォルトルールを持つ 2 番目のリスナーを作成します。ロードバランサーの ARN といずれかのターゲットグループの ARN を使用します。

```
aws elbv2 create-listener --load-balancer-arn your-load-balancer-arn \
--protocol HTTP --port 8080 \
--default-actions Type=forward,TargetGroupArn=your-target-group-arn --region your-aws-region
```

# ステップ 2: Amazon ECS アプリケーションを更新する
<a name="tutorial-ecs-with-hooks-update-the-ecs-application"></a>

 このセクションでは、タスク定義の新しいリビジョンを使用するために Amazon ECS アプリケーションを更新します。新しいリビジョンを作成し、タグを追加することでマイナー更新を追加します。

**タスク定義を更新するには**

1. Amazon ECS クラシックコンソール ([https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)) を開きます。

1.  ナビゲーションペインで、**[タスク定義]** を選択します。

1.  Amazon ECS サービスで使用されるタスク定義のチェックボックスを選択します。

1.  [**Create new revision (新しいリビジョンを作成)**] を選択します。

1.  タグを追加して、タスク定義を少し更新します。ページの下部にある [**タグ**] で、新しいキーと値のペアを入力して新しいタグを作成します。

1.  **[作成]** を選択します。タスク定義のリビジョン番号が 1 増えたことがわかります。

1.  **JSON** タブを選択します。[`taskDefinitionArn`] の値を書き留めておきます。形式は `arn:aws:ecs:aws-region: account-id:task-definition/task-definition-family: task-definition-revision` です。これは、更新されたタスク定義の ARN です。

# ステップ 3: ライフサイクルフック Lambda 関数を作成する
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

このセクションでは、Amazon ECS デプロイの `AfterAllowTestTraffic` のフック用に 1 つの Lambda 関数を実装します。Lambda 関数は、更新された Amazon ECS アプリケーションがインストールされる前に検証テストを実行します。このチュートリアルでは、Lambda 関数は `Succeeded` を返します。実際のデプロイ中、検証テストの結果に応じて、検証テストは `Succeeded` または `Failed` を返します。また、実際のデプロイ中に、他の Amazon ECS デプロイライフサイクルイベントフック (`BeforeInstall`、`AfterInstall`、`BeforeAllowTraffic`、および `AfterAllowTraffic`) に 1 つ以上の Lambda テスト関数を実装することもできます。詳細については、「[Amazon ECS のデプロイ向けのライフサイクルイベントフックのリスト](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs)」を参照してください。

 Lambda 関数を作成するには、IAM ロールが必要です。ロールは、CloudWatch Logs に書き込む Lambda 関数を許可し、CodeDeploy ライフサイクルフックのステータスを設定します。

**IAM ロールを作成するには**

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

1. ナビゲーションペインで **[ロール]** を選択し、**[ロールを作成]** を選択します。

1.  次のプロパティでロールを作成します。
   +  **信頼されたエンティティ**]: **AWS Lambda**。
   +  [**アクセス許可**]: [**AWSLambdaBasicExecutionRole**]。これにより、CloudWatch Logs に書き込むアクセス許可が Lambda 関数に付与されます。
   +  **ロール名**]: **`lambda-cli-hook-role`**。

   詳細については、[AWS Lambda 「実行ロールの作成](https://docs.aws.amazon.com/lambda/latest/dg/with-userapp.html#with-userapp-walkthrough-custom-events-create-iam-role)」を参照してください。

1.  作成したロールにアクセス許可 `codedeploy:PutLifecycleEventHookExecutionStatus` をアタッチします。これにより、デプロイ中に CodeDeploy ライフサイクルフックのステータスを設定する Lambda 関数の許可が付与されます。詳細については、*AWS Identity and Access Management ユーザーガイド* の [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)、および *CodeDeploy API Reference* の [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) を参照してください。

**`AfterAllowTestTraffic` のフック Lambda 関数を作成するには**

1.  次の内容で、`AfterAllowTestTraffic.js` という名前のファイルを作成します。

   ```
   'use strict';
    
    const AWS = require('aws-sdk');
    const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
    
    exports.handler = (event, context, callback) => {
    
    	console.log("Entering AfterAllowTestTraffic hook.");
    	
    	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
     var deploymentId = event.DeploymentId;
    	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
    	var validationTestResult = "Failed";
    	
    	// Perform AfterAllowTestTraffic validation tests here. Set the test result 
    	// to "Succeeded" for this tutorial.
    	console.log("This is where AfterAllowTestTraffic validation tests happen.")
    	validationTestResult = "Succeeded";
    	
    	// Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status
    	var params = {
    		deploymentId: deploymentId,
    		lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
    		status: validationTestResult // status can be 'Succeeded' or 'Failed'
    	};
    	
    	// Pass CodeDeploy the prepared validation test results.
    	codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
    		if (err) {
    			// Validation failed.
    			console.log('AfterAllowTestTraffic validation tests failed');
    			console.log(err, err.stack);
    			callback("CodeDeploy Status update failed");
    		} else {
    			// Validation succeeded.
    			console.log("AfterAllowTestTraffic validation tests succeeded");
    			callback(null, "AfterAllowTestTraffic validation tests succeeded");
    		}
    	});
    }
   ```

1.  Lambda デプロイパッケージを作成する 

   ```
   zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js 
   ```

1.  `create-function` のコマンドを使用して、`AfterAllowTestTraffic` のフックのために Lambda 関数を作成します。

   ```
   aws lambda create-function --function-name AfterAllowTestTraffic \
          --zip-file fileb://AfterAllowTestTraffic.zip \
          --handler AfterAllowTestTraffic.handler \
          --runtime nodejs10.x \
          --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
   ```

1.  `create-function` のレスポンスにある Lambda 関数の ARN を書き留めます。この ARN は、次のステップで CodeDeploy デプロイの AppSpec ファイルを更新するときに使用します。

# ステップ 4: AppSpec ファイルを更新する
<a name="tutorial-ecs-with-hooks-create-appspec-file"></a>

 このセクションでは、`Hooks` のセクションを使用して AppSpec ファイルを更新します。`Hooks` のセクションで、`AfterAllowTestTraffic` のライフサイクルフックのための Lambda 関数を指定します。

**AppSpec ファイルを更新するには**

1.  [ステップ 2: AppSpec ファイルを作成します。](tutorial-ecs-create-appspec-file.md) の [チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md) で作成した AppSpec ファイルファイルを開きます。

1.  `TaskDefinition` プロパティを、「[ステップ 2: Amazon ECS アプリケーションを更新する](tutorial-ecs-with-hooks-update-the-ecs-application.md)」でメモしたタスク定義 ARN で更新します。

1. コピーアンドペーストして、`Hooks` のセクションを AppSpec ファイルファイルに追加します。ARN を `AfterAllowTestTraffic` でメモした Lambda 関数の ARN を用いて [ステップ 3: ライフサイクルフック Lambda 関数を作成する](tutorial-ecs-with-hooks-create-hooks.md) の後の ARN を更新します。

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "sample-website",
               "ContainerPort": 80
             }
           }
         }
       }
     ],
     "Hooks": [
       {
         "AfterAllowTestTraffic": "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "sample-website"
             ContainerPort: 80
   Hooks:
     - AfterAllowTestTraffic: "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
   ```

------

1.  AppSpec ファイルを保存し、S3 バケットにアップロードします。

# ステップ 5: CodeDeploy コンソールを使用して Amazon ECS サービスをデプロイする
<a name="tutorial-ecs-with-hooks-deployment"></a>

 このセクションでは、テストリスナーのポートを指定して、デプロイグループを更新します。これは、「[ステップ 1: テストリスナーを作成する](tutorial-ecs-with-hooks-create-second-listener.md)」で作成したリスナーです。デプロイ中、CodeDeploy は、テストリスナーを使用して置き換えタスクセットに提供されるテストトラフィックを使用して、`AfterAllowTestTraffic` のデプロイライフサイクルフックの間に、検証テストを実行します。検証テストによって結果 `Succeeded` が返されるため、デプロイは次のデプロイライフサイクルイベントに進みます。実際のシナリオでは、テスト関数は `Succeeded` または `Failed` を返します。

**デプロイグループにテストリスナーを追加するには**

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

1. ナビゲーションペインで、[**アプリケーション**] を選択します。

1. 「[チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md)」で作成したアプリケーションを選択します。提案された名前を使用した場合は、[**ecs-demo-codedeploy-app**] です。

1. [**デプロイグループ**] で、先ほど [チュートリアル: Amazon ECS へアプリケーションをデプロイする](tutorial-ecs-deployment.md) で作成したデプロイグループを選択します。推奨された名前を使用した場合は [**ecs-demo-dg**] です。​

1.  **[編集]** を選択します。

1. [**Test listener port (テストリスナーポート)**] から、このチュートリアルで前に作成したテストリスナーのポートとプロトコルを選択します。これは [**HTTP:8080**] である必要があります。

1.  **[Save changes]** (変更の保存) をクリックします。

**Amazon ECS アプリケーションをデプロイするには**

1. デプロイグループのコンソールページで、[**デプロイの作成**] を選択します。

1.  [**デプロイグループ**] で、[**ecs-demo-dg**] を選択します。

1.  [**Revision type (リビジョンのタイプ)**] の場合は、[**My application is stored in Amazon S3 (Amazon S3 に保存されているアプリケーション)**] を選択します。**リビジョンの場所** に、S3 バケットの名前と AppSpec ファイル (例: **s3://my-s3-bucket/appspec.json**) を入力します。

1.  [**リビジョンファイルの種類**] で、必要に応じて [**.json**] または [**.yaml**] を選択します。

1.  (オプション)[**デプロイの説明**] に、デプロイの説明を入力します。

1. **[デプロイの作成]** を選択します。

 [**Deployment status　(デプロイのステータス)**] で、デプロイをモニタリングできます。本稼働トラフィックの 100% が置き換えタスクセットにルーティングされた後、[**Terminate original task set (元のタスクセットの終了)**] を選択して元のタスクセットをすぐに終了できます。[**Terminate original task set (元のタスクセットの終了)**] を選択しない場合、元のタスクセットはデプロイグループの作成時に指定した期間後に終了します。

![\[CodeDeploy コンソールのデプロイステータスセクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-with-test-listener.png)


# ステップ 6: CloudWatch Logs で Lambda フック関数の出力を表示する
<a name="tutorial-ecs-with-hooks-view-cw-logs"></a>

 CodeDeploy デプロイが成功すると、Lambda フック関数での検証テストも成功します。これを確認するには、CloudWatch Logs にあるフック関数のログを確認します。

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1.  ナビゲーションペインで、[**Logs (ログ)**] を選択します。AppSpec ファイル で指定した Lambda フック関数の新しいロググループが 1 つ表示されます。  
![\[CloudWatch コンソールの新しいロググループ。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-demo-cw-logs.png)

1.  新しいロググループを選択します。これは **/aws/lambda/AfterAllowTestTrafficHook** である必要があります。

1.  ログストリームを選択します。複数のログストリームが表示された場合は、[**最後のイベント時間**] で最新の日付と時刻のログストリームを選択します。

1.  ログストリームイベントを展開し、Lambda フック関数がログに成功メッセージを書き込んだことを確認します。以下は、 `AfterAllowTraffic` の Lambda フック関数が成功したことを示します。  
![\[AfterAllowTraffic フックを示すログストリームイベント。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-demo-cw-log-events.png)

# ステップ 7: クリーンアップする
<a name="tutoria-ecs-with-hooks-clean-up"></a>

 このチュートリアルが終了したら、使用していないリソースに対する料金が発生しないように、チュートリアルに関連付けられたリソースをクリーンアップします。このステップのリソース名は、このチュートリアルで提案されている名前です (例えば、CodeDeploy アプリケーションの名前のための **ecs-demo-codedeploy-app** など)。別の名前を使用した場合は、クリーンアップでそれらを使用してください。

**チュートリアルリソースをクリーンアップするには**

1. [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) コマンドを使用して、CodeDeploy デプロイグループを削除します。

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-deployment-group --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) コマンドを使用して、 CodeDeploy アプリケーションを削除します。

   ```
   aws deploy delete-application --application-name ecs-demo-deployment-group --region aws-region-id
   ```

1. [delete-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-function.html) コマンドを使用して、Lambda フック関数を削除します。

   ```
   aws lambda delete-function --function-name AfterAllowTestTraffic
   ```

1. [delete-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html) コマンドを使用して、CloudWatch log グループを削除します。

   ```
   aws logs delete-log-group --log-group-name /aws/lambda/AfterAllowTestTraffic
   ```

# チュートリアル: CodeDeploy と AWS サーバーレスアプリケーションモデルを使用して更新された Lambda 関数をデプロイする
<a name="tutorial-lambda-sam"></a>

AWS SAM は、サーバーレスアプリケーションを構築するためのオープンソースフレームワークです。 AWS SAM テンプレート内の YAML 構文を CloudFormation 構文に変換して拡張し、Lambda 関数などのサーバーレスアプリケーションを構築します。詳細については、[「 AWS サーバーレスアプリケーションモデルとは何ですか。」](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) を参照してください。

 このチュートリアルでは、SAM AWS を使用して、以下を実行するソリューションを作成します。
+  Lambda 関数を作成します。
+  CodeDeploy アプリケーションとデプロイグループを作成します。
+  CodeDeploy ライフサイクルフック中にデプロイの検証テストを実行する 2 つの Lambda 関数を作成します。
+  Lambda 関数がいつ更新されたかを検出します。Lambda 関数の更新により、CodeDeploy によるデプロイがトリガーされます。これにより、本稼働トラフィックが Lambda 関数の元のバージョンから更新されたバージョンに段階的に移行されます。

**注記**  
このチュートリアルでは、 AWS アカウントに課金される可能性のあるリソースを作成する必要があります。これには、CodeDeploy、Amazon CloudWatch、および に対して発生する可能性のある料金が含まれます AWS Lambda。詳細については、[CodeDeploy pricing](https://aws.amazon.com/codedeploy/pricing/)、[Amazon CloudWatch pricing](https://aws.amazon.com/cloudwatch/pricing/) および [AWS Lambda pricing](https://aws.amazon.com/lambda/pricing/) を参照してください。

**Topics**
+ [前提条件](tutorial-lambda-sam-prereqs.md)
+ [ステップ 1: インフラストラクチャをセットアップする](tutorial-lambda-sam-setup-infrastructure.md)
+ [ステップ 2: Lambda 関数を更新します](tutorial-lambda-sam-update-function.md)
+ [ステップ 3: 更新された Lambda 関数をデプロイします。](tutorial-lambda-sam-deploy-update.md)
+ [ステップ 4: デプロイの結果を表示する](tutorial-lambda-sam-deploy-view-results.md)
+ [ステップ 5：クリーンアップ](tutorial-lambda-clean-up.md)

# 前提条件
<a name="tutorial-lambda-sam-prereqs"></a>

このチュートリアルを完了するには、まず以下を行う必要があります。
+  「[CodeDeploy の開始方法](getting-started-codedeploy.md)」のステップを完了します。
+  CLI AWS Serverless Application Model をインストールします。詳細については、[「SAM AWS CLI のインストール](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)」を参照してください。
+  S3 バケットを作成します。 AWS SAM は、[AWS SAM テンプレート](https://docs.aws.amazon.com/en_us/codedeploy/latest/userguide/tutorial-lambda-sam-template.html)で参照されているアーティファクトをこのバケットにアップロードします。

# ステップ 1: インフラストラクチャをセットアップする
<a name="tutorial-lambda-sam-setup-infrastructure"></a>

 このトピックでは、 AWS SAM を使用して AWS SAM テンプレートと Lambda 関数のファイルを作成する方法について説明します。次に、 コマンド AWS SAM `package`と `deploy` コマンドを使用して、インフラストラクチャ内のコンポーネントを生成します。インフラストラクチャの準備ができたら、CodeDeploy アプリケーションとデプロイグループ、更新およびデプロイする Lambda 関数、Lambda 関数をデプロイするときに実行される検証テストを含む 2 つの Lambda 関数があります。完了したら、 CloudFormation を使用して Lambda コンソールまたは でコンポーネントを表示 AWS CLI し、Lambda 関数をテストできます。

**Topics**
+ [ファイルを作成する](tutorial-lambda-create-files.md)
+ [SAM AWS アプリケーションをパッケージ化する](tutorial-lambda-sam-package.md)
+ [SAM AWS アプリケーションをデプロイする](tutorial-lambda-sam-deploy.md)
+ [(オプション) インフラストラクチャの検査とテスト](tutorial-lambda-sam-confirm-components.md)

# ファイルを作成する
<a name="tutorial-lambda-create-files"></a>

 インフラストラクチャを作成するには、次のファイルを作成する必要があります。
+ `template.yml`
+ `myDateTimeFunction.js`
+ `beforeAllowTraffic.js`
+ `afterAllowTraffic.js`

**Topics**
+ [AWS SAM テンプレートを作成する](tutorial-lambda-sam-template.md)
+ [Lambda 関数のファイルを作成します](tutorial-lambda-sam-create-lambda-function.md)
+ [[BeforeAllowTraffic] Lambda 関数のファイルを作成する](tutorial-lambda-sam-create-lambda-before-traffic.md)
+ [[AfterAllowTraffic] Lambda 関数のファイルを作成する](tutorial-lambda-sam-create-lambda-after-traffic.md)

# AWS SAM テンプレートを作成する
<a name="tutorial-lambda-sam-template"></a>

インフラストラクチャ内のコンポーネントを指定する AWS SAM テンプレートファイルを作成します。

**AWS SAM テンプレートを作成するには**

1.  `SAM-Tutorial` という名前のディレクトリを作成します。

1.  `SAM-Tutorial` ディレクトリに `template.yml` という名前のファイルを作成します。

1.  次の YAML コードを `template.yml` にコピーします。これが使用する AWS SAM テンプレートです。

   ```
   AWSTemplateFormatVersion : '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: A sample SAM template for deploying Lambda functions.
   
   Resources:
   # Details about the myDateTimeFunction Lambda function
     myDateTimeFunction:
       Type: AWS::Serverless::Function
       Properties:
         Handler: myDateTimeFunction.handler
         Runtime: nodejs18.x
   # Instructs your myDateTimeFunction is published to an alias named "live".      
         AutoPublishAlias: live
   # Grants this function permission to call lambda:InvokeFunction
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: '*'
         DeploymentPreference:
   # Specifies the deployment configuration      
             Type: Linear10PercentEvery1Minute
   # Specifies Lambda functions for deployment lifecycle hooks
             Hooks:
               PreTraffic: !Ref beforeAllowTraffic
               PostTraffic: !Ref afterAllowTraffic
               
   # Specifies the BeforeAllowTraffic lifecycle hook Lambda function
     beforeAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: beforeAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call lambda:InvokeFunction        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_beforeAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
             
   # Specifies the AfterAllowTraffic lifecycle hook Lambda function
     afterAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: afterAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus         
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call lambda:InvokeFunction          
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_afterAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
   ```

このテンプレートは以下を指定します。詳細については、[AWS SAM template concepts (テンプレートの概念)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html) を参照してください。

**`myDateTimeFunction` と呼ばれるLambda 関数**  
 この Lambda 関数が発行されると、テンプレート中の `AutoPublishAlias` の行は、それを `live` という名前のエイリアスにリンクします。このチュートリアルの後半で、この関数の更新により、本番トラフィックを元のバージョンから更新されたバージョンに段階的に移行 AWS CodeDeploy する によるデプロイがトリガーされます。

**2 つの Lambda デプロイ検証関数**  
 次の Lambda 関数は、CodeDeploy ライフサイクルフック中に実行されます。関数には、更新された `myDateTimeFunction` のデプロイを検証するコードが含まれています。検証テストの結果は、`PutLifecycleEventHookExecutionStatus` のAPI メソッドを使用して CodeDeploy に渡されます。検証テストが失敗すると、デプロイは失敗し、ロールバックされます。  
+  `CodeDeployHook_beforeAllowTraffic` は、`BeforeAllowTraffic` フック中に実行します。
+  `CodeDeployHook_afterAllowTraffic` は、`AfterAllowTraffic` フック中に実行します。
両方の関数の名前は `CodeDeployHook_` で始まります。`CodeDeployRoleForLambda` のロールは、このプレフィックスで始まる名前の Lambda 関数でのみ、Lambda の `invoke` のメソッドへの呼び出しを許可します。詳細については、[AWS Lambda デプロイの AppSpec 'hooks' セクション](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda) および *CodeDeploy API Reference* 中の [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) を参照してください。

**更新された Lambda 関数の自動検出**  
 `AutoPublishAlias` 条件は、`myDateTimeFunction` 関数が変更されたときに検出し、`live` エイリアスを使用してデプロイするようにフレームワークに指示します。

**デプロイ設定**  
 デプロイ設定により、CodeDeploy アプリケーションが Lambda 関数の元のバージョンから新しいバージョンにトラフィックを移行するレートが決まります。このテンプレートは、事前定義されたデプロイ設定 `Linear10PercentEvery1Minute` を指定します。  
 AWS SAM テンプレートでカスタムデプロイ設定を指定することはできません。詳細については、「[CodeDeploy を使用してデプロイ設定を作成する](deployment-configurations-create.md)」を参照してください。

**デプロイライフサイクルフック関数**  
 `Hooks` セクションでは、ライフサイクルイベントフック中に実行する関数を指定します。`PreTraffic` は、`PostTraffic` フック中に実行する関数を指定します。`BeforeAllowTraffic` は、フック中に `AfterAllowTraffic` が実行する関数を指定します。

**Lambda が別の Lambda 関数を呼び出すための許可**  
 指定された`lambda:InvokeFunction`アクセス許可は、SAM AWS アプリケーションで使用されるロールに Lambda 関数を呼び出すアクセス許可を付与します。これは、`CodeDeployHook_beforeAllowTraffic` および `CodeDeployHook_afterAllowTraffic` の関数が、検証テスト中に、デプロイされた Lambda 関数を呼び出す場合に必要です。

# Lambda 関数のファイルを作成します
<a name="tutorial-lambda-sam-create-lambda-function"></a>

このチュートリアルの後半で更新してデプロイする関数のファイルを作成します。

**注記**  
 Lambda 関数は、 AWS Lambdaでサポートされている任意のランタイムを使用できます。詳細については、「[AWS Lambda ランタイム](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)」を参照してください。

**Lambda 関数を作成するには**

1.  テキストファイルを作成し、`myDateTimeFunction.js` という名前で `SAM-Tutorial` ディレクトリに保存します。

1.  次の Node.js コードを `myDateTimeFunction.js` にコピーします。

   

   ```
   'use strict';
       
       exports.handler = function(event, context, callback) {
       
         if (event.body) {
           event = JSON.parse(event.body);
         }
       
         var sc; // Status code
         var result = ""; // Response payload
       
         switch(event.option) {
           case "date": 
             switch(event.period) {
               case "yesterday":
                 result = setDateResult("yesterday");
                 sc = 200;
                 break;
               case "today":
                 result = setDateResult();
                 sc = 200;
                 break;
               case "tomorrow":
                 result = setDateResult("tomorrow");
                 sc = 200;
                 break;
               default:
                 result = {
                   "error": "Must specify 'yesterday', 'today', or 'tomorrow'."
                 };
                 sc = 400;
                 break;
             }
             break;
             
       /*      Later in this tutorial, you update this function by uncommenting 
               this section. The framework created by AWS SAM detects the update 
               and triggers a deployment by CodeDeploy. The deployment shifts 
               production traffic to the updated version of this function.
               
               case "time":
               var d = new Date();
               var h = d.getHours();
               var mi = d.getMinutes();
               var s = d.getSeconds();
       
               result = {
                 "hour": h,
                 "minute": mi,
                 "second": s
               };
               sc = 200;
               break;
       */
             default:
               result = {
                 "error": "Must specify 'date' or 'time'."
               };
               sc = 400;
             break;
         }
       
         const response = {
           statusCode: sc,
           headers: { "Content-type": "application/json" },
           body: JSON.stringify( result )
         };
       
         callback(null, response);
       
         function setDateResult(option) {
       
           var d = new Date(); // Today
           var mo; // Month
           var da; // Day
           var y; // Year
       
           switch(option) {
             case "yesterday":
               d.setDate(d.getDate() - 1);
               break;
             case "tomorrow":
               d.setDate(d.getDate() + 1);
             default:
              break;
           }
       
           mo = d.getMonth() + 1; // Months are zero offset (0-11)
           da = d.getDate();
           y = d.getFullYear();
       
           result = {
             "month": mo,
             "day": da,
             "year": y
           };
       
           return result;
         }
       };
   ```

Lambda 関数は、昨日、今日、または明日に対して年月日を返します。このチュートリアルの後半では、指定した日または時間に関する情報(年月日または現在の時、分、秒など)を返す関数を更新するコードをコメント解除します。によって作成されたフレームワークは、関数の更新バージョン AWS SAM を検出してデプロイします。

**注記**  
 この Lambda 関数は、 AWS Cloud9 チュートリアルでも使用されます。 はクラウドベースの統合開発環境 AWS Cloud9 です。でこの関数を作成、実行、更新、デバッグする方法については AWS Cloud9、[AWS Lambda 「」のチュートリアル AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/tutorial-lambda.html)を参照してください。

# [BeforeAllowTraffic] Lambda 関数のファイルを作成する
<a name="tutorial-lambda-sam-create-lambda-before-traffic"></a>

`beforeAllowTraffic` のフック Lambda 関数のファイルを作成します。

1.  テキストファイルを作成し、`beforeAllowTraffic.js` という名前で `SAM-Tutorial` ディレクトリに保存します。

1.  次の Node.js コードを `beforeAllowTraffic.js` にコピーします。この関数は、デプロイの `BeforeAllowTraffic` フック中に実行されます。

   ```
   'use strict';
       
       const AWS = require('aws-sdk'); 
       const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
       var lambda = new AWS.Lambda();
       
       exports.handler = (event, context, callback) => {
       
       	console.log("Entering PreTraffic Hook!");
       	
       	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
         var deploymentId = event.DeploymentId;
       	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
       
       	var functionToTest = process.env.NewVersion;
       	console.log("BeforeAllowTraffic hook tests started");
       	console.log("Testing new function version: " + functionToTest);
       
       	// Create parameters to pass to the updated Lambda function that
       	// include the newly added "time" option. If the function did not
       	// update, then the "time" option is invalid and function returns
       	// a statusCode of 400 indicating it failed.
       	var lambdaParams = {
       		FunctionName: functionToTest,    
       		Payload: "{\"option\": \"time\"}", 
       		InvocationType: "RequestResponse"
       	};
       
       	var lambdaResult = "Failed";
       	// Invoke the updated Lambda function.
       	lambda.invoke(lambdaParams, function(err, data) {
       		if (err){	// an error occurred
       			console.log(err, err.stack);
       			lambdaResult = "Failed";
       		}
       		else{	// successful response
       			var result = JSON.parse(data.Payload);
       			console.log("Result: " +  JSON.stringify(result));
             console.log("statusCode: " + result.statusCode);
             
             // Check if the status code returned by the updated
             // function is 400. If it is, then it failed. If 
             // is not, then it succeeded.
       			if (result.statusCode != "400"){
               console.log("Validation succeeded");
       				lambdaResult = "Succeeded";
             }
             else {
               console.log("Validation failed");
             }
       
       			// Complete the PreTraffic Hook by sending CodeDeploy the validation status
       			var params = {
       				deploymentId: deploymentId,
       				lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
       				status: lambdaResult // status can be 'Succeeded' or 'Failed'
       			};
       			
       			// Pass CodeDeploy the prepared validation test results.
       			codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
       				if (err) {
       					// Validation failed.
       					console.log("CodeDeploy Status update failed");
       					console.log(err, err.stack);
       					callback("CodeDeploy Status update failed");
       				} else {
       					// Validation succeeded.
       					console.log("CodeDeploy status updated successfully");
       					callback(null, "CodeDeploy status updated successfully");
       				}
       			});
       		}  
       	});
       }
   ```

# [AfterAllowTraffic] Lambda 関数のファイルを作成する
<a name="tutorial-lambda-sam-create-lambda-after-traffic"></a>

`afterAllowTraffic` のフック Lambda 関数のファイルを作成します。

1.  テキストファイルを作成し、`afterAllowTraffic.js` という名前で `SAM-Tutorial` ディレクトリに保存します。

1.  次の Node.js コードを `afterAllowTraffic.js` にコピーします。この関数は、デプロイの `AfterAllowTraffic` フック中に実行されます。

   ```
   'use strict';
       
       const AWS = require('aws-sdk');
       const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
       var lambda = new AWS.Lambda();
       
       exports.handler = (event, context, callback) => {
       
       	console.log("Entering PostTraffic Hook!");
       	
       	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
         var deploymentId = event.DeploymentId;
       	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
       
       	var functionToTest = process.env.NewVersion;
       	console.log("AfterAllowTraffic hook tests started");
       	console.log("Testing new function version: " + functionToTest);
       
       	// Create parameters to pass to the updated Lambda function that
       	// include the original "date" parameter. If the function did not 
       	// update as expected, then the "date" option might be invalid. If 
       	// the parameter is invalid, the function returns
       	// a statusCode of 400 indicating it failed.
       	var lambdaParams = {
       		FunctionName: functionToTest,    
       		Payload: "{\"option\": \"date\", \"period\": \"today\"}", 
       		InvocationType: "RequestResponse"
       	};
       
       	var lambdaResult = "Failed";
       	// Invoke the updated Lambda function.
       	lambda.invoke(lambdaParams, function(err, data) {
       		if (err){	// an error occurred
       			console.log(err, err.stack);
       			lambdaResult = "Failed";
       		}
       		else{	// successful response
       			var result = JSON.parse(data.Payload);
       			console.log("Result: " +  JSON.stringify(result));
             console.log("statusCode: " + result.statusCode);
             
             // Check if the status code returned by the updated
             // function is 400. If it is, then it failed. If 
             // is not, then it succeeded.
       			if (result.statusCode != "400"){
               console.log("Validation of time parameter succeeded");
       				lambdaResult = "Succeeded";
             }
             else {
               console.log("Validation failed");
             }
       
       			// Complete the PostTraffic Hook by sending CodeDeploy the validation status
       			var params = {
       				deploymentId: deploymentId,
       				lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
       				status: lambdaResult // status can be 'Succeeded' or 'Failed'
       			};
       			
       			// Pass CodeDeploy the prepared validation test results.
       			codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
       				if (err) {
       					// Validation failed.
       					console.log("CodeDeploy Status update failed");
       					console.log(err, err.stack);
       					callback("CodeDeploy Status update failed");
       				} else {
       					// Validation succeeded.
       					console.log("CodeDeploy status updated successfully");
       					callback(null, "CodeDeploy status updated successfully");
       				}
       			});
       		}  
       	});
       }
   ```

# SAM AWS アプリケーションをパッケージ化する
<a name="tutorial-lambda-sam-package"></a>

 これで、`SAM-Tutorial` ディレクトリに次の 4 つのファイルがあるはずです。
+ `beforeAllowTraffic.js`
+ `afterAllowTraffic.js`
+ `myDateTimeFunction.js`
+ `template.yml`

 これで、 AWS SAM **sam package** コマンドを使用して、Lambda 関数と CodeDeploy アプリケーションのアーティファクトを作成してパッケージ化する準備ができました。アーティファクトは S3 バケットにアップロードされます。コマンドの出力は、`package.yml` という新しいファイルです。このファイルは、次のステップで AWS SAM **sam deploy** コマンドによって使用されます。

**注記**  
 **sam package** のコマンドのさらなる詳細については、*AWS SAM デベロッパーガイド* の [AWS Serverless Application Model CLI command reference](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) を参照してください。

 `SAM-Tutorial` ディレクトリで、以下を実行します。

```
sam package \
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket amzn-s3-demo-bucket
```

`s3-bucket` のパラメータには、このチュートリアルの前提条件として作成した Amazon S3 バケットを指定します。は、 AWS SAM **sam deploy** コマンドで使用される新しいファイルの名前`output-template-file`を指定します。

# SAM AWS アプリケーションをデプロイする
<a name="tutorial-lambda-sam-deploy"></a>

 `package.yml` ファイルで AWS SAM **sam deploy** コマンドを使用して、 を使用して Lambda 関数と CodeDeploy アプリケーションおよびデプロイグループを作成します CloudFormation。

**注記**  
**sam deploy** のコマンドのさらなる詳細については、*AWS Serverless Application Model デベロッパーガイド* の [AWS SAM CLI command reference](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) を参照してください。

 `SAM-Tutorial` ディレクトリで、次のコマンドを実行します。

```
sam deploy \
  --template-file package.yml \
  --stack-name my-date-time-app \
  --capabilities CAPABILITY_IAM
```

 IAM ロールの作成を `--capabilities CAPABILITY_IAM` に許可するには、 CloudFormation のパラメータが必要です。

# (オプション) インフラストラクチャの検査とテスト
<a name="tutorial-lambda-sam-confirm-components"></a>

 このトピックでは、インフラストラクチャコンポーネントを表示し、Lambda 関数をテストする方法を示します。

**`sam deploy` の実行後にスタックの結果を表示するには**

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

1.  ナビゲーションペインで、[**Stacks**] を選択します。`my-date-time-app` スタックが上部に表示されます。

1.  [**イベント**] タブを選択して、完了したイベントを確認します。スタックの作成の進行中に、イベントを表示できます。スタックの作成が完了すると、すべてのスタック作成イベントを表示できます。

1.  スタックを選択した状態で、[**リソース**] を選択します。**タイプ** 列に、Lambda関数、`myDateTimeFunction` 、`CodeDeployHook_beforeAllowTraffic` および `CodeDeployHook_afterAllowTraffic` が表示されます。Lambda 関数の **Physical ID** の各列には、Lambda コンソールで関数を表示するためのリンクが含まれています。
**注記**  
 `myDateTimeFunction` Lambda 関数の名前には CloudFormation スタックの名前が付加され、識別子が追加されているため、 のようになります`my-date-time-app-myDateTimeFunction-123456ABCDEF`。

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

1.  ナビゲーションペインで [**デプロイ**] を展開し、[**アプリケーション**] を選択します。

1.  で作成された新しい CodeDeploy アプリケーションは、 で始まる名前 CloudFormation で表示されます`my-date-time-app-ServerlessDeploymentApplication`。このアプリケーションを選択します。

1.  `my-date-time-app-myDateTimeFunctionDeploymentGroup` で始まる名前のデプロイグループが表示されます。このデプロイグループを選択します。

    [**デプロイ設定**] に、[**CodeDeployDefault.LambdaLinear10PercentEvery1Minute**] が表示されます。

**(オプション) 関数をテストするには (コンソール)**

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

1.  ナビゲーションペインで、`my-date-time-app-myDateTimeFunction` 関数を選択します。コンソールでは、名前に識別子が含まれているため、`my-date-time-app-myDateTimeFunction-123456ABCDEF` のようになります。

1.  **[テスト]** を選択します。

1.  [**イベント名**] にテストイベントの名前を入力します。

1.  テストイベントに以下を入力し、[**作成**] を選択します。

   ```
   {
     "option": "date",
     "period": "today"
   }
   ```

1.  **[テスト]** を選択します。テストイベントのリストには、テストイベントのみが表示されます。

    [**実行結果**] に [**成功**] と表示されます。

1.  [**実行結果**] で、[**詳細**] を展開して結果を表示します。現在の年月日が表示されます。

**(オプション) 関数をテストするには (AWS CLI)**

1.  Lambda 関数の ARN を配置します。関数を表示しているときに、Lambda コンソールの上部に表示されます。

1.  以下のコマンドを実行してください。[*your-function-arn*] を関数 ARN に置き換えます。

   ```
   aws lambda invoke \
   --function your-function-arn \
   --cli-binary-format raw-in-base64-out \
   --payload "{\"option\": \"date\", \"period\": \"today\"}" out.txt
   ```

1.  `out.txt` を開き、結果に現在の年月日が含まれていることを確認します。

# ステップ 2: Lambda 関数を更新します
<a name="tutorial-lambda-sam-update-function"></a>

 このトピックでは、`myDateTimeFunction.js` ファイルを更新します。次のステップでは、このファイルを使用して、更新された関数をデプロイします。これは、本稼働トラフィックを Lambda 関数の現在のバージョンから更新されたバージョンに移行することによってデプロイするために、CodeDeploy をトリガーします。

**Lambda 関数を更新するには**

1.  `myDateTimeFunction.js` を開きます。

1.  2 つのコメントマーカー(「`/*`」と「`*/`」)および `case` ブロック内の `time` という名前の `switch` の開始と終了にある説明テキストを削除します。

    コメントされていないコードを使用すると、新しいパラメータ `time` を関数に渡すことができます。`time` を更新された関数に渡すと、現在の `hour`、`minute`、および `second` が返されます。

1.  `myDateTimeFunction.js` を保存します。次のようになります。

   ```
   'use strict';
   
   exports.handler = function(event, context, callback) {
   
     if (event.body) {
       event = JSON.parse(event.body);
     }
   
     var sc; // Status code
     var result = ""; // Response payload
   
     switch(event.option) {
       case "date":
         switch(event.period) {
           case "yesterday":
             result = setDateResult("yesterday");
             sc = 200;
             break;
           case "today":
             result = setDateResult();
             sc = 200;
             break;
           case "tomorrow":
             result = setDateResult("tomorrow");
             sc = 200;
             break;
           default:
             result = {
               "error": "Must specify 'yesterday', 'today', or 'tomorrow'."
             };
             sc = 400;
             break;
         }
         break;
         case "time":
           var d = new Date();
           var h = d.getHours();
           var mi = d.getMinutes();
           var s = d.getSeconds();
   
           result = {
             "hour": h,
             "minute": mi,
             "second": s
           };
           sc = 200;
           break;
   
         default:
           result = {
             "error": "Must specify 'date' or 'time'."
           };
           sc = 400;
         break;
     }
   
     const response = {
       statusCode: sc,
       headers: { "Content-type": "application/json" },
       body: JSON.stringify( result )
     };
   
     callback(null, response);
   
     function setDateResult(option) {
   
       var d = new Date(); // Today
       var mo; // Month
       var da; // Day
       var y; // Year
   
       switch(option) {
         case "yesterday":
           d.setDate(d.getDate() - 1);
           break;
         case "tomorrow":
           d.setDate(d.getDate() + 1);
         default:
          break;
       }
   
       mo = d.getMonth() + 1; // Months are zero offset (0-11)
       da = d.getDate();
       y = d.getFullYear();
   
       result = {
         "month": mo,
         "day": da,
         "year": y
       };
   
       return result;
     }
   };
   ```

# ステップ 3: 更新された Lambda 関数をデプロイします。
<a name="tutorial-lambda-sam-deploy-update"></a>

 このステップでは、更新された `myDateTimeFunction.js` を使用して、Lambda 関数のデプロイを更新して開始します。CodeDeploy または AWS Lambda コンソールでデプロイの進行状況をモニタリングできます。

 AWS SAM テンプレートの `AutoPublishAlias: live`行により、インフラストラクチャは`live`エイリアスを使用する関数の更新を検出します。関数を更新すると、CodeDeploy によるデプロイがトリガーされます。これにより、本稼働トラフィックが関数の元のバージョンから更新されたバージョンに移行されます。

 **sam package** と **sam deploy** のコマンドは、Lambda 関数のデプロイを更新およびトリガーするために使用されます。これらのコマンドは、[SAM AWS アプリケーションをパッケージ化する](tutorial-lambda-sam-package.md) および [SAM AWS アプリケーションをデプロイする](tutorial-lambda-sam-deploy.md) で実行しました。

**更新された Lambda 関数をデプロイするには**

1.  `SAM-Tutorial` ディレクトリで、次のコマンドを実行します。

   ```
   sam package \
     --template-file template.yml \
     --output-template-file package.yml  \
     --s3-bucket amzn-s3-demo-bucket
   ```

    これにより、S3 バケットで更新された Lambda 関数を参照する新しいアーティファクトのセットが作成されます。

1.  `SAM-Tutorial` ディレクトリで、次のコマンドを実行します。

   ```
   sam deploy \
     --template-file package.yml \
     --stack-name my-date-time-app \
     --capabilities CAPABILITY_IAM
   ```

   スタック名はまだ であるため`my-date-time-app`、 はこれがスタックの更新である CloudFormation ことを認識します。更新されたスタックを表示するには、 CloudFormation コンソールを返し、ナビゲーションペインから **スタック**を選択します。

**(オプション)デプロイ中にトラフィックを表示するには(CodeDeploy コンソール)**

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

1.  ナビゲーションペインで、[**アプリケーション**] を展開し、[**my-date-time-app-ServerlessDeploymentApplication**] アプリケーションを選択します。

1.  [**デプロイグループ**] で、アプリケーションのデプロイグループを選択します。ステータスは [**進行中**]になります。

1.  [**Deployment group history (デプロイグループ履歴)**] で、進行中のデプロイを選択します。

   [**トラフィックの移行**] の進行状況バーと、このページの [**Original**] ボックスと **置換**] ボックスの割合に、進行状況が表示されます。  
![\[CodeDeploy コンソールのトラフィックシフトの進行状況セクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/lambda-tutorial-codedeploy-console-20-percent-deployed.png)

**(オプション) デプロイ中にトラフィックを表示するには(Lambda コンソール)**

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

1.  ナビゲーションペインで、`my-date-time-app-myDateTimeFunction` 関数を選択します。コンソールでは、名前に識別子が含まれているため、`my-date-time-app-myDateTimeFunction-123456ABCDEF` のようになります。

1.  **Aliases**、**live** の順に選択します。

元の関数バージョン(バージョン 1)と更新された関数バージョン(バージョン 2)の横の重みは、この AWS Lambda コンソールページがロードされた時点で各バージョンに提供されているトラフィック量を示します。ページでは、時間が経過しても重みは更新されません。ページを 1 分に 1 回更新すると、バージョン 1 の重みは 10% 減り、バージョン 2 の重みは 10% 増加します。

![\[CodeDeploy コンソールのエイリアスセクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/lambda-tutorial-lambda-console-20-percent-deployed.png)


# ステップ 4: デプロイの結果を表示する
<a name="tutorial-lambda-sam-deploy-view-results"></a>

このステップでは、デプロイの結果を表示します。デプロイが成功すると、更新された Lambda 関数が本稼働トラフィックを受信することを確認できます。デプロイが失敗した場合、CloudWatch Logs を使用して、デプロイのライフサイクルフックの間に実行される Lambda 関数の検証テストの出力を表示できます。

**Topics**
+ [デプロイされた関数をテストする](#tutorial-lambda-sam-deploy-test-deployed-function)
+ [CloudWatch Logs でのフックイベントを表示します。](#tutorial-lambda-view-hook-events)

## デプロイされた関数をテストする
<a name="tutorial-lambda-sam-deploy-test-deployed-function"></a>

 **sam deploy** のコマンドは、`my-date-time-app-myDateTimeFunction` のLambda 関数を更新します。関数のバージョンが 2 に更新され、`live` エイリアスに追加されます。

**Lambda コンソール中の更新を見るには**

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

1.  ナビゲーションペインで、`my-date-time-app-myDateTimeFunction` 関数を選択します。コンソールでは、名前に識別子が含まれているため、`my-date-time-app-myDateTimeFunction-123456ABCDEF` のようになります。

1.  [**Qualifiers (修飾子)**]、[**エイリアス**] の順に選択します。デプロイが完了した後(約 10 分)、`live` エイリアスに [**バージョン: 2**] と表示されます。  
![\[CodeDeploy コンソールのエイリアスセクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/lambda-tutorial-function-version.png)

1.  [**関数コード**] で、関数のソースコードを表示します。変更が表示されます。

1.  (オプション)[ステップ 2: Lambda 関数を更新します](tutorial-lambda-sam-update-function.md) のテスト手順を使用して、更新された関数をテストできます。次のペイロードを使用して新しいテストイベントを作成し、結果に現在の時、分、秒が含まれていることを確認します。

   ```
   {
       "option": "time"
     }
   ```

    を使用して更新された関数を AWS CLI テストするには、次のコマンドを実行し、 `out.txt`を開いて、結果に現在の時間、分、秒が含まれていることを確認します。

   ```
   aws lambda invoke --function your-function-arn --payload "{\"option\": \"time\"}" out.txt 
   ```
**注記**  
 デプロイが完了する前に を使用して関数を AWS CLI テストすると、予期しない結果が表示されることがあります。これは、CodeDeploy がトラフィックの 10% を毎分更新バージョンに段階的に移行するためです。デプロイ中、一部のトラフィックは引き続き元のバージョンを指すため、`aws lambda invoke` は元のバージョンを使用する場合があります。10 分後には、デプロイが完了し、すべてのトラフィックが関数の新しいバージョンを指し示します。

## CloudWatch Logs でのフックイベントを表示します。
<a name="tutorial-lambda-view-hook-events"></a>

 `BeforeAllowTraffic` のフック中に、CodeDeploy は `CodeDeployHook_beforeAllowTraffic` の Lambda 関数を実行します。`AfterAllowTraffic` のフック中に、CodeDeploy は `CodeDeployHook_afterAllowTraffic` の Lambda 関数を実行します。各関数は、新しい `time` パラメータを使用して関数の更新バージョンを呼び出す検証テストを実行します。Lambda 関数の更新が成功した場合、`time` のオプションによるエラーは発生せず、検証は成功します。関数が更新されなかった場合、認識されないパラメータによってエラーが発生し、検証が失敗します。これらの検証テストはデモンストレーションのみを目的としています。デプロイを検証するには独自のテストを記述します。CloudWatch Logs コンソールを使用して、検証テストを表示できます。

**CodeDeploy フックイベントを表示するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1.  ナビゲーションペインで、[**Logs (ログ)**] を選択します。

1.  ロググループのリストから、[**/aws/lambda/CodeDeployHook\$1beforeAllowTraffic**] または [**/aws/lambda/CodeDeployHook\$1afterAllowTraffic**] を選択します。

1.  ログストリームを選択します。1 つのみ表示されます。

1.  イベントを展開して詳細を表示します。  
![\[CodeDeployHook ロググループのログストリーム。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/lambda-tutorial-cloudwatch.png)

# ステップ 5：クリーンアップ
<a name="tutorial-lambda-clean-up"></a>

このチュートリアルで使用したリソースの追加料金を回避するには、 AWS SAM テンプレートによって作成されたリソースと、Lambda 検証関数によって作成された CloudWatch ログを削除します。

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

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

1. [**スタック**] 列で、`my-date-time-app` スタックを選択し、[**削除**] を選択します。

1. プロンプトが表示されたら、**[スタックの削除]** を選択します。Lambda 関数、CodeDeploy アプリケーションとデプロイグループ、および によって作成された IAM ロール AWS SAM は削除されます。

**CloudWatch Logs でログを削除するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1.  ナビゲーションペインで、[**Logs (ログ)**] を選択します。

1.  ロググループのリストから、[**/aws/lambda/CodeDeployHook\$1beforeAllowTraffic**] の横にあるボタンを選択します。

1.  [**アクション**] から、[**ロググループを削除する**] を選択し、次に [**はい、削除します**] を選択します。

1.  ロググループのリストから、[**/aws/lambda/CodeDeployHook\$1afterAllowTraffic**] の横にあるボタンを選択します。

1.  [**アクション**] から、[**ロググループを削除する**] を選択し、次に [**はい、削除します**] を選択します。