Nuxt.js + AWS ECS Fargate その1(Nuxt.jsアプリ作成〜ECRリポジトリへのプッシュ)
トレンドのVuejs/NuxtをAws ECS, FargateでSSR、詳細解説します🚀 の記事を参考に進めてみる。
ローカル環境 使用バージョン
- Node.js: 12.11.0
- AWS CLI: 2.1.31
Nuxt.js アプリの作成
create nuxt-app で作成します。
$ yarn create nuxt-app nuxt-fargate_app yarn create v1.13.0 create-nuxt-app v3.6.0 ...
設定項目は下記のようにしました。
Fargateで動かすのでRendering modeはUniversalを指定。
しばらく触ってないと細々変わりますね。。
? Project name: nuxt-fargate_app ? Programming language: JavaScript ? Package manager: Npm ? UI framework: None ? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Testing framework: None ? Rendering mode: Universal (SSR / SSG) ? Deployment target: Server (Node.js hosting) ? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? What is your GitHub username? yuhei jotaki ? Version control system: Git
Dockerfile を使用してイメージを作成
Docker 向けに package.json の scripts を調整する。
... "scripts": { "dev": "HOST=0.0.0.0 PORT=3000 nuxt", "build": "nuxt build", "start": "HOST=0.0.0.0 PORT=3000 nuxt start", "generate": "nuxt generate" }, ...
Dockerfile をプロジェクトディレクトリに作成して下記のようにする。
Node.jsのバージョンは 公式のイメージ を参考にする。
FROM node:12 RUN mkdir -p /var/www/nuxt-fargate_app WORKDIR /var/www/nuxt-fargate_app COPY ./ /var/www/nuxt-fargate_app RUN npm run build EXPOSE 3000 ENTRYPOINT ["npm", "run", "start"]
次にDockerアプリをrunningにする。
その後ビルドしてイメージが作成できているか確認。
$ docker build -t nuxt-fargate_app . ... Successfully tagged nuxt-fargate_app:latest
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nuxt-fargate_app latest XXXXX 39 seconds ago 1.03GB ...
起動してみる。
ここはあまり分かってないですが、 0.0.0.0:3000 でアクセスできたのでOKなのかな
$ docker run -d -p 3000:3000 nuxt-fargate_app ... $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 61f86de41a7a nuxt-fargate_app "npm run start" 21 seconds ago Up 19 seconds 0.0.0.0:3000->3000/tcp amazing_yalow
ECRでリポジトリを作成してイメージをプッシュする
AWS ECR > リポジトリ作成をする。
今回は nuxt-fargate_app
というリポジトリ名にしました。
その後コマンドで認証してイメージをプッシュする。
それぞれつまづきましたが、認証は get-login
は現在非推奨のため get-login-password
が良いとのことで Amazon ECR での AWS CLI の使用 - Amazon ECR を参考にしました。
※ 後々振り返ると、ECRコンソール内 > リポジトリ > 該当リポジトリを選択 > プッシュコマンドの表示 にもコマンドが書いてありました。
# <profile-name>: ~/.aws/credentials のプロファイルの名前 # <app-name>: nuxt-fargate_app # <aws-region-name>: ap-northeast-1 # <aws-account-id>: アカウントID # ユーザー切り替え $ export AWS_DEFAULT_PROFILE=<profile-name> # 認証トークンを取得し、レジストリに対して Docker クライアントを認証します。 $ aws ecr get-login-password | docker login --username AWS --password-stdin https://<aws-account-id>.dkr.ecr.<aws-region-name>.amazonaws.com # Docker イメージを構築します。 $ docker build -t <app-name>:latest . # 構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。 $ docker tag <app-name>:latest <aws-account-id>.dkr.ecr.<aws-region-name>.amazonaws.com/<app-name>:latest # 新しく作成した AWS リポジトリにこのイメージをプッシュします。 $ docker push <aws-account-id>.dkr.ecr.<aws-region-name>.amazonaws.com/<app-name>:latest
以上でイメージをプッシュできました。
AWSのコンソールやCLI最近あまり触る機会がなかったですが、CLIのバージョンアップやプロファイルの切り替え等々つまづくところが多かったです。
正直あまり分かってない部分も多いですが、次回以降はECSの設定になりそうですので引き続き更新できたらと思います。