React×Spring Bootな構成をAWS Fargateで動かす(6) ~ Fargateのデプロイ(準備編)

Pocket

CDKでFargateをデプロイする(準備編)

長らく続いた連載もいよいよ終盤に差し掛かってきました。
これまで作ってきた構成をCDKを使ってデプロイしていくのですが、本記事はその準備編となります。

ちなみに、前回の記事はコチラ。

自己署名証明書の作成

CognitoのコールバックURLは、基本的にHTTPSのURLしか指定できず、例外としてlocalhostを含む場合のみHTTPを指定することができます。
ローカル環境で開発しているときはURLがhttp://localhost:3000/だったのでHTTPのままでよかったのですが、今回はHTTPSでなければなりません。
本来はカスタムドメインを作成して、ACMで証明書を作成して、のような形で進めると思いますが、今回はお試しのため自己署名証明書で対応します。
AWSマネジメントコンソールからCloudShellを起動し、以下のようなコマンドを実行して自己署名証明書をACMにインポートしておいてください。
こういうときにCloudShellは便利ですよね!
ちなみにコモンネームは、*.ap-northeast-1.elb.amazonaws.comというワイルドカードを指定して横着していますので、あくまでお試しということでご容赦ください。

インポートが成功すると、証明書のARNが表示されますので、控えておいてください。
また、CloudShellは一時的な使用ですので、インポートが終わったら忘れずにCloudShellのアクションから証明書のファイル群をダウンロードしておきましょう。

Dockerfileの作成

今回フロントエンドもバックエンドもFargate上で動かすので、アプリケーションをコンテナ化する必要があります。
各アプリケーションのプロジェクトルートにDockerfileを作成します。
まずはフロントエンドから。

ここでポイントが2つあります。

1つ目は、Dockerの元イメージをECR Public Galleryから取得するようにしていることです。
最終的にはDockerイメージのビルドをCodeBuildでやることになるのですが、Docker Hubから元イメージを取得すると、いわゆる「CodeBuildのIPガチャ」に引っかかってしまうため、これを回避するためにECR Public Galleryを使用しています。

2つ目は、環境によって変化する環境変数をビルドの際に使用していることです。
Fargateのタスクが起動するときに環境変数を指定しても、その値は使用されません。
他にいい方法がありましたら、是非教えてください!

また、フロントエンドを配信するのにnginxを使用するため、nginx.confも以下のようにプロジェクトのルートに作成してください。

試しにdocker buildしてみましょう。
プロジェクトのルート(miso-frontendの下)で以下のコマンドを実行します。

すると、npm run buildのところで以下のようなエラーが出てしまいました。

どうやらTypeScriptの型チェックに引っかかってしまったようです。
JSONで書くやり方もありますが、もともとawsconfig.tsは以下のように環境変数を読み込むようにしているため、そうもいきません。
(注意!)awsconfig.tsのredirectSignInとredirectSignOutの値ですが、CDKでデプロイする時点ではALBのFQDNが確定していないため、リクエストされた元のFQDNをそのまま使用するように変更しています。

そのため、main.ts側で以下のようにします。

これで再度docker buildしたところ、成功しました!(もっといいやり方ありそうですが…)

次にバックエンドのDockerfileを作成します。

ここでのポイントは、証明書のインポートを行っていることです。
リソースサーバがJWT検証URLにアクセスして認可をしますが、ALBが自己署名証明書で動く想定のため、信頼された証明書として登録しておかないと接続できないためです。
ちなみにインポートの際には証明書ストアのデフォルトのパスワードchangeitを使用しています。
自己署名証明書の作成のところでダウンロードしておいたcertificate.pemもプロジェクトのルートに配置しておきましょう。

これで準備が整いました!
次回はついに最終回!!
CDKのコードを作成してデプロイしていきます。
それでは、また次回に👋


シリーズ記事

お問い合わせ先

執筆者プロフィール

Hayakawa Masafumi
Hayakawa Masafumitdi デジタルイノベーション技術部
昔も今も新しいものが大好き!
インフラからアプリまで縦横無尽にトータルサポートや新技術の探求を行っています。
週末はときどきキャンプ場に出没します。
Pocket

関連記事