📦
【AWS】ECS・Fargateを使用してExpressをデプロイする手順
ECSとFargateを使用して、Expressアプリケーションをコンテナにデプロイするまでの手順を解説します。
用語整理
-
ECS
- aws上でDockerコンテナを管理するサービス
-
Fargate
- ecs管理下で実行できる、サーバレスのコンテナ実行環境
-
ECR
- aws上のDockerImageレジストリサービス
- ecrに対して動かしたいDockerfileやソースコードをpushする
-
ECS Cluster
- コンテナを配置するFargateやec2のグループ
- docker-compose的なやつ
-
ECS Tasks
- コンテナ単位の設定
- image urlやコンピュータの設定する
-
ECS Service
- Cluster内で実行するTaskを管理する
- taskをグループ化して、どのclusterにデプロイするかを設定する
- 利用するnetworkやelbを指定する
実装
expressアプリ作成
getのAPIを一本実装
import express, {Application, Request, Response} from "express"
const app: Application = express()
const port: number = 8080
app.get("/", (_req: Request, res: Response) => {
res.send("hello express to ecs")
})
app.listen(port, () => {
console.log(`express app listening on port ${port}`)
})
Dockerfile作成
ECRにpushする為のDockerfileと.dockerignoreを作成
Dockerfile
FROM node:20
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
COPY . .
EXPOSE 8080
CMD [ "yarn", "start" ]
.dockerignore
node_modules
ECR Repository作成
自分がpushしたdocker imageを管理する為のrepositoryを作成。
作成したrepositoryを開いてpush commandを確認し、任意のディレクトリで実行。
ECS Cluster作成
クラスター名や実行環境を選択して作成
ECS Task作成
タスク名や実行環境を選択し、コンテナ毎のimage urlやportも指定して作成
ECS Service作成
タスクファミリーやelb経由のdnsを設定して作成
※事前にネットワークリソースとelbを作成している事が前提
dnsアクセス
デプロイしたコンテナにelb dns経由でアクセス。
index.tsで定義したapiにアクセスが成功。
終わりに
今回は以上になります。
ここまで読んで頂き、ありがとうございました。
Discussion