AWS CLIでCodeCommitを使用してGitリポジトリを作成し、CodePipelineを使用してCodeCommitリポジトリのコードをデプロイしてみた。

2021.11.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CodeCommit

CodeCommit はGit リポジトリをホストするバージョン管理サービスです。CodeCommitを使用して、ドキュメントとバイナリファイルとソースコードを非公開で保存および管理できます。CodeCommit はGit の標準機能がサポートされます。AWS CodeCommit コンソールまたはAWS CLIを使用してリポジトリの作成することができます。

 

CodeDeploy

CodeDeployはデプロイサービスです。CodeDeploy はアプリケーションのデプロイを自動化されます。このサービスに対するアプリケーションをデプロイできます。

  • Amazon EC2 インスタンス
  • オンプレミスインスタンス
  • サーバーレス Lambda 関数
  • Amazon ECS サービス

 

CodePipeline

CodePipeline は配信サービスです。CodePipelineはソフトウェアの構築、テスト、およびデプロイを自動化されます。

CodePipeline Stages 

  • Source : CodeCommit, GitHub, S3, ECR, etc
  • Build : CodeBuild, Jenkins, etc
  • Deploy : CodeDeploy, S3, etc

 

 

この記事では、CodeCommitのリポジトリを作成して、CodeDeployのアプリケーションを作成して、CodePipelineを使用してCodeCommitリポジトリのコードをデプロイしてみた。

 

やってみた

 

AWS CLI でCodeCommitを使用してGitリポジトリの作成

Gitをインストールする

  • このリンク[ Git Download ]からGitをダウンロードしてインストールしておきます。
  • 次のコマンドを使用してバージョンを確認します。
git --version

 

CodeCommit の HTTPS Git認証情報を生成する

  • IAMコンソールでユーザーをクリックしてしておきます。
  • [Security credentials]タブで、[HTTPS Git credentials for AWS CodeCommit]で、[Generate credentials]をクリックして、ウンロードしておきます。

 

これにより、リポジトリのクローン作成中に使用されるユーザー名とパスワードが生成されます。

 

Git リポジトリの作成

aws codecommit create-repository --repository-name WebFiles --repository-description "This is a Repository for web files" --region ap-northeast-1

 

CodeCommitコンソールで新しいリポジトリを見ることができます。

 

クローンリポジトリ

  • CodeCommitコンソールからhttpsのURLを取得しておきます。

 

  • このコマンドを使用してGitのクローンをします。クローンするとき、ダウンロードした認証情報ファイルのユーザー名とパスワードを使います。
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/WebFiles

 

CodeCommitリポジトリへのファイルの追加

 

  • ファイルを作成しておきます。
vi index.html
# appsec.yml file to define lifecycle event hooks
vi appspec.yml
# Create new directory for scripts
mkdir scripts
cd scripts
# script to install httpd server
vi install_dependencies.sh
# script to start and stop server
vi start_server.sh
vi stop_server.sh

 

  • Appspec File - EC2プラットフォームの AppSpec ファイルは、デプロイライフサイクルイベントに応じて実行するライフサイクルイベントフックを決定します。
version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies.sh
      timeout: 300
      runas: root
    - location: scripts/start_server.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: root

 

  • install_dependencies file - このファイルでは、httpdをインストールするためのコードがあります。
#!/bin/bash
yum install -y httpd

 

  • start_server file - このファイルでは、サーバーをスタートするためのコードがあります。
#!/bin/bash
systemctl start httpd.service

 

  • stop_server file - このファイルでは、サーバーをストップするコードがあります。
#!/bin/bash
isExistApp=pgrep httpd
if [[ -n $isExistApp ]]; then
systemctl stop httpd.service   
fi

 

  • 変更をコミットしておきます。
git add .
git commit -m "added file"

 

  • CodeCommitリポジトリに変更をプッシュしておきます。
git push origin master

 

  • CodeCommitリポジトリでファイルを見ることができます。

 

 

 

EC2インスタンスを作成する

インスタンスロールの作成

  • この設定でインスタンスロールを作成しておきます。
    • 信頼されたエンティティの種類 : AWS のサービス
    • ユースケース : EC2
    • ポリシー  :  AmazonEC2RoleforAWSCodeDeploy
    • ロールの名前 :   EC2RoleforCodeDeploy

 

インスタンスの作成

  • この設定でインスタンスを作成しておきます。
    • AMI : Amazon Linux 2 AMI
    • インスタンスタイプ : t2.micro
    • IAM ロール : 前の手順で作成した IAM ロール をアタッチしておきます。[EC2RoleforCodeDeploy]
    • Tag : [Name : codedeploy]
    • セキュリティグループ : SSH と HTTP
    • UserData : 以下のコードをUserDataに追加します

 

EC2インスタンスにCodeDeployエージェントをインストールする

  • SSHでインスタンスに接続しておきます。
  • EC2インスタンスにCodeDeployエージェントをインストールするために、以下のコマンドを実行しておきます。

 

sudo yum -y update
sudo yum install -y ruby
sudo yum install -y wget
cd /home/ec2-user
#To get the CodeDeploy Agent
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
#installs latest version of the CodeDeploy agent
sudo ./install auto
#To check if the CodeDeploy service is running
sudo service codedeploy-agent status

 

CodeDeployエージェントがインストールされました。

 

CodeDeploy でアプリケーションを作成する

CodeDeploy サービスロールの作成

  • この設定でサービスロールを作成しておきます。
    • 信頼されたエンティティの種類 : AWS のサービス
    • ユースケース : CodeDeploy
    • ポリシー  :  AWSCodeDeployRole
    • ロールの名前 :  CodeDeploy

 

アプリケーションの作成

  • CodeDeploy コンソールを開いて、[Create application] を選択しておきます。
  • アプリケーション名を入力しておきます。
  • Compute Platformで EC2/オンプレミス]を選択しておきます。
  • Create applicationをクリックしておきます。

 

 

デプロイグループの作成

  • CodeDeploy コンソールのアプリケーションページで、Create deployment groupを選択しておきます。

 

  • デプロイグループ名を入力して、前の手順で作成した サービスロール[CodeDeploy] をアタッチしておきます。

 

  • Deployment Type で [In-place]を選択して、Environment  configurationでEC2をチェックして、EC2インスタンスのTagを入力しおきます。

 

  • Deployment設定で、CodeDeployDefault.OneAtaTimeを選択します。
  • Load Balancerをダイアブルして、[Create Deployment group]をクリックしておきます。

 

CodePipelineでPipelineの作成する

  • CodePipelineのコンソールで、Create pipelineをクリックして、パイプライン名を入力して、Nextをクリックしておきます。

 

  • SourceでAWS CodeCommitを選択しておきます。
  • 前の手順で作成したリポジトリを選択して、masterブランチを選択して、Nextをクリックしておきます。

 

  • Build stageのスキップします。
  • Deploy providerでAWS CodeDeployを選択しておきます。
  • 前の手順で作成したアプリケーションとデプロイグループを選択して、Pipelineを作成しておきます。

 

  • パイプラインの実行は成功しました。

 

  • EC2インスタンスのPublic DNSを使ってWebApplicationをチェックしておきます。

 

まとめ

AWS CLIでCodeCommitを使用してGitリポジトリを作成して、CodePipelineを使用してCodeCommitリポジトリのコードをデプロイしてみました。