このチュートリアルでは、自動化されたソフトウェアのリリースパイプラインを作成して、ライブサンプルアプリケーションをデプロイする方法について説明します。AWS CodePipeline を使用して、コード変更があるたびに、コードを構築、テスト、デプロイする、パイプラインを作成します。サンプルアプリコードのソースの場所として、GitHub アカウント、Amazon Simple Storage Service (S3) バケット、または AWS CodeCommit リポジトリを使用します。サンプルアプリのデプロイターゲットとして、AWS Elastic Beanstalk も使用します。完了したパイプラインは、サンプルアプリを含むソースリポジトリに対して行われた変更を検出し、ライブサンプルアプリを自動的に更新します。

継続的デプロイにより、リビジョンは開発者からの明示的な承認なしで自動的に運用環境にデプロイされるため、ソフトウェアのリリースプロセス全体が自動化されます。

このチュートリアルはすべて無料利用枠の範囲で実行できます。

AWS リソース管理を始めましょう

コンソールにサインイン

継続的なデプロイパイプラインには、サンプルコードをデプロイする仮想サーバー、または Amazon EC2 インスタンスを含むターゲット環境が必要です。パイプラインを作成する前に、この環境を準備します。


a. このチュートリアルのための EC2 インスタンスのセットアップおよび設定を単純化するためには、AWS Elastic Beanstalk を使用して、サンプル環境を立ち上げます。Elastic Beanstalk を使用すると、独自に仮想サーバーを起動、設定、または操作する必要なく、ウェブアプリケーションを簡単にホストできます。インフラストラクチャ (例: 仮想サーバー、ロードバランサーなど) が自動的にプロビジョニングおよび運用され、アプリケーションスタック (例: OS、言語およびフレームワーク、ウェブおよびアプリケーションサーバーなど) が提供されます。


b. ドロップダウンメニューから [PHP] を選択して、[今すぐ起動] をクリックします。

注意: 以前に Elastic Beanstalk アプリケーションを作成した場合は、右上隅の [新しいアプリケーションの作成] をクリックします。アプリケーションに名前を付けて、新しい [ウェブサーバー環境] を作成します。[PHP] をプラットフォームとして選択し、[単一インスタンス] を環境タイプとして選択します。インスタンスにリモートログインする場合は、キーペアを選択します。それ以外の場合は、残りのオプションはデフォルト値のままにしておき、継続的なデプロイパイプラインの環境を作成します。

(クリックして拡大)


c. これで Elastic Beanstalk は、アプリケーションをデプロイするサンプル環境の作成を開始します。Amazon EC2 インスタンス、セキュリティグループ、Auto Scaling グループ、Amazon S3 バケット、Amazon CloudWatch アラーム、および、アプリケーションのドメイン名を作成します。

注意: この操作が完了するまでに数分間かかります。

(クリックして拡大)

このステップでは、サンプルアプリのコードを取得して、コードをホストするソースを選択します。パイプラインは、ソースからコードを取得し、アクションを実行します。

ソースとして、GitHub リポジトリ、Amazon S3 バケット、または AWS CodeCommit リポジトリの 3 つのオプションを使用できます。お好みのオプションを選択し、次のステップに従います。

 

  • GitHub

    a.GitHub アカウントを使用する場合。

    (クリックして拡大)

  • Amazon S3

    a. ソースとして Amazon S3 を使用する場合、AWS GitHub リポジトリからサンプルコードを取得して、コンピュータに保存し、Amazon S3 バケットにアップロードします。

    (クリックして拡大)


    b.コンピュータにソースファイルを保存します。

    • aws-codepipeline-s3-aws-codedeploy_linux.zip という名前のファイルをクリックします。
    • [View Raw (Raw の表示)] をクリックします。
    • ローカルコンピュータにサンプルファイルを保存します。

    (クリックして拡大)


    c.ここをクリックして Amazon S3 コンソールを開き、Amazon S3 バケットを作成します。

    • [バケットを作成する] をクリックします。
    • [バケット名:] に、バケットの一意の名前 (awscodepipeline-demobucket-variables など) を入力します。 Amazon S3 内のすべてのバケット名は一意になる必要があるため、例に示す名前ではなく、独自のバケット名を使用してください。
    • [リージョン:] ドロップダウンで、パイプラインを作成するリージョン (米国スタンダードなど) を選択します。 
    • [Create] をクリックします。

    (クリックして拡大)


    d. コンソールに新しく作成された空のバケットが表示されます。

    • [プロパティ] をクリックします。
    • [バージョニング] を展開して、[バージョニングの有効化 ] を選択します。バージョニングが有効になったら、Amazon S3 によって各オブジェクトのすべてのバージョンがバケットに保存されます。

    (クリックして拡大)


    e.Amazon S3 バケットにサンプルコードをアップロードします。 

    • [アップロード] をクリックします。
    • 画面の指示に従って GitHub からダウンロードしたサンプルコードを含む .zip ファイルをアップロードします。

    (クリックして拡大)

  • AWS CodeCommit

    a. ソースとして AWS CodeCommit を使用する場合、AWS GitHub リポジトリからサンプルコードを取得して、コンピュータに保存し、AWS CodeCommit リポジトリにアップロードします。

    (クリックして拡大)


    b.コンピュータにソースファイルを保存します。

    • aws-codepipeline-s3-aws-codedeploy_linux.zip という名前のファイルを選択します。
    • [View Raw (Raw の表示)] を選択します。
    • ローカルコンピュータにサンプルファイルを保存します。

    (クリックして拡大)


    d.ここをクリックして AWS CodeCommit コンソールを開き、[今すぐ始める] を選択します。

    (クリックして拡大)


    e.[Create new repository (新しいリポジトリの作成)] ページで以下の操作を行います。

    • [リポジトリ名:] PipelineRepo を入力します。
    • [リポジトリの作成] を選択します。

    (クリックして拡大)


    f. リポジトリに接続して、サンプルファイルのコピーをプッシュします。 手順については、 AWS CodeCommit リポジトリに接続するを参照してください。

