近年のプロジェクトではアプリのデプロイに関して、サーバーに入ってgitコマンドを打つようなケースは減ってきており、何らかのデプロイツールを使ってやることが一般的。
CIツールを使ってデプロイ(git仕様)
一番簡便な方法としてはCIツールからSSHでサーバーにログインして、CIツールからgitコマンドを入力させるもの。
CIにSSHキーを登録すればすぐにできるため、非常に簡便。
が、以下のようなデメリットもあり。
- そもそもサーバーにgitが入っていないとNG。近年ではサーバーレスになっていることも多く、そもそもgitをインストールしないといけない
- サーバー構成が複数になっていた場合、コマンドが複雑になる、完全な同時タイミングのデプロイは難しい?
一般的にはストレージサービスに成果物をzipで固めて、配置しておき、それをデプロイするといったようなケースが一般的かと思います。
CodeDeployを使ったデプロイ
AWSのデプロイ自動化ツールのようで、EC2のような一般的なサーバーのみならず、lambdaなどもあり。
メリットに関して。
- デプロイ前、後のコマンドを記載し、実行させることができる
- 複数のサーバー群に対してのデプロイを一気に行うことができる
- デプロイ履歴をログに残しておくことができる
- ロールバック機能などもある
成果物自体はS3などにあげておき、ここから取り出すというケースが一般的。
イメージとしては、以下のような感じ
- CodeDeployからEC2に命令を送る
- EC2がS3に成果物を取りに行く
(CodeDeployが取りに行かせていると言ったほうが正確かも) - 実際に成果物をデプロイし、デプロイ前後のコマンドを実行
実際の構築作業
大まかな流れに関して
- CodeDeployでアプリケーションとデプロイグループの作成(タスク作成)
- CodeDeployのIAMロールを作成し、付与
- EC2からS3にアクセスできるように、ポリシーを追加し、EC2にIAMロールを付与
- EC2がCodeDeployを実行できるように(CodeDeployからの指令を受け取れるように)、CodeDeployエージェントをインストール
- ソース側にデプロイ時の手続きについて作成(appspec.ymlとシェルスクリプト)。
appspec.yml・・パーミッションやデプロイ先
シェルスクリプト・・php artisanなどのアプリのインストールコマンド - CIツール起動時にCodeDeployを叩く
ちなみに上のような流れに関しての具体的なAWSの設定方法やインストールコマンドは以下の教材の6章に非常に丁寧に書かれてます。(全てスクショが入っているので非常にわかりやすい・・・CIツールから直でデプロイする手段についても記載あり。)
ここまでのクオリティの教材はすごい・・・・(アフィリ&ステマではありません)