AWSでのdocker環境構築を行う方法 その4 CodePipeLine&CodeDeploy編

開発1GのOです。 ついにAWS&docker環境構築も最終回となりました。 今回はCodeCommitのソースコードをEC2にデプロイする方法について紹介していきたいと思います。

  1. 今回やりたいこと
  2. CodeDeployとは
  3. CodePipeLineとは
  4. 事前準備
  5. EC2インスタンス設定
  6. CodeDeploy設定
  7. CodePipeLine設定
  8. おわりに

今回やりたいこと

まず今回やりたいことですが、CodeDeployを使ってEC2のインスタンスにファイルをデプロイしたいと思います。 CodeCommitのリポジトリからデプロイしようかとも思ったのですがどうやらCodeDeployはS3かgithubからしかデプロイができないようです。 そのためCodePipeLineを使ってS3経由でデプロイを行うこととしました。
ちなみに全体を通しての構成は以下のようなイメージでやってきています。

CodeDeployとは

CodeDeployはAWSで提供されているソフトウェアのデプロイ自動化サービスです。 EC2だけでなくオンプレミス等に幅広く使用できるようです。 今回はEC2にデプロイを試していきます。

CodePipeLineとは

CodePipeLineはAWSの公式では以下のような説明となっています

====================================================================
CodePipeline は、お客様が定義したリリースモデルに基づき、コードチェンジがあった場合のフェーズの構築、テスト、デプロイを自動化します。 これにより、機能とアップデートを素早く、信頼性の高い方法で配信できます。
====================================================================

正直なにを言っているのかよくわかりませんね… かみ砕いて言い直すと「いくつかのサービスをまとめて自動的に実行してくれるサービス」と個人的には思っています。

事前準備

今回はいくつかサービスを使うので操作するユーザーに権限が必要です。 しようするサービスは以下の通り。

  • ・CodeCommit
  • ・CodePipeLine
  • ・S3
  • ・CodeDeploy
  • ・EC2
  • ・IAMロール作成

まずCodeCommitにデプロイするためのファイルを格納するリポジトリを作成します。 そしてルートフォルダに以下の「appspec.yml」を作成てリポジトリのルートにpushしておいてください

appspec.yml内容
========================================================
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/aws_test/src
========================================================

各内容を簡単に解説すると
os → 対象のOSです。今回はEC2(Amazon Linux)なので「linux」
source → リポジトリ内のデプロイ対象ファイル「/」でルート以下のすべてのファイルを指定しています。
destination → デプロイ対象のデプロイ先フォルダです。必ずフルパスで記載してください。

CodeDeploy用のIAMロールを作成を作成しておいてください。 作成したロールには以下のポリシーが必要です
AWSCodeDeployRole
※CodeDeploy設定中に作成できないためあらかじめ作成しておく

EC2インスタンス設定

EC2インスタンにファイルをデプロイする環境を整えます。 デプロイしたいEC2インスタンスにAmazonS3ReadOnlyAccess権限を付与します。 IAMロールが作成されていない場合は作成し、AmazonS3ReadOnlyAccess権限をアタッチしてください。 該当のIAMロールをEC2インスタンスにアタッチしておきます。
※S3からコードデプロイエージェントをインストールする必要があるため読み取り権限を付与

その後、コードデプロイエージェントをインストールします。 以下のサイトの手順通りに実行し、コードデプロイエージェントのインストールと実行をおこなってください。

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

CodeDeployの設定

それはCodeDeployの設定方法を紹介していきます。 AWSのサービス一覧からCodeDeployを選択して開始します。 アプリケーションのページに移動したら、「アプリケーションの作成」を選択します。

アプリケーション作成画面が表示されるため、任意のアプリケーション名を入力ます。、 プラットフォームは「EC2/オンプレミス」を選択し、「アプリケーションの作成」を選択します。

次は作成したアプリケーション内にデプロイグループを作成します。 「デプロイグループの作成」を選択してください。
デプロイグループ名に任意の名称、サービスロールはあらかじめ作成しておいた権限のあるサービスロールを選択します。 ここでの作成はできないので選択ができない方はサービスロールの作成を行ってください。 デプロイタイプはどちらでも問題ないのですが、今回は「インプレース」を選択しました。

次に環境設定に進みます。 「Amazon EC2 インスタンス」にチェックを入れて タググループのキーに対象とするEC2インスタンスのキーを入力してください。 ここで登録したキーをもつすべてのEC2インスタンスに対してデプロイが実行されます。 デプロイ設定については何を選択しても問題ありませんが今回はデフォルトのままとしています。
ロードバランサーについては今回は作成していないので無効にしてあります。


上記までの設定が完了したら「デプロイグループの作成」を選択します。 これでCodeDeployの設定は完了です。

CodePipeLineの設定

次にCodePipeLineの設定を行います。 AWSサービス一覧からCodePipeLineを選択して開始してください。
パイプラインの一覧が表示されるかと思いますので「パイプラインの作成」を選択してください。

パイプラインの設定が表示されるので設定を行います。 任意のパイプラインを選択し、ロール名の入力を行ってください。 サービスロールについては既存のものを選択しても大丈夫です。
アーティファクトストアは今回作成したバケットを選択しましたが、「デフォルトの場所」を選択しても問題ありません。

設定が完了したら「次へ」を選択してください。 次はソースステージの追加が表示されるので設定します。 今回はCodeCommitからデプロイしたいので以下の通り設定しました。

次にビルドステージの追加が表示されます。 今回はファイルをそのままデプロイしたかったのでスキップしましたが、ビルドしたファイルをデプロイすることもできるようです。

最後のデプロイステージの追加です。 デプロイプロバイダは「AWS CodeDeploy」を選択します。 アプリケーションとデプロイグループは先ほど作成したものを選択してください。

問題がなければ作成を行います。 そうすると以下のような画面が表示されデプロイが実行されるはずです。

反映には多少時間がかかるので慌てずにお待ちください。 これ以降は対象のCodeCommitリポジトリにファイルをpushするたびに自動的にパイプラインが実行されるようになります。

おわりに

長かったAWSでのdocker環境構築も今回で終わりとなりました。 それぞれのサービスは高機能ではあるのですができることが多いので全体的に駆け足な紹介となってしまいました。 ここまで紹介してきたのは基本的な機能なので今後また機能の検証ができたら紹介してみたいと思います。 ここまでお付き合いいただきありがとうございました。

料金表ナビゲーション 料金表ナビゲーション

おすすめ記事