このステップでは、ソースとデプロイの 2 つのアクションを使用するシンプルなパイプラインを作成して、設定します。ソースリポジトリおよびデプロイ環境の場所を使用して、CodePipeline を提供します。


a.ここをクリックして AWS CodePipeline コンソールを開きます。

  • [Welcome] ページで、[パイプラインの作成] をクリックします。 
  • AWS CodePipeline を初めて使用する場合は、[Welcome] の代わりに紹介ページが表示されます。[今すぐ始める] をクリックします。

(クリックして拡大)


b. [ステップ 1: 名前] ページ。

  • [パイプライン名:] パイプライン名 DemoPipeline を入力します。
  • [次のステップ] をクリックします。

注意: バケットを作成したら、その名前を変更することはできません。

(クリックして拡大)


c.[ステップ 2: ソース] ページで、選択したソースの場所を選択して、次のステップに従います。

  • GitHub

    [ソースプロバイダ:] GitHub

    • [GitHub に接続] セクションで、[GitHub に接続] を選択します。
    • GitHub に接続するための新しいブラウザウィンドウが開きます。サインインするように求められたら、GitHub の認証情報を入力します。 
    • アプリケーションにアカウントへのアクセスを許可するように求められます。[Authorize application (アプリケーションの承認)] を選択します。

    (クリックして拡大)


    リポジトリとブランチを指定します。

    • [レポジトリ:] ドロップダウンリストで、パイプラインのソース場所として使用する GitHub リポジトリの名前を選択します。aws-codepipeline-s3-aws-codedeploy_linux と呼ばれるサンプルコードを含む、GitHub アカウントの分岐したリポジトリをクリックします。 
    • [ブランチ:] ドロップダウンリストからマスターとして使用するブランチを選択します。
    • [次のステップ] をクリックします。

    (クリックして拡大)

  • Amazon S3

    [ソースプロバイダ:] Amazon S3。

    • [Amazon S3 の場所:] バケットにコピーしたサンプルファイル (aws-codepipeline-s3-aws-codedeploy_linux.zip) に従って作成した Amazon S3 バケットの名前を入力します。たとえば、バケットに awscodepipeline-demobucket-variable という名前を付けた場合は、s3://awscodepipeline-demobucket-variable/aws-codepipeline-s3-aws-codedeploy_linux.zip と入力します。
    • [次のステップ] をクリックします。

    (クリックして拡大)

  • AWS CodeCommit

    [ソースプロバイダ:] AWS CodeCommit

    • [リポジトリ名:] AWS CodeCommit リポジトリの名前を選択します。 
    • [ブランチ名:] サンプルファイルを含むブランチの名前を選択します。
    • [次のステップ] をクリックします。

    (クリックして拡大)


d.真の継続的なデプロイパイプラインには、コードをコンパイルしてユニットをテストするビルドステージが必要です。CodePipeline を使用して、任意のビルドプロバイダをパイプラインに接続できます。ただし、このチュートリアルでは、ビルドステージはスキップします。

  • [ステップ 3: ビルド] ページで、[ビルドなし] を選択します。
  • [次のステップ] をクリックします。

 

(クリックして拡大)


e.[ステップ 4: ベータ] ページ。

  • デプロイプロバイダ: [AWS Elastic Beanstalk] をクリックします。
  • アプリケーション名: [最初の Elastic Beanstalk アプリケーション]。
  • 環境名: [Default-Environment (デフォルト環境)] をクリックします。
  • [次のステップ] をクリックします。

注意: "Beta" は、パイプラインのこのステージで、単にデフォルトで付けられる名前であり、"Source" は、パイプラインの最初のステージに付けられる名前です。

(クリックして拡大)


f.[ステップ 5: サービスロール] ページ。

  • サービスロール: [ロールの作成] をクリックします。
  • 作成される AWS-CodePipeline-Service ロールを定義する IAM コンソールページにリダイレクトされます。[Allow (許可)] をクリックします。
  • ロールを作成したら、ロール名に [AWS-CodePipeline-Service] が表示されている [ステップ 5: サービスロール] ページに戻ります。[次のステップ] をクリックします。

注意: サービスロールは、AWS CodePipeline でのパイプラインの初回作成時にのみ作成する必要があります。サービスロールがすでに作成されている場合は、ロールのドロップダウンリストから選択できます。ドロップダウンリストには、アカウントに関連付けられているすべての IAM サービスロールが表示されるため、デフォルトと異なる名前を選択する場合は、その名前が AWS CodePipeline のサービスロールとして認識可能であることを確認してください。

(クリックして拡大)

このステップでは、パイプラインを起動します。パイプラインが作成されると、自動的に実行されます。最初に、ソースの場所でサンプルアプリコードが検出されると、ファイルをまとめて、定義した 2 番目のステージに移動します。このステージでは、コードをホストする EC2 インスタンスを含む Elastic Beanstalk にコードが渡されます。Elastic Beanstalk は、EC2 インスタンスへのコードのデプロイを処理します。


a.[ステップ 6: レビュー] ページで情報を確認し、[パイプラインの作成] をクリックします。

(クリックして拡大)


b.パイプラインが作成されると、パイプラインのステータスページが表示され、パイプラインの実行が自動的に開始されます。パイプラインが各アクションを実行する間、進行状況と成功/失敗メッセージを表示できます。

パイプラインが正常に実行されていることを確認するために、各ステージに進む間、パイプラインの進行状況をモニタリングします。各ステージのステータスは、[まだ実行はありません] から [In Progress] に変わり、その後、[Succeeded] または [Failed] のいずれかに変わります。パイプラインの最初の実行は数分で完了します。

(クリックして拡大)


c.ベータステージのステータス領域で、[AWS Elastic Beanstalk] をクリックします。 

(クリックして拡大)


d.デプロイの詳細とともに、AWS Elastic Beanstalk コンソールが開きます。

  • 以前に作成した環境をクリックして、[Default-Environment] を呼び出します。 

(クリックして拡大)


e.ページの右上隅に表示される URL をクリックして、デプロイしたサンプルウェブサイトを表示します。

(クリックして拡大)

この手順では、サンプルコードを修正してその変更をリポジトリにコミットします。CodePipeline は更新されたサンプルコードを検出し、Elastic Beanstalk を使用して、EC2 インスタンスへのデプロイを自動的に開始します。 

デプロイしたサンプルウェブページは、コードのデプロイを自動化するサービス、AWS CodeDeploy を参照することに注意してください。CodePipeline では、Elastic Beanstalk の代わりに CodeDeploy がデプロイアクションに使用されます。正しく Elastic Beanstalk を使用してサンプルをデプロイしたことを示すために、サンプルコードを更新します。

  • GitHub

    a.GitHub で、分岐したリポジトリの独自のコピーを参照します。

    • index.html を開きます。
    • [Edit (編集)] アイコンを選択します。

    (クリックして拡大)


    b.行 30 の以下のテキストをコピーして貼り付けて、ウェブページを更新します。 

    GitHub からソースアプリケーションを取得し、AWS Elastic Beanstalk を使用して、Amazon EC2 インスタンスにデプロイするパイプラインが正常に作成されました。継続的デプロイの実践に一歩近づきました。

    (クリックして拡大)


    c. 変更をリポジトリにコミットします。

    (クリックして拡大)

  • Amazon S3

    a.デスクトップで、ダウンロードした aws-codepipeline-s3-aws-codedeploy_linux.zip という名前の zip ファイルを参照します。


    b.サンプルウェブアプリコードを編集します。

    • zip ファイルから、index.html を展開して、任意のテキストエディタを使用して開きます。 
    • 「おめでとうございます。」に続くヘッダーテキストを更新すると、以下のようになります。

    「Amazon S3 からソースアプリケーションを取得し、AWS Elastic Beanstalk を使用して、Amazon EC2 インスタンスにデプロイするパイプラインが正常に作成されました。継続的デプロイの実践に一歩近づきました。」

    • index.html ファイルを、aws-codepipeline-s3-aws-codedeploy_linux.zip にコピーして戻し、古いバージョンの index.html と置き換えます。

    (クリックして拡大)


    c.編集したファイルを Amazon S3 バケットに再アップロードします。

    • 以前作成した S3 バケットに戻ります。 
    • 更新した aws-codepipeline-s3-aws-codedeploy_linux.zip ファイルを、バケットにアップロードします。 

    注意: S3 バケットを最初に作成したときに、バージョニングを有効にしているため、S3 はファイルのすべてのバージョンを保存します。

    (クリックして拡大)

  • AWS CodeCommit

    a.ダウンロードした aws-codepipeline-s3-aws-codedeploy_linux.zip という名前のサンプルコードを含む zip ファイルを参照します。


    b.サンプルウェブアプリコードを編集します。
     
    • zip ファイルから、index.html を展開して、任意のテキストエディタを使用して開きます。 
    • 次に「おめでとうございます。」に続くヘッダーテキストを更新すると、以下のようになります。

    AWS CodeCommit からソースアプリケーションを取得し、AWS Elastic Beanstalk を使用して、Amazon EC2 インスタンスにデプロイするパイプラインが正常に作成されました。継続的デプロイの実践に一歩近づきました。

    (クリックして拡大)


    c.CodeCommit リポジトリに更新された zip ファイルをコミットし、プッシュします。


