LoginSignup
0
0

More than 1 year has passed since last update.

playframeworkで作ったアプリケーションをECSで動かす

Last updated at Posted at 2021-12-30

AWSコンテナ設計・構築本格入門のおかげでなんとかECSを触れるようになったので、playframeworkを動かすところまで整理。

ECS Fargete1.4
CDK 2.3

です。参考書籍はCloudFormationと一部consoleからの手作業でしたが、CDK & 全部自動化が目標

完成品(仮)はこちら
https://github.com/tky/play-ecs-template
ap-northeast-1に作ると今ある何かとぶつかるんじゃないかと思ってap-northeast-2に作ります。
vpcも10.1.0.0/16で作ります。

自動化できていないところ

  • nginxのlocationでLoad BalancerのDNSを手動で設定しないといけない
  • fluent-bitで出力するs3 bucketの作成とextra.confの編集

nginxのほうはService Discoveryで解決できそうなのでなんとかしたいところです。

まだやっていないところ

  • DBの作成

step1. VPCとか作る

nginxようのsubnet2つ
applicationようのsubnet2つ
Databaseようのsubnet2つ(まだ使ってない。。)
VPC Endpointようのsubnet2つ
管理ようのsubnet1つ(これもまだつかってない。。)
VPC Endpoint作成
と各種セキュリティグループ作ります。

$ cd cdk
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ cdk deploy NetworkStack

step2. playframeworkのclusterを作成

ECR作成

$ cd cdk
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ cdk deploy EcrStack

imageを登録

$ cd application
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ docker image build -f docker/Dockerfile_app_prd -t sample .
$ docker image tag sample ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/sample
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker image push ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/sample

clusterを作成

$ cd cdk
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ cdk deploy ApplicationStack

Step3. nginxのclusterを作成

nginxのdefault.confのlocationをstep2で作ったELBに書き変える。
(このあたりService Discovery使えればいいんでしょうが。。)
https://github.com/tky/play-ecs-template/blob/master/nginx/default.conf

nginxのimage作成してECRに登録

$ cd nginx
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ docker image build -t nginx .
$ docker image tag nginx ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/nginx
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker image push ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/nginx

fluent-bitのimageを作成してECRに登録
ログの保存先を指定する必要があります。
適当にs3 bucketつくってextra.confを編集してください。
https://github.com/tky/play-ecs-template/blob/master/log-router/extra.conf

    bucket play-ecs-template-log-bucket // ここのところを作ったものに変える

imageを作成して登録

$ cd log-router
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ docker image build -t log-router .
$ docker image tag log-router ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/log-router
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker image push ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/log-router

clusterを作成

$ cd cdk
$ export AWS_ACCOUNT_ID=${YOUR_AWSACCOUNT_ID}
$ cdk deploy FrontStack

nginx, application両方ともECS Execでログインできます。

ハマったところ

CDKのversionが違う

現時点だとネットの情報は大体1系なのでimportの@aws-cdkをaws-cdk-libにする。

import * as ec2 from "@aws-cdk/aws-ec2"; -> import * as ec2 from "aws-cdk-lib/aws-ec2";

いろんなリソースを勝手に作ってしまう

ec2.Subnetとか自動で色々作ってくれて便利な反面、細かい制御ができなかったりする。
そう言う場合はCfnSubnetつかえば何とでもなる。
大体CfnXXXが存在するみたい。

参考文献など

AWSコンテナ設計・構築本格入門
https://dev.classmethod.jp/articles/ecs-exec/
https://zenn.dev/xeres/articles/2021-12-08-aws-cdk-ecs-patterns-and-ecs-exec
https://zenn.dev/hkdord/articles/process-of-writing-cdk
https://github.com/aws-samples/aws-cdk-examples

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0