LoginSignup
16
10

More than 1 year has passed since last update.

【初心者】CodeCommit, CodeDeploy, CodePipeline を使ってみる

Posted at

1. 目的

  • devops関係の復習をしている。code系のサービスの知識が乏しいため、基礎的なハンズオンから始めて勉強する。

2. やったこと

  • AWS公式チュートリアル「チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)」 を実施する。
  • Developers.IOの記事「CodeCommitからEC2にデプロイするシンプルなパイプラインを作ってみた」に、上記公式チュートリアルの詳細な解説があり、それも見ながら実施する。
  • チュートリアル内容は以下の通り。
    • CodeCommitにリポジトリを作成し、デプロイしたいアプリケーション(※httpdを起動してindex.htmlを置くだけ…)をアップロードする。
    • アプリケーションのデプロイ先となるEC2インスタンス(1個)を作成する。
    • CodeDeployに「アプリケーション」を作成し、デプロイ先やデプロイ方法の設定を行う。
    • CodePipelineに、ソースをCodeCommitのリポジトリ、デプロイをCodeDeployのアプリケーションとして「パイプライン」を作成する。
    • 「パイプライン」を初回実行し、デプロイしたWEBサイトが表示されることを確認する。
    • CodeCommitのリポジトリ内容(index.html)を更新する。CodeCommitの更新をトリガにパイプラインが再実行され、WEBサイトのコンテンツが更新されることを確認する。

3. 構成図

codecommit図.png

4. 手順

  • 基本的にチュートリアルの手順通りに実施するが、詰まった点などを補足する。

事前準備

  • Setup for HTTPS users using Git credentials」 に従い、CodeCommitにhttps経由でアクセスする環境を整備する。
  • 「AWSCodeCommitPowerUser」権限を持つIAMユーザを作成する。
  • 上記権限を持つIAMユーザの管理画面にて、「AWS CodeCommit の HTTPS Git 認証情報」の「認証情報の生成」を実施する。CodeCommitに接続するためのUsername/Passwordのセットが生成される。

Step 1: Create a CodeCommit repository

  • CodeCommitの管理画面にて、新規レポジトリを作成する。

codecommit01b.png

  • 作業用インスタンスにgitをインストールし、ローカルリポジトリのセットアップを行う。git clone 実行時に、事前に作成した「AWS CodeCommit の HTTPS Git 認証情報」が必要になる。
[ec2-user@ip-10-0-0-130 ~]$ sudo yum install git
[ec2-user@ip-10-0-0-130 tmp]$ git --version
git version 2.32.0
[ec2-user@ip-10-0-0-130 tmp]$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/mksamba-XXXX
Cloning into 'mksamba-XXXX'...
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': [username]
Password for 'https://xxxxxx@git-codecommit.ap-northeast-1.amazonaws.com': [password]
warning: You appear to have cloned an empty repository.

Step 2: Add sample code to your CodeCommit repository

  • SampleApp_Linux.zip を保存して解凍する。
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ wget https://docs.aws.amazon.com/codepipeline/latest/userguide/samples/SampleApp_Linux.zip
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ unzip SampleApp_Linux.zip
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ rm SampleApp_Linux.zip
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ ls
appspec.yml  index.html  LICENSE.txt  scripts
  • リポジトリにファイルをアップロードする。
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ git add -A
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ git commit -m "Add sample application files"
[ec2-user@ip-10-0-0-130 mksamba-XXXX]$ git push
version: 0.0    # 現在0.0で固定
os: linux   # EC2インスタンスが対象の場合、OS指定が必要
files:  # リポジトリ内のindex.htmlを対象EC2の/var/www/htmlへコピー
  - source: /index.html
    destination: /var/www/html/
hooks:  
  BeforeInstall:  # インストールの前に実行
    - location: scripts/install_dependencies # スクリプトの中身は httpd のインストール
      timeout: 300
      runas: root
    - location: scripts/start_server # スクリプトの中身は httpd の start
      timeout: 300
      runas: root
  ApplicationStop: # デプロイ完了後、次回のデプロイの最初に実施
    - location: scripts/stop_server   # スクリプトの中身は httpd の stop
      timeout: 300
      runas: root

