AWS CLIでCodeCommitを使用してGitリポジトリを作成し、CodePipelineを使用してCodeCommitリポジトリのコードをデプロイしてみた。
はじめに
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リポジトリのコードをデプロイしてみました。