Docker上で動くLaravel(PHP)をAWS ECSにデプロイする/codepipeline codecommit codebuild ECR ECS

Pocket

Docker上で動くLaravel(PHP)をAWS ECSにデプロイする/codepipeline codecommit codebuild ECR ECS

どんな環境?

  • apache
  • laravel(PHP)
  • docker

どんなAWSサービスを使うの?

  • codepipeline
  • codecommit
  • codebuild
  • ECR
  • ECS

具体的にどんな感じ?

ローカル開発環境で開発後、codecommitへpushした後のECSへのデプロイを自動化する

こんなフロー

ローカル開発環境で開発→codecommitへpush→codepipelineが動き出し、codebuildを実行

→実行が終わったらdockerイメージをECRへ格納→再びcodepipelineに戻りECSへのデプロイを実行

ローカル開発環境の作成

Laravelインストール

dockerファイルの作成

apacheのconfファイル作成

docker立ち上げ

動作確認

AWSでの作業

codecommit

リポジトリ作成

リポジトリ名:laravel-docker

後は設定を変えずに作成

ECR

リポジトリ名:laravel-dockerで作成する

codebuild

buildspec.ymlの作成

ビルドプロジェクトを作成

プロジェクト名:laravel-docker-build

ソースプロバイダ:CodeCommit

リポジトリ:laravel-docker

イメージ:「x86_64」を含むものを選ぶ

特権付与:チェックを入れる

後は設定を変えずに作成

ロール設定

ロール「codebuild-laravel-docker-service-role」に「AmazonEC2ContainerRegistryPowerUser」ポリシーをアタッチする

ECS

クラスターの作成

クラスターを作成ボタンをクリックし、EC2 Linux + Networkingを選択する。

クラスター名:laravel-cluster

EC2インスタンスタイプ:t2.micro

後は設定を変えずに作成

タスクの定義

タスク名:laravel-docker-task

「コンテナの追加」を押下し、以下の設定をする

 

コンテナ名:laravel-docker-container

イメージ:ECRのリポジトリURI

ホストポート:80

コンテナポート:80

後は設定を変えずにタスクを作成

 

次にタスクを実行する

サービス

クラスタ:laravel-cluster

サービス名:laravel-docker-service

タスクの数:1

ロードバランサの設定をする

後は設定を変えずに作成

codepipeline

まずはpush

codepipeline作成

ソースプロバイダー:AWS CodeCommit

リポジトリ:laravel-docker

ブランチ名:master

プロバイダ:AWS CodeBuild

プロジェクト名:laravel-docker-build

プロバイダー:Amazon ECS

クラスタ名:laravel-cluster

サービス名:laravel-docker-service

後は設定を変えずに作成

動作確認

EC2インスタンスのIPをコピーして、ブラウザーに貼り付けアクセスしてみる

laravelのwelcome画面が表示されれば成功