AWS Amplifyで単一のDockerコンテナをデプロイする方法

カテゴリ: 未分類 | タグ: , , ,

AWS Amplifyで、docker-composeを使わずに、Dockerfileだけ用意して単一のDockerコンテナをデプロイする方法を説明します。
(AWSドキュメントの和訳です)

TL;DR

  • Dockerfileは、*.gitのルートではなくて、amplify/backend/api/<名前>/src/Dockerfileに置く。
    • amplify/backend/api/...は、amplify initamplify 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.jspython server.pyを実行するなど、標準的なツールでアプリケーションを実行することも可能です。Dockerfileとアプリケーションのコードがローカルで動作することを確認できたら、amplify pushを実行します。amplify/backend/api/<名前>/srcディレクトリがビルドパイプライン用にバンドルされ、DockerのイメージをFargateにデプロイすることができます。

デプロイが終了したらエンドポイントURLが出力され、クライアントの設定ファイルが更新されます。

参考資料

Deploy a single container


Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です