d.CodePipeline コンソールのパイプラインに戻ります。数分で、ソースの表示が、ソースリポジトリに加えた変更をパイプラインが検出したことを示す青色に変わります。これが行われると、更新されたコードが Elastic Beanstalk に自動的に移動されます。

  • パイプラインのステータスが [成功] と表示されたら、ベータステージのステータス領域で、[AWS Elastic Beanstalk] をクリックします。

(クリックして拡大)


e.デプロイの詳細とともに、AWS Elastic Beanstalk コンソールが開きます。以前に作成した環境を選択して、[Default-Environment] を呼び出します。

(クリックして拡大)


f.ページの右上隅に表示される URL をクリックして、サンプルウェブサイトをもう一度表示します。 テキストは継続的なデプロイパイプラインによって自動的に更新されました。

 

(クリックして拡大)

以降に料金が発生しないようにするため、このチュートリアルで起動した、パイプライン、Elastic Beanstalk アプリケーション、コードをホストするために設定したソースを含む、すべてのリソースを削除します。 


a.最初に、パイプラインを削除します。

  • パイプラインビューで、[編集] をクリックします。 
  • [削除] をクリックします。
  • パイプラインの名前を入力し、[削除] をクリックします。

(クリックして拡大)


b.次に、Elastic Beanstalk アプリケーションを削除します。

  • Elastic Beanstalk コンソールにアクセスします。 
  • [アクション] をクリックします。
  • 次に [環境の終了] をクリックします。

(クリックして拡大)

  • Amazon S3

    c.このチュートリアルで S3 バケットを作成した場合は、作成したバケットを削除します。

    • S3 コンソールにアクセスします。 
    • バケット名を右クリックして、[バケットを削除する] を選択します。 
    • 確認メッセージが表示されたらバケット名を入力して、[削除] をクリックします。

    (クリックして拡大)

  • AWS CodeCommit

    c.このチュートリアルで AWS CodeCommit リポジトリを作成した場合、CodeCommit コンソールにアクセスして作成したリポジトリを削除します。

    (クリックして拡大)


    c.ナビゲーションペインで [Settings (設定)] を選択します。

    • [Delete Repository (リポジトリの削除)] をクリックします。
    • 確認のためのウィンドウがポップアップします。リポジトリの名前を入力し、[削除] をクリックします。

    (クリックして拡大)

AWS CodePipeline を使用して、自動化されたソフトウェアのリリースパイプラインが正常に作成されました。 CodePipeline を使用して、アプリケーションコードのソースの場所として GitHub、Amazon S3、AWS CodeCommit を使用して、AWS Elastic Beanstalk によって管理される Amazon EC2 インスタンスにコードをデプロイするパイプラインを作成しました。パイプラインは、コードに変更があるごとに自動的にコードをデプロイします。継続的デプロイの実践に一歩近づきました。

AWS CodePipeline を使用したシンプルなパイプラインの作成方法の学習を完了しました。詳細については、以下のリソースを参照してください。

  • このガイドに従って、より高度な 4 ステージのパイプラインを作成します。このパイプラインは、ソースに GitHub リポジトリを使用し、プロジェクトをビルドしてテストする Jenkins ビルトサーバー、およびビルドしたコードをステージングサーバーにデプロイする AWS CodeDeploy アプリケーションを使用します。
  • Pipeline Starter Kit を使用して、Jenkins ビルドサーバーで、4 ステージのパイプラインを迅速に立ち上げます。
  • 詳細については、継続的配信を参照してください。