AWS Amplifyで、docker-composeを使わずに、Dockerfileだけ用意して単一のDockerコンテナをデプロイする方法を説明します。
(AWSドキュメントの和訳です)
TL;DR
Dockerfile
は、*.gitのルートではなくて、amplify/backend/api/<名前>/src/Dockerfile
に置く。amplify/backend/api/...
は、amplify init
とamplify add api
コマンドで生成できる。
- ポートはデフォルトで80、変更したい場合はDockerfileのEXPOSEで指定する。
- ローカルで事前テストするときは下記の手順
cd amplify/backend/api/<名前>/src; docker build -t
してdocker run
できることを確認。
手順
単一のコンテナを使ったデプロイ
単一Dockerfileを使う場合、Dockerfileでビルドされた単一コンテナで動作するアプリケーションを、Amplify CLIでAWS Fargateにデプロイすることができます。
Dockerfileの使い方に慣れていない方は、Dockerizing a Node.js web app guideをみるか、Amplifyが提供するテンプレートでAPIを追加してください。
以下に簡単なDockerfileの例を示します。これはNodeJSアプリケーション(index.js)を、全てのソースファイルをコピーし、依存関係をインストールしたビルドイメージで起動するものです。この例では、環境変数の指定や、コンテナの通信ポートの定義にEXPOSEステートメントを使用する方法も紹介しています。
FROM public.ecr.aws/bitnami/node:14.15.1-debian-10-r8
ENV PORT=8080
EXPOSE 8080
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY .
CMD [ "node", "index.js" ]
DockerfileにEXPOSE文を記述して、コンテナと通信するためのポートを指定する必要があります。もし指定がない場合は、80番ポートを使用するようAmplifyはサジェストします。
ローカルでの開発・テスト
amplify pushでデプロイする前に、まずローカルでアプリケーションをテストすることをお勧めします。さもないと、依存関係が見つからないなどのアプリケーションの問題がある場合、Fargateタスクの起動に失敗することがあります。
単一のDockerファイルを使う場合、以下の例のようにamplify/backend/api/<名前>/src
に移動してdocker build -t
を実行してイメージを構築しタグ付けし、 docker run
でコンテナを起動することで確認できます。
$ cd ./amplify/backend/api/<name>/src
$ docker build -t node-app:1.0 .
$ docker run -p 8080:8080 -d node-app:1.0 .
$ curl -i localhost:8080
また、NodeやPythonでnode index.js
やpython server.py
を実行するなど、標準的なツールでアプリケーションを実行することも可能です。Dockerfile
とアプリケーションのコードがローカルで動作することを確認できたら、amplify push
を実行します。amplify/backend/api/<名前>/src
ディレクトリがビルドパイプライン用にバンドルされ、DockerのイメージをFargateにデプロイすることができます。
デプロイが終了したらエンドポイントURLが出力され、クライアントの設定ファイルが更新されます。