はじめに
今回はハンズオンを使用してCodeサービス群触ってみたので記事にしてみました。
行ったこととしてはEC2インスタンスをデプロイ先としてソースコードを自動でビルド、デプロイするパイプライン作成です。
記事の対象者
- AWS初学者
- AWS Codeサービス群を触ってみたい方
作成する構成
※Cloud9は廃止しているのでCloudShellを使用しています
使用するサービス
- CloudShell
- EC2
- S3
- CodePipeline
- CodeCommit
- CodeBuild
- CodeDeploy
各ファイル
以下のリンクからindex.htmlをダウンロードしてください
AWS Hands-on for Beginners
EC2インスタンスの作成
-
ssh接続してApacheインストールを行う
[ec2-user@ip-172-17-113-135 ~]$ sudo yum install httpd -y
[ec2-user@ip-172-17-113-135 ~]$ sudo systemctl start httpd.service
[ec2-user@ip-172-17-113-135 ~]$ sudo systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[ec2-user@ip-172-17-113-135 ~]$
- CodeDeployエージェントをインストールする
以下のページを参照してインストールを実行します
Amazon Linux または RHEL 用の CodeDeploy エージェントをインストールする
[ec2-user@ip-172-17-113-135 ~]$ sudo yum install ruby
[ec2-user@ip-172-17-113-135 ~]$ sudo yum install wget
[ec2-user@ip-172-17-113-135 ~]$ cd /home/ec2-usercd /home/ec2-user
[ec2-user@ip-172-17-113-135 ~]$ wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/installwget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
※wget以降の値はリージョンによって可変となります
※前半のxxxにはbucket-name 置換、後半にはリージョン識別子をリージョンに沿って入力します
wget https://xxx.s3.xxx.amazonaws.com/latest/install
- 権限変更
[ec2-user@ip-172-17-113-135 ~]$ chmod +x ./installchmod +x ./install
- エージェントの最新バージョンをインストール
[ec2-user@ip-172-17-113-135 ~]$ sudo ./install auto
- サービス確認
systemctl status codedeploy-agent
- 実行されていない場合
systemctl start codedeploy-agent
- EC2インスタンスのパブリックIPアドレスからhttp接続してみてテストページが出力される
以上でデプロイ先となるEC2インスタンスは作成完了です。
CodeBuildの設定
プライマリ:CodeCommit
ビルド仕様:buildspecの使用
アーティファクト:S3(アーティファクト用に作成したバケット)
-
以下のbuildspec作成してCloudShellにアップロードする(自分はテキスト作成したのちyml形式でアップロードしました)
version: 0.2
phases:
build:
commands:
- aws deploy push --application-name xxx --s3-location s3://awsc-s3-280-uchimura-artifact/artifact.zip --source src
artifacts:
files:
- '**/*'
base-directory: src
※アプリケーションネームは後で変更する
※S3nameは自身で作成したアーティファクト用バケット名を入力
CodeDeployの設定
-
環境設定はデプロイ先となるEC2インスタンス
※CodeDeployエージェントのインストールは無効にする
※ロードバランサーもなし -
appspecを作成してindex.htmlと同じsrcディレクトリに格納する
version: 0.0
os: linux
files:
- source: index.html
destination: /var/www/html/
- 作成後gitをプッシュする
[cloudshell-user@ip-10-134-29-131 awsc-280-uchimura-handson]$ git add -A
[cloudshell-user@ip-10-134-29-131 awsc-280-uchimura-handson]$ git commit -m "fix"
[cloudshell-user@ip-10-134-29-131 awsc-280-uchimura-handson]$ git push origin master
ここまでできたら次でCLIからindexをいじった後プッシュするとデプロイしてくれるpipelineを作成します。
CodePipelineを使用して自動化
CodePipelineのリソースを作り、CLI環境からgitのpushをトリガーに構築を自動で行うようにする
以上でCLIからソースコードを編集してgit commit、git pushしたらCodeCommitに反映され、この反映をトリガーにCodePipelineが検知して自動でデプロイをしてくれる仕組みを作成できました。
感想
今回単一のEC2インスタンス上にデプロイしましたが、LB以下の複数のインスタンスにデプロイしたり、別の言語でパイプラインを組んだりなどいろいろと応用していこうと思います。