Step 3: Create an Amazon EC2 Linux instance and install the CodeDeploy agent

  • アプリケーションをデプロイするターゲットとなるEC2インスタンスの作成、設定を行う。
  • IAMポリシー(AmazonEC2RoleforAWSCodeDeploy, AmazonSSMManagedInstanceCore)を含むIAMロールを作成する。
  • Amazon Linux 2 のインスタンスを作成し、上記のIAMロールを設定する。また、タグとして「Key: Name」、「Value: mksamba-MyCodePipelineDemo」を設定する。(デプロイ先としての指定にタグを用いるため)

Step 4: Create an application in CodeDeploy

  • CodeDeployにアプリケーションを作成する。
  • 「信頼されたエンティティ」として「CodeDeploy」を指定したIAMロールを作成する。
  • マネージメントコンソールの「CodeDeploy > アプリケーション > アプリケーションの作成」にて、アプリケーションを作成する。

codecommit02a.png

  • 続けてデプロイグループを作成する。
    • サービスロールとして、先の手順で作成したIAMロールを指定。
    • デプロイタイプとして「インプレース」(1台のデプロイ先のEC2インスタンスにそのまま上書きデプロイしていく)を選択。
    • 環境設定(デプロイ先)として、EC2インスタンスを選択し、タグ「Key: Name」、「Value: mksamba-MyCodePipelineDemo」を指定。
    • デプロイ設定として、デフォルトの「CodeDeployDefault.AllAtOnce」を選択。選択肢毎の挙動は「EC2/オンプレミスコンピューティングプラットフォームの事前定義されたデプロイ設定」を参照。
    • AWS Systems Manager を使用したエージェント設定にて、「今すぐ更新し、更新をスケジュール」を選択する。これによりCodeDeploy Agentのインストール、更新が行われる。
    • Load balancerにて、「ロードバランシングを有効にする」のチェックを外す。

codecommit03a.png
codecommit04a.png
codecommit05a.png

Step 5: Create your first pipeline in CodePipeline

  • マネージメントコンソールの 「CodePipeline - パイプライン - 新規のパイプラインを作成する」にて、パイプラインを作成する。
    • 新しいサービスロールを作成する。
    • ソースとして、あらかじめ作成したCodeCommitのリポジトリを指定する。
    • ビルドステージは今回はないのでスキップにする。(index.htmlを配置するだけのアプリケーションなので)
    • デプロイとして、あらかじめ作成したCodeDeployのアプリケーション/デプロイグループを指定する。

codecommit06a.png
codecommit07a.png
codecommit08a.png
codecommit09a.png

  • パイプラインを作成後、初回実行される。(ソースのCodeCommitのリポジトリの内容をCodeDeployでEC2インスタンスへ展開)

codecommit10a.png

  • デプロイ先のEC2インスタンスのEIPにhttpアクセスすると、無事デプロイしたコンテンツが表示される。

codecommit11a.png

Step 6: Modify code in your CodeCommit repository

  • 作業用インスタンスのローカルリポジトリでindex.htmlファイルを更新し、アップロードする。
[ec2-user@ip-10-0-0-130 mksamba-qiita-XXXX]$ vi index.html  (中身を更新)
[ec2-user@ip-10-0-0-130 mksamba-qiita-XXXX]$ git commit -am "Updated sample application files"
[ec2-user@ip-10-0-0-130 mksamba-qiita-XXXX]$ git push
  • CodeCommitのリポジトリの変更により、CloudWatch EventsによりCodePipelineのパイプラインが再実行される。完了後、EC2インスタンスにhttpアクセスすると、コンテンツが更新されていることが確認できる。

codecommit12a.png

6. 所感

  • 処理の流れが理解できて、ド初心者にはちょうどよいチュートリアルだった。コンテナへのデプロイなど、もう少し複雑な内容にチャレンジしたい。
16
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
16
10