

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

# チュートリアル: CodePipeline を使用して Amazon EC2 インスタンスにデプロイする
<a name="tutorials-ec2-deploy"></a>

このチュートリアルは、Amazon EC2 で設定したインスタンスにコードをデプロイするデプロイアクションを CodePipeline で作成する方法について説明します。

**注記**  
コンソールでのパイプライン作成の一環として、CodePipeline は S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットが によって所有 AWS アカウント されており、安全で信頼できることを確認してください。

**注記**  
`EC2` デプロイアクションは V2 タイプのパイプラインでのみ使用できます。

## 前提条件
<a name="tutorials-ec2-deploy-prereqs"></a>

このチュートリアルで CD パイプラインを作成する前に、いつくかのリソースを用意する必要があります。使用を開始するために必要なものは以下のとおりです。

**注記**  
これらのリソースはすべて、同じ AWS リージョン内に作成する必要があります。
+ サンプル `script.sh` ファイルを追加するソースコントロールリポジトリ (このチュートリアルでは GitHub を使用します）。
+ このアクションのアクセス許可で更新された既存の CodePipeline サービスロールを使用する必要があります。サービスロールを更新するには、「[EC2 デプロイアクションのサービスロールポリシーのアクセス許可](action-reference-EC2Deploy.md#action-reference-EC2Deploy-permissions-action)」を参照してください。

これらの前提条件を満たした後、チュートリアルに進んで CD パイプラインを作成できます。

## ステップ 1: Amazon EC2 Linux インスタンスを作成する
<a name="tutorials-ec2-deploy-instances"></a>

このステップでは、サンプルアプリケーションをデプロイする Amazon EC2 インスタンスを作成します。このプロセスの一環として、リソースを作成するリージョンでインスタンスロールをまだ作成していない場合は、IAM でインスタンスロールを作成します。

**インスタンスロールを作成するには**

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

1. コンソールダッシュボードで [**ロール**] を選択します。

1. [**ロールの作成**] を選択してください。

1. [**信頼されたエンティティのタイプを選択**] で、[**AWS のサービス** ] を選択します。**[ユースケースの選択]** で、**[EC2]** を選択します。[**Select your use case (ユースケースを選択)**] で、[**EC2**] を選択します。[**次へ**] を選択します。

1. **`AmazonSSMManagedEC2InstanceDefaultPolicy`** という名前のマネージドポリシーを検索して選択します。

1. **`AmazonSSMManagedInstanceCore`** という名前のマネージドポリシーを検索して選択します。[**Next: Tags (次へ: タグ)**] を選択します。

1. **[次へ: レビュー]** を選択します。ロールの名前を入力します (例: **EC2InstanceRole**)。
**注記**  
次のステップのロール名をメモしておきます。このロールは、インスタンスの作成時に選択します。
**注記**  
このロールにアクセス許可を追加して、パイプラインの作成後にパイプラインの S3 アーティファクトバケットへのアクセスを許可します。

   [**ロールの作成**] を選択してください。

**インスタンスを起動するには**

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

1. サイドナビゲーションから [**インスタンス**] を選択し、ページの上部から [**インスタンスの起動**] を選択します。

1. [**名前**] に「**MyInstances**」と入力します。これにより、インスタンスには**キー**が **Name** で、**値**が **MyInstances** というタグがが割り当てられます。

1. **アプリケーションイメージと OS イメージ (Amazon マシンイメージ)** で、 AWS ロゴが付いた **Amazon Linux** AMI オプションを見つけ、選択されていることを確認します。(この AMI は Amazon Linux 2 AMI (HVM) と表記され、「無料利用枠対象」と表示されています。)

1. [**インスタンスタイプ**] で、インスタンスのハードウェア構成として無料利用枠対象となる `t2.micro` タイプを選択します。

1. [**キーペア (ログイン)**] で、キーペアを選択するか作成します。

1. **[ネットワーク設定]** で、ステータスが **[有効]** であることを確認します。

1. **[Advanced Details]** (高度な詳細) を展開します。[**IAM インスタンスプロファイル**] で、前の手順で作成した IAM ロール (**EC2InstanceRole** など) を選択します。
**注記**  
インスタンスロールを空白のままにしないでください。デフォルトのロールが作成され、作成したロールが選択されなくなります。

1. **[概要]** の **[インスタンス数]** に `2` と入力します。

1. **[インスタンスを起動]** を選択します。

1. [**インスタンス**] ページで、起動のステータスを表示できます。インスタンスを起動すると、その初期状態は `pending` です。インスタンスを起動した後は、状態が `running` に変わり、パブリック DNS 名を受け取ります ([**パブリック DNS**] 列が表示されていない場合は、[**表示/非表示**] アイコンを選択してから、[**パブリック DNS**] を選択します)。

## ステップ 2: EC2 インスタンスロールにアーティファクトバケットのアクセス許可を追加する
<a name="tutorials-ec2-deploy-role-s3"></a>

パイプラインのアーティファクトバケットへのアクセスを許可するには、インスタンス用に作成した EC2 インスタンスロールを更新する必要があります。

**注記**  
インスタンスを作成する際は、既存の EC2 インスタンスロールを作成または使用します。`Access Denied` エラーを回避するには、インスタンスロールに S3 バケットアクセス許可を追加して、CodePipeline アーティファクトバケットにインスタンスアクセス許可を付与する必要があります。デフォルトのロールを作成するか、パイプラインのリージョンのアーティファクトバケットにスコープダウンされた `s3:GetObject` アクセス許可で既存のロールを更新します。

1. CodePipeline コンソールでパイプラインに移動します。**[設定]** を選択します。既存のパイプラインのアーティファクト保存場所の名前を確認します。アーティファクトバケットの Amazon リソースネーム (ARN) をメモしてコピーします。

1. IAM コンソールに移動し、[**ロール**] を選択します。このチュートリアルのステップ 1 で作成したインスタンスロールを選択します。

1. **[Permissions]** (アクセス許可) タブで **[Add inline policy]** (インラインポリシーの追加) を選択します。

1. 次の JSON をポリシードキュメントに追加し、`Resource` フィールドの値をバケット ARN に置き換えます。

   ```
   {
       "Effect": "Allow",
       "Principal": "*",
       "Action": "s3:GetObject",
       "Resource": "arn:aws:s3:::BucketName"
   }
   ```

1. **[更新]** を選択します。

## ステップ 3: リポジトリにスクリプトファイルを追加する
<a name="tutorials-ec2-deploy-file"></a>

このサンプルテキストを貼り付けて、デプロイのスクリプト後のステップ用の `script.sh` ファイルを作成します。

```
echo "Hello World!" 
```

**ソースリポジトリに `script.sh` ファイルを追加するには**

1. テキストエディタを開き、上記のファイルをコピーして新しいファイルに貼り付けます。

1. ソースリポジトリに `script.sh` ファイルをコミットし、プッシュします。

   1. ファイルを追加します。

      ```
      git add .
      ```

   1. 変更をコミットします。

      ```
      git commit -m "Adding script.sh."
      ```

   1. コミットをプッシュします。

      ```
      git push
      ```

   リポジトリ内のパスを書き留めます。

   ```
   /MyDemoRepo/test/script.sh
   ```

## ステップ 4: パイプラインを作成する
<a name="tutorials-ec2-deploy-pipeline"></a>

CodePipeline ウィザードを使用してパイプラインステージを作成し、ソースリポジトリを接続します。

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

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

1. [**ようこそ**] ページ、[**開始方法**] ページ、または [**パイプライン**] ページで、[**パイプラインの作成**] を選択します。

1. **[ステップ 1: 作成オプションを選択する]** ページの **[作成オプション]** で、**[カスタムパイプラインを構築する]** オプションを選択します。**[次へ]** を選択します。

1. **[ステップ 2: パイプラインの設定を選択する]** で、**[パイプライン名]** に「**MyPipeline**」と入力します。

1. CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「[パイプラインタイプ](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)」を参照してください。CodePipeline の料金については、[料金](https://aws.amazon.com/codepipeline/pricing/)を参照してください。

1. **[サービスロール]** で、**[既存サービスロールの使用]** を選択し、このアクションに必要なアクセス許可で更新された CodePipeline サービスロールを選択します。このアクション用に CodePipeline サービスロールを設定するには、「[EC2 デプロイアクションのサービスロールポリシーのアクセス許可](action-reference-EC2Deploy.md#action-reference-EC2Deploy-permissions-action)」を参照してください。

1. [**詳細設定**] をデフォルト設定のままにし、[**次へ**] を選択します。

1. **[ステップ 3: ソースステージの追加]** ページで、ソースステージを追加します。

   1. **[ソースプロバイダー]** で、**[GitHub (GitHub アプリ経由)]** を選択します。

   1. **接続** で、既存の接続を選択するか、新規の接続を作成します。GitHub ソースアクション用の接続を作成または管理する方法については、[GitHub コネクション](connections-github.md) を参照してください。

   1. **リポジトリ名** で、GitHub リポジトリの名前を選択します。

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

1. **[ステップ 4: ビルドステージの追加]** ページで、**[スキップ]** を選択します。

1. **[ステップ 5: デプロイステージの追加]** ページで、**[EC2]** を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/ec2deploy-action.png)

   1. **[ターゲットディレクトリ]** で、`/home/ec2-user/testhelloworld` などのデプロイ先のインスタンスのディレクトリを入力します。
**注記**  
アクションがインスタンスで使用するデプロイディレクトリを指定します。アクションは、デプロイの一部としてインスタンスに指定されたディレクトリの作成を自動化します。

   1. **[PostScript]** で、`test/script.sh` などのスクリプトのパスとファイル名を入力します。

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

1. [**Step 6: Review**] ページで、パイプラインの設定を確認し、[**Create pipeline**] を選択してパイプラインを作成します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/ec2deploy-pipeline.png)

1. パイプラインが正常に実行されたら、**[詳細を表示]** を選択してアクションのログを表示し、マネージドコンピューティングアクション出力を表示します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/ec2deploy-logs.png)  
![\[\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/ec2deploy-logs2.png)

## ステップ 5: パイプラインをテストする
<a name="tutorials-ec2-deploy-test"></a>

パイプラインには、end-to-endのネイティブ AWS 継続的デプロイを実行するためのすべてが必要です。次は、コードの変更をソースリポジトリにプッシュすることで機能をテストします。

**パイプラインをテストするには**

1. 設定済みソースリポジトリにコード変更を行い、変更をコミットしてプッシュします。

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

1. リストからパイプラインを選択します。

1. ステージを通してパイプラインの進行状況を監視します。パイプラインが完了し、アクションによってスクリプトがインスタンスにデプロイされます。

1. トラブルシューティングの詳細については、「[EC2 デプロイアクションがエラーメッセージ `No such file` で失敗する](troubleshooting.md#troubleshooting-ec2-deploy)」を参照してください。