0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Codeサービスを使ってCI/CD環境の構築

Posted at

はじめに

今回はハンズオンを使用してCodeサービス群触ってみたので記事にしてみました。
行ったこととしてはEC2インスタンスをデプロイ先としてソースコードを自動でビルド、デプロイするパイプライン作成です。

記事の対象者

  • AWS初学者
  • AWS Codeサービス群を触ってみたい方

作成する構成

image0.jpeg
※Cloud9は廃止しているのでCloudShellを使用しています

使用するサービス

  • CloudShell
  • EC2
  • S3
  • CodePipeline
  • CodeCommit
  • CodeBuild
  • CodeDeploy

各ファイル

以下のリンクからindex.htmlをダウンロードしてください
AWS Hands-on for Beginners

EC2インスタンスの作成

  • 先にEC2インスタンスをターゲットとしたS3フルアクセス権限のIAMロールを作成しておきます
    Screenshot 2024-09-28 at 15-33-13 ロールを作成 IAM Global.png

  • EC2インスタンスの作成後IAMロールを変更して作成しておいたS3フルアクセス許可のIAMロールをアタッチ
    Screenshot 2024-09-28 at 15-52-05 IAM ロールを変更 EC2 ap-northeast-1.png

  • セキュリティグループの設定でhttpとsshをインバウンドルールに追加
    Screenshot 2024-09-28 at 16-00-06 CreateSecurityGroup EC2 ap-northeast-1.png

  • 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 ~]$
[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の設定

  • S3でartifactを渡す用のバケットを作成する
    Screenshot 2024-09-28 at 17-03-06 S3 バケットを作成 S3 ap-northeast-1.png

  • 以下の設定でCodeBuildのプロジェクト作成

プライマリ:CodeCommit
ビルド仕様:buildspecの使用
アーティファクト:S3(アーティファクト用に作成したバケット)

Screenshot 2024-09-28 at 17-09-39 ビルドプロジェクトを作成する CodeBuild ap-northeast-1.png
Screenshot 2024-09-28 at 17-10-05 ビルドプロジェクトを作成する CodeBuild ap-northeast-1.png
Screenshot 2024-09-28 at 17-10-15 ビルドプロジェクトを作成する CodeBuild ap-northeast-1.png

  • 自動で作成されるIAMロールにCodeDeployDeployerポリシーをアタッチする
    Screenshot 2024-09-28 at 17-12-49 ロール IAM Global.png
    Screenshot 2024-09-28 at 17-13-59 codebuild-awsc-codebuild-280-uchimura-handson-01-service-role IAM Global.png
    Screenshot 2024-09-28 at 17-14-50 許可を追加 IAM Global.png

  • 以下の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の設定

  • CodeDeploy用のIAMロールを作成
    Screenshot 2024-09-28 at 17-45-19 ロールを作成 IAM Global.png

  • アプリケーション作成
    Screenshot 2024-09-28 at 17-47-45 アプリケーションの作成 CodeDeploy ap-northeast-1.png
    ※viでいじってCodeDeployアプリケーションの作成で入力した名前を先ほどのbuildspecにも入れる
    スクリーンショット (91).png

デプロイグループの作成
Screenshot 2024-09-28 at 17-51-28 デプロイグループの作成 CodeDeploy ap-northeast-1.png

  • 環境設定はデプロイ先となるEC2インスタンス
    Screenshot 2024-09-28 at 17-52-13 デプロイグループの作成 CodeDeploy ap-northeast-1.png
    ※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
  • index.htmlがEC2インスタンスの/var/www/html/にプッシュされました
    プッシュした後EC2インスタンスのパブリックIPから接続してみると以下のページが出力されます
    スクリーンショット (93).png

ここまでできたら次でCLIからindexをいじった後プッシュするとデプロイしてくれるpipelineを作成します。

CodePipelineを使用して自動化

CodePipelineのリソースを作り、CLI環境からgitのpushをトリガーに構築を自動で行うようにする

  • リソース名
    Screenshot 2024-09-28 at 19-29-46 新規のパイプラインを作成する CodePipeline ap-northeast-1.png

  • gitのpush先
    Screenshot 2024-09-28 at 19-30-03 新規のパイプラインを作成する CodePipeline ap-northeast-1.png

  • gitをビルドする
    Screenshot 2024-09-28 at 19-30-43 新規のパイプラインを作成する CodePipeline ap-northeast-1.png

  • EC2インスタンスにデプロイ
    Screenshot 2024-09-28 at 19-31-26 新規のパイプラインを作成する CodePipeline ap-northeast-1.png

  • 作成後CLIでindex.htmlを編集してgitをプッシュしてみます
    スクリーンショット (94).png

  • パイプラインを確認
    Screenshot 2024-09-28 at 19-39-08 awsc-codepipeline-280-uchimura-01 CodePipeline ap-northeast-1.png
    完了まで待ちます

  • EC2インスタンスからWebサイトを確認
    スクリーンショット (95).png

以上でCLIからソースコードを編集してgit commit、git pushしたらCodeCommitに反映され、この反映をトリガーにCodePipelineが検知して自動でデプロイをしてくれる仕組みを作成できました。

感想

今回単一のEC2インスタンス上にデプロイしましたが、LB以下の複数のインスタンスにデプロイしたり、別の言語でパイプラインを組んだりなどいろいろと応用していこうと思います。

参考記事

認証ヘルパー
CodeBuildのリファレンス
CodeDeploy AppSpec ファイルリファレンス

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?