CodeDeployを使ってLaravelをEC2にデプロイした時のメモ


リポジトリを作成する

CodeCommitにリポジトリを作成する
sshかhttpで接続出来るようにしてプッシュ

EC2を作成する

コンソールからEC2を作成する
CodeDeploy Agentをインストールする

sudo yum update
sudo yum -y install ruby wget
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
# sudo service codedeploy-agent start

IAMロールを作成する

EC2用のIAMロール
- AmazonEC2RoleforAWSCodeDeploy
CodeBuild用のIAMロール
- AmazonSSMReadOnlyAccess
- (kms:Decryptを許可するポリシー)
CodeDeploy用のIAMロール
- AWSCodeDeployRole

CodeDeployの設定

CodeDeployのアプリケーションを作成する
CodeDeployのデプロイグループを作成する
Codepipelineを作成する
appspec.ymlを作成する
appspec.ymlは必ずしもルートディレクトリに置く必要はなく、ビルドプロジェクト毎に別のファイルを使用することも可能

appspec.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/app

hooks:
  BeforeInstall:
    - location: scripts/beforeinstall.sh
      runas: root
  AfterInstall:
    - location: scripts/afterinstall.sh
      runas: root
  ApplicationStart:
    - location: scripts/applicationstart.sh
      runas: root

permissions:
  - object: /var/www/app/scripts
    pattern: "**"
    owner: ec2-user
    group: nginx
    mode: 774
    type:
      - file

buildspec.ymlを作成する
buildspecはルートディレクトリに置く必要がある

buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      php: 7.4
      nodejs: 12
  pre_build:
    commands:
      - echo "pre-build"
      - aws ssm get-parameter --with-decryption --name .env.production --query Parameter.Value | sed -e 's/^"//' -e 's/"$//' -e 's/\\\"/\"/g' | awk '{gsub(/\\n/,"\n")}1' > .env
  build:
    commands:
      - echo "build"
      # Composerインストール
      - composer install
      - npm install
      - npm run prod

artifacts:
  files:
    - '**/*'