やりたいこと
こちらで構築したEC2のAPIバックエンド環境をECSで構築する
手順
- Dockerfileを作成する
- ECRリポジトリを作成する
- ECSのタスク定義を作成する
- ECSのクラスターを作成する
- ECSのタスクを実行する
- 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 > リポジトリの作成 をクリックします。
今回はプライベートリポジトリのためプライベートを選択し、リポジトリ名を入力します。
プッシュコマンドの表示をクリックすると認証とイメージのプッシュ手順が表示されます。
上記の手順通りに実施します。
- Dockerクライアントを認証
- Dockerイメージを構築
- イメージのタグ付け
- リポジトリにイメージをプッシュ
ECSのタスク定義を作成する
ECSのタスク定義を作成します。
Amazon Elastic Container Service > タスク定義 > 新しいタスク定義の作成 をクリックします。
タスク定義ファイミリー名を入力します。
タスク定義名とイメージのURIを入力します。イメージのURIは先ほど作成したECRのURIです。
(今回はポートマッピングは80、プロトコルはTCP、アプリケーションプロトコルはHTTPです)
今回はサーバレスとしたいめ、AWS Fargateを選択します。
CPU・メモリは好きに設定します。
タスクの実行ロールを設定します。既存の実行ロールがない場合は「新しいロールの作成」で自動的に作成されます。
ECSのクラスターを作成する
実行にはクラスターが必要なため、作成します。
Amazon Elastic Container Service > クラスター > クラスターの作成 をクリックします。
ECSのタスクを実行する
いよいよタスクを実行します。
Amazon Elastic Container Service > クラスター > タスクの定義 から新しいタスクの実行をクリックします。
APIのバックエンド環境を実行したいため、Serviceを選択します。
作成したタスク定義を選択します。
サービス名を入力します。
作成をクリックすると、タスクが実行され、サービスがデプロイされます。
APIを実行する
APIのエンドポイントはネットワークインターフェイスのIPになります。
Amazon Elastic Container Service > クラスター > [該当クラスター] > サービス > [該当サービス] > タスク > [該当タスク] > 設定 からENI IDを選択します。
該当のENIからIDを確認します。
フロントエンド上で、EC2向けになっていたエンドポイントをECS(ポート80)に変更することで、ECSの環境でAPIを実行できました。
(ここでは省略しますが、セキュリティグループの設定は必要です)