Elastic Beanstalk の Docker 環境で Node.js 16 AL2 を動かしてみた
Elastic Beanstalk の Node.js 16 AL2 は 2024 年 10 月 10 日にリタイアしているため、現状では新規環境作成時に Node.js 16 AL2 を指定することはできません。
Elastic Beanstalk プラットフォームのリリーススケジュール - AWS Elastic Beanstalk
しかし、検証用にどうしても Elastic Beanstalk で Node.js 16 AL2 を使用する必要がある場合にはコンテナイメージを利用する方法もあるかと思うのでやってみました。
前提
- 開発環境は Cloud9
- Docker をインストール済み
手順概要
- Dockerfile の作成
- ECR リポジトリへのプッシュ
- Dockerrun.aws.json の作成
- Elastic Beanstalk 環境の作成
1. Dockerfile の作成
1-1. ディレクトリを作成します。
$ mkdir ec2-nodejs-app; cd ec2-nodejs-app
1-2. Dockerfile を作成します。
FROM amazonlinux:2
RUN yum install -y \
gcc-c++ \
make \
curl && \
curl -fsSL https://rpm.nodesource.com/setup_16.x | bash - && \
yum install -y nodejs && \
yum clean all
RUN node -v && npm -v
WORKDIR /app
COPY . .
RUN npm init -y
RUN npm install express
EXPOSE 80
CMD [ "node", "server.js" ]
1-3. Dockerfile と同じディレクトリに server.js を作成します。
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send(process.version);
});
app.listen(3000, () => {
console.log("Server is up on 3000");
});
2. ECR リポジトリへのプッシュ
2-1. デフォルト設定で ECR リポジトリを作成します。
2-2. ECR リポジトリへのプッシュコマンドを順番に実行します。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com
$ docker build -t test .
$ docker tag test:latest 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
$ docker push 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
3. Dockerrun.aws.json の作成
Preparing your Docker image for deployment to Elastic Beanstalk - AWS Elastic Beanstalk
3-1. Dockerrun.aws.json を作成し、ECR にプッシュしたイメージの URI を指定します。
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "012345678901.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest"
},
"Ports": [
{
"ContainerPort": 80
}
]
}
なお、Ports には Dockerfile の EXPOSE で指定したポート番号を指定する必要があります。
If you're using a Dockerfile, the first ContainerPort value should match the first entry in the Dockerfile's EXPOSE list.
4. Elastic Beanstalk 環境の作成
4-1. Elastic Beanstalk 環境で使用する EC2 インスタンスプロファイルに ECR へのアクセス権限を付与します。
Elastic Beanstalk のインスタンスプロファイルについては以下のドキュメントをご参照ください。
Managing Elastic Beanstalk instance profiles - AWS Elastic Beanstalk
必要な権限は以下のドキュメントの通りですが、今回は AdministratorAccess 権限を付与しました。
Using images from a private repository in Elastic Beanstalk - AWS Elastic Beanstalk
4-2. 以下の設定で Elastic Beanstalk 環境を作成します。
- 環境枠: ウェブサーバー環境
- プラットフォーム: Docker
- プラットフォームブランチ: Docker running on 64bit Amazon Linux 2
- プラットフォームのバージョン: 最新版を選択
- アプリケーションコード: コードをアップロードで、Dockerrun.aws.json をアップロード
- バージョンラベル: 任意の値
- プリセット: 単一インスタンス
- EC2 インスタンスプロファイル: aws-elasticbeanstalk-ec2-role
上記以外はデフォルト設定です。
4-2. 環境作成完了後に Elastic Beanstalk 環境のデフォルトのドメインにアクセスして、以下のページが表示されれば成功です。
まとめ
今回は Elastic Beanstalk の Docker 環境で Node.js 16 AL2 を動かしてみました。
どなたかの参考になれば幸いです。
参考資料
- Elastic Beanstalk プラットフォームのリリーススケジュール - AWS Elastic Beanstalk
- EC2 に Docker と Node.js を入れてコンテナを動かしてみた
- Elastic Beanstalkで、ECRにPUSHしたコンテナを動かす #AWS - Qiita
- Using images from a private repository in Elastic Beanstalk - AWS Elastic Beanstalk
- Managing Elastic Beanstalk instance profiles - AWS Elastic Beanstalk
Discussion