CodePipeline + CodeBuild +CodeDeployでlaravelアプリをリリース
awsの機能を利用してlaravelアプリをdeployするところまでやる方法です。
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を「/」-> 「.」に変更
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アプリのリリースとか結構一般的だと思うんだけど、意外とほしいところまでやっている情報が少ないですね。やっぱり英語で探す必要があるかな。