LoginSignup
0
0

ECSでAPIのバックエンドを動かしてみた

Posted at

やりたいこと

こちらで構築したEC2のAPIバックエンド環境をECSで構築する

手順

  1. Dockerfileを作成する
  2. ECRリポジトリを作成する
  3. ECSのタスク定義を作成する
  4. ECSのクラスターを作成する
  5. ECSのタスクを実行する
  6. APIを実行する

DockerFileを作成する

下記のDockerfileを作成しました。
内容的には、ビルドで作成したjarファイルをDockerfileと同じ場所に配置し、コンテナ内にコピーしたjarを起動しています(イメージのJavaは8です)

FROM openjdk:8-jre-alpine

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    SLEEP=0 \
    JAVA_OPTS=""

# add directly the jar
ADD *.jar /app.jar

EXPOSE 8080
CMD echo "The application will start in ${SLEEP}s..." && \
    sleep ${SLEEP} && \
    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar

ECRリポジトリを作成する

イメージをAWSに配置するため、ECRを作成してプッシュします。

Amazon ECR > Repositories > リポジトリの作成 をクリックします。
スクリーンショット 2023-05-25 8.21.50.png

今回はプライベートリポジトリのためプライベートを選択し、リポジトリ名を入力します。
スクリーンショット 2023-05-25 8.23.27.png

リポジトリの作成をクリックします。
スクリーンショット 2023-05-25 8.24.16.png

リポジトリが作成されました。
スクリーンショット 2023-05-25 8.25.17.png

プッシュコマンドの表示をクリックすると認証とイメージのプッシュ手順が表示されます。
スクリーンショット 2023-05-25 8.26.40.png

上記の手順通りに実施します。

  1. Dockerクライアントを認証
  2. Dockerイメージを構築
  3. イメージのタグ付け
  4. リポジトリにイメージをプッシュ

ECSのタスク定義を作成する

ECSのタスク定義を作成します。

Amazon Elastic Container Service > タスク定義 > 新しいタスク定義の作成 をクリックします。
スクリーンショット 2023-05-25 22.17.30.png

タスク定義ファイミリー名を入力します。
タスク定義名とイメージのURIを入力します。イメージのURIは先ほど作成したECRのURIです。
(今回はポートマッピングは80、プロトコルはTCP、アプリケーションプロトコルはHTTPです)
スクリーンショット 2023-05-25 22.20.40.png

今回はサーバレスとしたいめ、AWS Fargateを選択します。
CPU・メモリは好きに設定します。
タスクの実行ロールを設定します。既存の実行ロールがない場合は「新しいロールの作成」で自動的に作成されます。

スクリーンショット 2023-05-25 22.24.40.png

作成をクリックします。
スクリーンショット 2023-05-25 22.28.49.png

タスクの定義が作成されました。
スクリーンショット 2023-05-25 22.29.30.png

ECSのクラスターを作成する

実行にはクラスターが必要なため、作成します。

Amazon Elastic Container Service > クラスター > クラスターの作成 をクリックします。
スクリーンショット 2023-05-25 22.30.54.png

クラスター名を入力します。
サブネットを選択します。
スクリーンショット 2023-05-25 22.32.13.png

作成をクリックします。
スクリーンショット 2023-05-25 22.32.53.png

クラスターが作成されました。
スクリーンショット 2023-05-25 22.34.56.png

ECSのタスクを実行する

いよいよタスクを実行します。

Amazon Elastic Container Service > クラスター > タスクの定義 から新しいタスクの実行をクリックします。
スクリーンショット 2023-05-25 22.36.41.png

起動タイプはFargateを選択します。
スクリーンショット 2023-05-25 22.36.59.png

APIのバックエンド環境を実行したいため、Serviceを選択します。
作成したタスク定義を選択します。
サービス名を入力します。
スクリーンショット 2023-05-25 22.39.11.png

作成をクリックすると、タスクが実行され、サービスがデプロイされます。
スクリーンショット 2023-05-25 22.42.56.png

APIを実行する

APIのエンドポイントはネットワークインターフェイスのIPになります。

Amazon Elastic Container Service > クラスター > [該当クラスター] > サービス > [該当サービス] > タスク > [該当タスク] > 設定 からENI IDを選択します。
該当のENIからIDを確認します。

フロントエンド上で、EC2向けになっていたエンドポイントをECS(ポート80)に変更することで、ECSの環境でAPIを実行できました。
(ここでは省略しますが、セキュリティグループの設定は必要です)

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