LoginSignup
7
10

More than 3 years have passed since last update.

AWSのCI/CDサービスCodeDeploy、CodePipelineを試してみた

Posted at

黒川さんの動画でCodeDeploy、CodePipelineを学んだので
活字でもハンズオン出来るように記事として書き起こしてみる。

参照:【はじめてのCI/CD】AWSでやってみるDevOps最初の一歩、CodeDeploy、CodePipelineを使った自動デプロイのハンズオン
https://www.youtube.com/watch?v=8mPm7jolnVk&t=6s

AWSのCodeシリーズの解説:
コードをサーバまで運んでくれるので便利
CodeDeploy、CodePipeline

github→codedeploy→internetgateway→ec2

このサービスを使うには3つの設定が必要。
・AWSのVPC内の設定
・githubクライアント側の設定
・code系の設定


AWSのVPC内の設定

・ルートテーブルにインターネットゲートウェイへのルートテーブルを設定していること
・セキュリティグループでsshインバウンド設定許可がされていること
・NetworkACLはインもアウトも全て許可されていること

VPC設定の解説わからない場合はこちらで学ぼう
https://www.youtube.com/watch?v=aQpMBqn5mRY
WS000002.JPG


AWSのVPC内の設定1:

EC2インスタンス制作手順(作っている人は飛ばしても良い)

ステップ1
・osはamazonlinux2を選択
ステップ2
・インスタンスタイプはt2microを選択

ステップ3
・ネットワーク:あらかじめ作成したインターネットゲートウェイ設定してあるvpcを

・自動割り当てパブリックip:有効を選択

・codedeployのロールをアタッチするためIAM作成
→awscodedeployroleを割り当てる
ロール名:awscodedeployrole
でロール作成

・IAMロール:awscodedeployroleを選択

ステップ4:ストレージの追加
・8Gデフォルトを選択

ステップ5:タグの追加
・キー:「name」を入力
・値:「codedeploydemo」を入力

ステップ6セキュリティグループ設定
・デフォルトのまま

・キーペア→作成したもの使用で→インスタンス作成


AWSのVPC内の設定2:

codedeployのエージェントをインストール

作ったインスタンスに接続

管理者権限で

sudo su -

公式手順のコマンドをシェルで実行

CodeDeployエージェント実行コマンド
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/instances-ec2-create.html
Amazon Linux および RHEL の場合

シェル作る

vi codedeploy.sh

codedeploy.sh
#!/bin/bash
yum -y update
yum install -y ruby
cd /home/ec2-user
curl -O https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto

//シェルの解説:
yum -y update #yumを最新のパッケージにアップデート
yum install -y ruby#rubyをインストール
カールコマンドでエージェントをダウンロード
aws提供のs3バケットからcodedeployのエージェントをインストールしてる。

リージョン別リソースキットバケット名
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names
アジアパシフィック (東京) aws-codedeploy-ap-northeast-1 ap-northeast-1

シェルに実行権限付与

chmod +x codedeploy.sh

シェル実行

sh codedeploy.sh

ちなみに、ステップ3:インスタンスの詳細設定で
高度な設定から、シェルスクリプトを貼り付けて起動させることも出来る。


githubクライアントの設定:

以下のリポジトリを例として解説
https://github.com/KouheiKurokawa713/codedeploy

!codedeployを使用するにはデプロイさせたいファイルと「appspec.yml」が必要

リポジトリの中身として、indexファイルを書き換えることで
index.htmlの背景色が変わりcodedeployが出来たかを確認する実験。

appspec.ymlについての解説

・codedeployの仕様でappspec.ymlを同期させるディレクトリのルートに配置する必要がある。

・設定ファイル、同期させる先は何か?

appspec.yml
version: 0.0
os: linux
files:
    - source: /index.html    #同期させる元は何か?
      destination: /var/www/html/    #同期させる先は何か?

hooks:    #codedeployが動作する合間に任意のシェルを実行する設定
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

ymlの説明.JPG


Codedeployの設定:

Codedeployの設定手順(作っている人は飛ばしても良い)

・awsコンソールからcodedeployメニューを開く→アプリケーションの作成

アプリケーションの作成
-アプリケーション名:test-codedeploy
-コンピューティングプラットフォーム:ec2オンプレミスを選択
codedeployアプリの作成.JPG

デプロイグループの作成
-デプロイグループ名の入力:test-deploygroup
-サービスロールの入力:用意されたものを使用→???

-デプロイタイプ:インプレースを選択

-EC2インスタンスのタググループ
-キー:deploy
-値:01

→デプロイグループを作成

??インプレースデプロイとは??
稼働中サーバに対して直接新しいアプリケーションを配置、再起動してしまう方法です。

??ブルーグリーンデプロイとは??
稼働中サーバ(ブルー)とは別のサーバ(グリーン)に対して新しいアプリを展開し動作確認を行います。

-EC2インスタンスのタググループ→タグに含まれるものならまとめてデプロイ可能?

・githubトークン名を入力しgithubに接続をクリック

github接続.JPG

githubとcodedeployが紐づいたらリポジトリ名とコミットIDの入力フォームが出る。
-リポジトリ名:アカウント名/リポジトリ名を入力
-コミットID:最新のコミットのハッシュ値を取得して貼り付ける。

任意:

80番ポートを開く→

パプリックIPを取得して、webブラウザにアクセス:

githubに置いてあったindex.htmlの青い背景ページがデプロイされてることが確認できる。
青ページ1.JPG


codedeployを使ってみよう

・vscodeにて変更したソースをgithubにpush

黒ページpush.JPG

・最新コミットのhash値をgithubから取得し、codedeploy画面に貼り付け

・codedeployを実行

・デプロイ成功を確認後、webにアクセスしソースのデプロイ成功を確認する。


CodePipelineを設定しよう!

codedeployだけ設定してもソースをpushしてからいちいちhashを貼り付けて、
deployボタンを押す必要があるので面倒くさい。

codepipulineも設定すれば、
pushするだけで、awsに自動でデプロイ出来るようになるぞ!!

CodePipelineの設定手順:

・awsコンソールからCodePipelineへ移動、CodePipelineの作成をクリック

・パイプラインの設定
-パイプライン名:test-pipelineと入力
-次へ
パイプライン設定.JPG

・ソースステージを追加
-ソースプロパイダ:githubを選択
-githubに接続するをクリック
-リポジトリとブランチを入力
-次へ
ソースステジ.JPG

・ビルドステージを追加する
-ビルドステージをスキップを選択
(コンパイル言語はビルドを挟む(java/c#)インタプリタ言語はビルドはさまない(php/ruby))

・デプロイステージを追加する
デプロイステージ.JPG


このままだとCodePipelin権限が足りずに失敗してしまう。
なのでCodePipelinはs3を介してやりとりするのでs3のロールポリシーをアタッチする。

s3ロール.JPG

再度、デプロイを行うと成功する。

パイプライン成功.JPG
おわり.JPG


今回はgithubを介したが、awsだけで完結させたい場合は
「Code Commit」というサービスをつかうこと
WS000032.JPG

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10