kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

CodePipeline + CodeBuild +CodeDeployでlaravelアプリをリリース

awsの機能を利用してlaravelアプリをdeployするところまでやる方法です。

  • Github
  • PHP
  • laravel8
  • Aws Codepipeline, codebuild, codedeploy
  • Ec2

aws準備

  • codedeploy作成
  • codebuild作成
  • codepipeline作成

codepipelineでcodebuild, codedeployを使用するため先に作成します。

codebuild

awsのconsoleよりcodebuild作成

buildspec.ymlを作成し、設定を記述

version: 0.2
phases:
  install:
    runtime-versions:
      php: 7.4
  pre_build:
    commands:
      ## キャッシュを利用する
      - cp -r /root/.composer_cache/ /root/.composer/
  build:
    commands:
      - composer install
  post_build:
    commands:
      - cp -r /root/.composer/ /root/.composer_cache/
artifacts:
  files:
    - '**/*'
cache:
  paths:
    - '/root/.composer/**/*'

composerをcacheしてリリース速度をあげようとしたが、たぶんcacheされていない気がします。設定が間違っていそう。

codedeploy

appspec.ymlのsourceを「/」-> 「.」に変更

kazu22002.hatenablog.com

codepipeline

sourceにリリースしたい検知するGithubのブランチを指定

buildにcodebuildを指定

deployにcodedeployを指定

codepipelineは準備ができていれば簡単に作成できます。

実行はパイプラインで「変更をリリースする」を実行することで実行されます。

codedeployの罠

codedeployで配置する場所に既にファイルがある場合、エラーになります。codedeployはバージョンを持っており、前回のリリース時と比べて余計なものがある場合エラーにします。

最初は空のディレクトリで試すことをお勧めします。

codedeployのバージョンは/opt/codedeploy-agent/deployment-root/ 配下にファイルがあり、初期設定で5バージョン保持されています。

codedeployを使用していて容量が圧迫された場合に、一度見てみるといいでしょう。

なぜcodebuildを使用

ec2のインスタンスをt3.microにしていた影響でcomposer installがメモリ不足でエラーを吐く自体になり、別の場所でパッケージをinstallをしたものをリリースする形にしました.

料金

無料枠

  • codepipelineは1month 1line 無料, 1line 1$ from 2line . また作成して30日以内は無料
  • codebuildは1 か月あたりビルドを 100 分
  • codedeploy EC2、Lambda、ECSにdeployは無料

まとめ

正直わからない部分が多すぎて時間がかなりかかりました。

過去に記事を書いていると思っていたが書いていなかった模様。

作成したのが2,3ヶ月前のためほとんど覚えていませんね。記事もかなり適当になってしまっています。

かなり苦労したんだけど、結果としてリリースまでに毎回1-2分ぐらいかかります。

build時間が1分程度かかるし、なんか他の方法を考える必要ありそう。

ただ一度作成しておけば、リリースはこれを実行すればいいため久しぶりのプロジェクトでもコードに集中できるのがいい。最初に苦労しておけば同じ苦労が少なくなるのはシステムにするメリットですね。

ただ頻繁にリリースするプロジェクトの場合は、高速化が必須になるためこの状態で使い続けるのは厳しい。jenkinsで自由度がある時は楽だった。使うつもりはないけど、一度環境を整えると楽になることに時間を使うのは悪くない。

ただアプリケーションに集中したいときに構築するには時間がかかりすぎたためもっとテンプレート化されてほしい。

laravelアプリのリリースとか結構一般的だと思うんだけど、意外とほしいところまでやっている情報が少ないですね。やっぱり英語で探す必要があるかな。

codedeploy関係の過去記事

kazu22002.hatenablog.com

kazu22002.hatenablog.com

kazu22002.hatenablog.com