0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ASP.Net coreのAPIアプリをFargateにアップする。

Posted at

今回は、以前の記事で作成したDockerでのASP.Net core本番環境のDockerイメージを使用してFargateにアップし動かしてみました。

本番環境用のDockerfile

プロジェクト名はteamevです。
以下、ASP.Net Coreの開発環境をDockerで作成するのマルチステージビルドで作成した軽量イメージを使用します。

Docker.production
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
ENV ASPNETCORE_ENVIRONMENT=Production
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY teamev.api.csproj ./
RUN dotnet restore
COPY . .
ENV PATH="$PATH:/root/.dotnet/tools"
RUN dotnet publish -c Release -o /app/publish 

FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT [ "dotnet", "teamev.api.dll" ]

イメージをビルドし、ECRにプッシュ

AWSコンソールにログインし、「ECRと検索」→ 「リポジトリ」→ 「リポジトリを作成」でリポジトリを作成します。
作成したリポジトリを選択し、プッシュコマンドの表示を選択すると、以下のようにコマンドを出してくれるので、このコマンドを上からコピペしてECRにpushします。
スクリーンショット 2022-03-08 10.07.39.png

最後のコマンドを打ち、push成功したらAWSコンソール画面に行きイメージが入っていることを確認します。

AWSの基本設計

ECRにイメージのプッシュに成功すると、Fargateを動かしていくのですが、その前にネットワークを作成します。今回は、簡単な設計にしています。

Untitled Diagram.drawio.png

それでは、以下からpublic subnetにECRにpushしたイメージを使用してFargateを起動させようと思います。

ECS on FARGATE の設定

以下の手順で作成していきます。

  1. クラスターの作成
  2. タスク定義の作成
  3. サービスの作成

クラスターの作成

検索でECS → 左タブからクラスター → クラスターの作成から作成します。
スクリーンショット 2022-03-08 11.17.36.png
ネットワーキングのみを選択します。

スクリーンショット 2022-03-08 11.19.00.png
クラスター名を記述(なんでもいいです)、ネットワーキングはまだすでに作成しているのでチェックは入れません。(作成していない方はここから作成できます。)

次へを押し、内容を確認し作成するとクラスターが作られます。

タスク定義の作成

タスク定義 = docker-compose.ymlと考えていいかもしれません。
左タブからクラスター定義を選択し、「新しいタスク定義の作成」を選択します。
起動タイプの互換性の選択でFARGATEを選択します。
スクリーンショット 2022-03-08 11.25.33.png

タスク定義を実際に行なっていきます。
今回は、
定義名: teamev-task-definition(適宜変更)
ロール: ecsTaskExcutionRole
ネットワークモード: awsvpc
オペレーティングシステムファミリー: Linux
タスクメモリ (GB): 0.5GB
タスク CPU (vCPU): 0.25vCPU
にしています。

そして、コンテナの追加を行います。
ここで、ECRのリポジトリのURIが必要になるのでコピーしておきましょう。
コンテナ名: teamev-container
イメージ: ECRでコピーしたレポジトリのURI
ポートマッピング: 80(イメージで吐き出してるポートと合わせないといけないみたいです。今回は80)
スクリーンショット 2022-03-08 11.43.30.png

追加し、タスク定義を作成します。

サービスの作成

先ほど作成したクラスターを選択しサービスを作成します。
起動タイプ: FARGATE
タスク定義: 先ほど作成したタスク定義(今回の場合、teamev-task-definition)
サービス名: teamev-service
タスクの数:1
ネットワーク: 作成したVPC、FARGATEを置きたいsubnet、セキュリティーグループ(今回は、勝手に作られるもの(インバウンドポートは80))を選択
ロードバランサーは今回は使用しないのでなしを選択でいきます。

最後に、サービスを作成します。

すると、以下のようにタスクがRUNNINGになることが確認できます。( 少し時間がかかります。)
スクリーンショット 2022-03-08 11.54.11.png

あとは、ちゃんと動いているか確認します。

動作確認

RUNNINGのタスクを選択し、public IPを取得します。
このPublic IPを使用して、POSTMANでapiがちゃんと動いているか確認します。
スクリーンショット 2022-03-08 12.20.10.png

値が返ってきました!!

最後に

今回はDB接続周りもやってるんですが、それは次回書こうと思います。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?