Help us understand the problem. What is going on with this article?

CodeCommit + CodeDeploy + CodePipelineでEC2にデプロイ~CodePipelineの設定・デプロイ実行~

目次
1. CodeCommitの設定
2. CodeDeployの設定
3. CodePipelineの設定・デプロイ実行(この記事)

AWSのCodeCommit、CodeDeploy、CodePipelineを組み合わせてEC2にデプロイするまでをまとめました。
この記事ではCodePipelineでデプロイを自動実行するパイプラインを作成する手順を説明します。

前提

  • 前回、前々回の記事でCodeCommitのリポジトリ、CodeDeployのアプリケーションを作成済みとします。

CodePipeline

CI/CD のパイプラインを提供するサービスです。
パイプラインを作成することで、アプリケーションのビルド・テスト・デプロイを自動化することができます。
パイプラインの実行中ステータスはCodePipelineコンソールから視覚的に監視できます。

用語

  • ステージ : パイプラインの実行中に通過する「アプリケーションに何らかのアクションを実行する」各種フェーズの単位。

今回作るパイプライン

先に作成したCodeCommitのリポジトリのmasterブランチが変更されたら、EC2インスタンスにデプロイするパイプラインを作成します。
パイプラインにはリポジトリからソースコードを取得する「ソースステージ」と、デプロイを実行する「デプロイステージ」の2つのステージがあります。
ソースプロバイダはCodeCommit、デプロイプロバイダはCodeDeployを使用します。それぞれ、GithubやAmazon ECSなど他のサービスを代わりに使う事も可能です。CodePipelineに統合できるツール・サービスのリストはこちらを参照してください。

パイプライン作成

  1. CodePipelineコンソール(http://console.aws.amazon.com/codesuite/codepipeline/home)にアクセスします。
  2. [パイプラインの作成]を選択します。
  3. パイプラインの設定を選択します。 1_create_pipeline.PNG
    • パイプライン名 : SampleAppPipeline
    • サービスロール : 新しいサービスロール(CodePipelineに新規サービスロール作成を許可する)
  4. [高度な設定]の[アーティファクトストア]で[カスタムロケーション]を選択し、CodeDeployの設定時に作成したS3バケットを選択します。 1_5_create_pipeline.PNG
  5. [次に]を選択し、ソースステージを追加します。
  6. 2_create_pipeline.PNG
    • ソースプロバイダー : AWS CodeCommit
    • リポジトリ名 : ソースコードのリポジトリ名
    • ブランチ名 : master
    • 検出オプション : Amazon CloudWatch Events
  7. [次に]を選択するとビルドステージの追加画面が表示されます。今回ビルドステージは不要なので、[ビルドステージをスキップ]を選択します。 3_create_pipeline.PNG
  8. デプロイステージの追加画面が表示されるので、設定を入力して[次に]を選択します。 4_create_pipeline.PNG
    • デプロイプロバイダー : AWS CodeDeploy
    • アプリケーション名 : CodeDeployアプリケーション名
    • デプロイグループ : デプロイするデプロイグループ
  9. [パイプラインの作成]を選択します。

pushしてデプロイの実行

これでmasterブランチにpushするとデプロイを自動実行するパイプラインを作成できました。
「ソースステージ」と「デプロイステージ」があることを確認できると思います。
2_deploy_2.png
試しにmasterブランチに対してgit pushするとソースステージのアクションが開始します。
3_deploy.PNG
しばらくしてソースコードの取得が終わるとデプロイステージのアクションが開始します。
4_deploy.PNG

進行中のデプロイアクションの[詳細]を選択すると、CodeDeployコンソールが開きます。
5_deploy.PNG
上のスクリーンショットでは2つのEC2インスタンスにデプロイを実行しています。
デプロイ中インスタンスの[View events]を選択すると、CodeDeployライフライクルの進捗状況を監視できます。
7_deploy.PNG

デプロイでエラー発生時のログ

CodeDeployのライフライクルでエラーが発生した場合、先程のCodeDeployコンソールからエラー発生個所を特定できます。
1_error.PNG
エラーコード[ScriptFailed]はデプロイスクリプトの実行でエラーになったことを意味します。
[ScriptFailed]を選択すると下のようにエラー発生時のログを確認できるのですが、エラー発生個所の周辺数行しか見れません。
2_error.PNG
これだけで解決できる場合もありますが、より詳細なログが見たい場合はEC2インスタンスにログインしてデプロイのログを確認する必要があります。

デプロイに関連するログは下記の場所にあるので、lessコマンド等で確認できます。

CodeDeployAgentのログ
/var/log/aws/codedeploy-agent/codedeploy-agent.log
CodeDeployスクリプトのログ
/opt/codedeploy-agent/deployment-root/{deployment-group-ID}/{deployment-ID}/logs/scripts.log

まとめ

以上で「CodeCommit + CodeDeploy + CodePipelineでEC2にデプロイ」する事ができました。
今回は「ビルドステージ」を追加しませんでしたが、CodeBuildを使用すればDockerイメージを使用したアプリケーションのビルド・テスト実行をパイプラインに組み込むこともできます。
他にも、デプロイが成功したらAmazon SNSで通知を送るなども可能です。
コンソールでポチポチしていくだけで簡単にサービスを連携できる所がAWSの魅力だと思います。

参考記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした