📦

【AWS】ECS・Fargateを使用してExpressをデプロイする手順

2023/11/05に公開

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