Closed9
ECSにデプロイできるようにDocker環境を構築する
localで起動するdocker-compose.ymlを作成
- nginx
- php-fpm
- Laravelソースをそれぞれコピー
- Laravelルートにdocker-compose.ymlを配置。
- Dockerfileなどは Laravelルートの_dockerフォルダへ。
- DockerfileからLaravelソースを操作できるようにcontext設定
docker-compose.yml
services:
nginx:
build:
context: ./
ここまでのyml
docker-compose.yml
version: "3.9"
services:
nginx:
build:
context: ./
dockerfile: ./_docker/nginx/Dockerfile
ports:
- "80:80"
php-fpm:
build:
context: ./
dockerfile: ./_docker/php-fpm/Dockerfile
imageを作成し動作確認
nginxのイメージを作成
# docker build -t [イメージ名] [イメージを作成する時に参照するディレクトリ] -f [dockerfileの指定]
docker build -t nojira-nginx . -f _docker/nginx/Dockerfile
docker-compose.ymlのimageを指定
docker-compose.yml
version: "3.9"
services:
nginx:
image: nojira-nginx
ports:
- "80:80"
起動確認
docker compose build --no-cache
docker compose up -d
php-fpmのイメージを作成
# docker build -t [イメージ名] [イメージを作成する時に参照するディレクトリ] -f [dockerfileの指定]
docker build -t nojira-php-fpm . -f _docker/php-fpm/Dockerfile
docker-compose.ymlのimageを指定
docker-compose.yml
version: "3.9"
services:
php-fpm:
image: nojira-php-fpm
起動確認
docker compose build --no-cache
docker compose up -d
ここまでのdocker-compose.yml
docker-compose.yml
version: "3.9"
services:
nginx:
image: nojira-nginx
ports:
- "80:80"
php-fpm:
image: nojira-php-fpm
ECRにpush
# aws cli プロフィール変更
less ~/.aws/credentials
export AWS_DEFAULT_PROFILE=nojira
# とりあえずアカウントあっているか見ておく
aws s3 ls
# ECRログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <accountId>.dkr.ecr.ap-northeast-1.amazonaws.com
# ECRログアウト(作業完了時に忘れずに)
docker logout <accountId>.dkr.ecr.ap-northeast-1.amazonaws.com
ECRリポジトリを作成 nginx用とphp-fpm用
# aws ecr create-repository --repository-name <リポジトリ名> --region <リージョン>
aws ecr create-repository --repository-name nojira/nginx --region ap-northeast-1
aws ecr create-repository --repository-name nojira/php-fpm --region ap-northeast-1
ローカルのimageにECRリポジトリのタグをつける
docker tag nojira-nginx:latest <accountId>.dkr.ecr.ap-northeast-1.amazonaws.com/nojira/nginx:latest
docker tag nojira-php-fpm:latest <accountId>.dkr.ecr.ap-northeast-1.amazonaws.com/nojira/php-fpm:latest
ECRにpushされていることを確認
aws ecr list-images --repository-name nojira/nginx --region ap-northeast-1
aws ecr list-images --repository-name nojira/php-fpm --region ap-northeast-1
ECS設定
タスク定義を作成
- EC2
- コンテナの追加
-
コンテナ名:nginx
- イメージ:nojira/nginx ECRのリポジトリのURI
- メモリ制限 : 適宜(128)
- ポートマッピング: 80:80
- (php-fpmコンテナ追加後)スタートアップ依存順序 : php-fpm START
- (php-fpmコンテナ追加後)ネットワーキングの設定 > リンク : php-fpm:php-fpm
-
コンテナ名:php-fpm
- イメージ:nojira/php-fpm ECRのリポジトリのURI
- メモリ制限 : 適宜(128)
-
クラスターを作成
- EC2 Linux + ネットワーキング
- クラスター名:nojira-cluster
- インスタンスタイプを選択 (t3.micro)
サービスを作成
- EC2
- タスク定義:nojira-task
- クラスター:nojira-cluster
- サービス名:nojira-service
- タスクの数:1
動作確認
サービス > タスクのステータスがRUNNINGになったら
EC2 インスタンスのパブリック IPv4 アドレスにアクセス
Laravel画面が表示される
ECSにALBを追加する
ターゲットグループを作成
- ターゲットタイプ:インスタンス
- VPCをECSクラスターに合わせる
ALBを作成
- ターゲットグループを紐付ける
タスク定義の新しいリビジョンを作成
- nginxコンテナのポートマッピングを変更
設定なし:80
ECSのサービスを作成
- ロードバランシング:Application Load Balancer
- 作成したALBを選択
- ロードバランス用のコンテナ:nginx:0:80 を追加
- ターゲットグループ名:作成したターゲットグループ選択
EC2インスタンスのセキュリティグループ修正
- インバウンドルールにALBのセキュリティグループからの全てのトラフィックを追加
ELBのDNSで動作確認
SSL対応
- ACMを設定
- ALBのセキュリティグループにHTTPS追加
- ALBリスナーにHTTPS追加 ターゲットグループに向ける
- ALBリスナーのHTTPをHTTPSにリダイレクト
- Route53のホストからALB参照
ドメインで動作確認
- HTTP・HTTPS両方
DB接続する
RDSを作成
- Aurora(MySQL互換)
- パブリックアクセスなし
- セキュリティグループはECSインスタンスのセキュリティーグループからの3306インバウンドのみ
- 初期データベース作成しておく
ECSインスタンスのセキュリティーグループで
- インバウンド 22ポート マイIP
- アウトバウンド3306 RDSセキュリティグループ
ECSクラスターを再作成
- インスタンスにSSH接続可能にする
ローカルからSSH経由で接続確認
(EC2から接続確認)
EC2にSSH接続
sudo yum update
sudo yum install mysql
mysql -h <RDSエンドポイント> -u <DBユーザー> -p
php-fpmコンテナから接続確認
docker ps
docker exec -it <php-fpmのコンテナID> bash
コンテナ内でlaravelのmigrationコマンド実行
php artisan migrate:status
php artisan migrate
ネットワークの設定は先にすべき。
ECSクラスター作成時にVPCなどを新規作成すると、ECSのcloudformationにも記述されるため、ECS削除時にエラーになる。。
VPC作成
IP CIDR ブロック:10.0.0.0/16
パブリックサブネット:
ルートテーブル/ネットワーク ACLが作成される
サブネットを2つ作成
Subnet1
VPC 上記で作成したVPCを選択する
AZ :ap-northeast-1a
CIDR 10.0.0.0/24
パブリックIP自動割り当て:はい
Subnet2
AZ :ap-northeast-1c
10.0.1.0/24
パブリックIP自動割り当て:はい
インターネットゲートウェイ追加
作成後、VPCにアタッチ
ルートテーブル
ルールを編集から
0.0.0.0/0 インターネットゲートウェイ検索
セキュリティグループ作成
- sg-alb用
インバウンド 80/443
アウトバウンド 全てのトラフィック - sg-ecs用
インバウンド 80/22
アウトバウンド 3306(sg-db)
-sg-db
インバウンド3306(sg-ecs)
ECSのログ設定
laravel 環境設定 LOG_CHANNELをstderrにする(要改善)
ECSタスク定義のコンテナ > ログ設定
このスクラップは2021/12/12にクローズされました