11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Amplifyを使ってNext.jsをデプロイする(Basic認証、Monorepoもあり)

Posted at

AWS Amplifyとは

手軽にWeb,モバイルアプリケーションをデプロイすることができるAWSサービスの一つです。
Amplifyを活用することでインフラ周りはすべてAWSにおまかせして開発者はフロントエンドの開発に集中することができるため高速で開発→リリースすることができます。
またCI/CD環境の導入も自動的に導入でき、GitHubと連携すれば指定のブランチにプッシュされると自動でデプロイすることができます。

事前準備

今回はGitHubのリモートリポジトリからアプリをデプロイしていきたいので、事前にリモートリポジトリを作成して、アプリのコードを先程作成したリモートリポジトリへ上げておきましょう。

デプロイ編

Amplifyのマネジメントコンソールにアクセスする

AWSマネジメントコンソールから「Amplify」を検索してコンソールにアクセスします。
まだ一度もアプリケーションを作成していなければ画像のような画面となっていますので
「Get started」→「Amplify Hosting」から始めていきましょう。
9ea2ee45199d8c23e54e185779074d76.png

Amplifyホスティングの開始方法

デプロイするアプリケーションのコードがあるリポジトリと接続していきます。
今回はGitHubを使用するのでGitHubを選択して「続行」をクリックします。
スクリーンショット 2023-01-02 11.10.17.png

認証を求められるのでアカウントがリポジトリが存在しているアカウントであることを確認してGitHubとAWSを連携します。
その後マネジメントコンソールにリダイレクトされます。

リポジトリブランチの追加

GitHubとの連携に成功すると以下の画面が表示されます。
デプロイするリポジトリ・ブランチを選択して「次へ」をクリックして進みます。
スクリーンショット 2023-01-02 11.09.42.png

※もしリポジトリ・ブランチがない場合にはGitHubのアクセス許可を表示を押してリポジトリを選択することで権限を追加することができます。
スクリーンショット 2023-01-02 11.12.19.png

ビルドの設定

アプリケーションの名前や、ビルド時の設定などを定義していきます。
「アプリケーションの名前」にはアプリケーションの名前を入力します。
スクリーンショット 2023-01-02 11.17.28.png

「構築とテストの設定」では環境変数の設定や、ビルド時のコマンド、キャッシュの設定をすることができます。
「構築とテストの設定」の内容はフロントエンドフレームワークとpackage.jsonの内容から自動的に設定されます。
またEditから内容を編集することもできたりDownloadからdeploy.ymlをダウンロードすることもできます。
入力形式はYAMLです。
「構築とテストの設定」の内容に問題がなければ「次へ」をクリックしてデプロイ内容の確認画面へ進みます。

amplify.yml
version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*

【項目の解説】
frontend - フロントエンドのビルドコマンドを実行する。
test - テストフェーズのコマンドを実行する。(今回のamplify.ymlには入っていません)
preBuild - ビルドが始まる前や、パッケージの依存関係をインストールしたあとに実行したいコマンドを書きます。
build - ビルドコマンドを書きます。
postBuild - ビルドが終了した後に実行したいコマンドを書きます。
artifacts->baseDirectory - ビルド後のファイルが存在するディレクトリを指定します。今回はNext.jsを使用しているので .nextになります。
artifacts->files - aritifactsにあるデプロイしたいファイルを指定します。**/*であればすべてのファイルという意味になります。
cache - キャッシュさせたいディレクトリを指定します。初期ではフレームワークからキャッシュさせるディレクトリが自動的に判断されます。

それ以外については下記リンクの公式ドキュメントをご参考ください。

※日本語版のドキュメントの訳がめちゃくちゃなので英語版を読むのをおすすめします・・・

※ リポジトリのプロジェクトルートにdeploy.ymlを上げておくビルド時の設定を定義することもできますが、現時点で(2023年1月2日)Please acknowledgeという警告が表示されるも、確認するためのボタンがないため次に進むことができないというissueが立っていて未解決です。
amplify.ymlはアプリをデプロイ後にリポジトリに上げるのが良さそうです。

確認

デプロイされる内容の確認画面です。
問題なければ「保存してデプロイ」をクリックしてデプロイを開始しましょう。
スクリーンショット 2023-01-03 10.08.26.png

デプロイ

「保存してデプロイ」をクリックするとすぐにデプロイが開始されます。
スクリーンショット 2023-01-03 10.10.20.png

デプロイしているブランチ名(今回であればmain)をクリックすればコマンドの実行状況を確認することができます。
もしデプロイに失敗した場合にはここにエラーメッセージが表示されるので参考にすることができます。
ドメイン名をクリックすればデプロイしたアプリを表示することができます。
これでデプロイは完了です!
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313031303237332f35326566353162372d633136662d323530362d656335372d3639366136353830356561632e706e67.png

デプロイしたアプリにBasci認証をかける

Amplifyを活用すると簡単にBasic認証をかけることができます。
まずAmplifyの左ペインからアクセスコントロールを選択します。
スクリーンショット 2023-01-03 10.24.20.png
「アクセス設定」がパブリックに表示可能となっているとBasic認証がかかっていない状態です。
右上の「アクセスの管理」からユーザー名、パスワードを設定していきます。
スクリーンショット 2023-01-03 10.25.50.png
「アクセス設定」を「制限-パスワードが必要です」を選択するとユーザーネームとパスワードのフォームが活性化されるので設定したいユーザー名、パスワードを入力して「SAVE」をクリックすれば設定が完了です!
スクリーンショット 2023-01-03 10.31.24.png

再びアプリのドメインにアクセスしてみるとユーザー名とパスワードが求められるようになりました。
以上で完了となります。簡単ですね!
スクリーンショット 2023-01-03 10.34.31.png

参考リンク

モノレポアプリをデプロイする場合のamplify.ymlの書き方

今回自分がAmplifyにデプロイするアプリのディレクトリの構成は以下のようなMonorepoでした。

project
 ├ api
 └ front

/apiがFastAPIを使用したAPIサーバのディレクトリ、/frontがフロントエンドのディレクトリになります。
この場合、先程書いたようにはデプロイすることができずamplify.ymlを少し編集する必要があり、そこで少しつまりました。
結果以下のようなamplify.ymlでデプロイすることができました。

amplify.yml
version: 1
applications:
  - appRoot: front
    frontend:
      phases:
        preBuild:
          commands:
            - npm ci
        build:
          commands:
            - npm run build
      artifacts:
        baseDirectory: build
        files:
          - '**/*'
      cache:
        paths: []

appRootでフロントのディレクトリを指定することでprebuildbuildのコマンドがフロントのコードが有る/frontディレクトリ内で実行することができます。

最後に

インフラのことをあまり考えずに爆速でデプロイすることができるのがAmplifyの素晴らしいところだと感じました。
今後はFastAPIとの連携もやっていくのでまたそれについても記事にしていきたいと思います。

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?