AWS Elastic Beanstalk でウェブアプリケーションをデプロイする
入門ガイド
モジュール 3: ウェブアプリケーションをデプロイする
このモジュールでは、アプリケーションをクラウドにデプロイします。
はじめに
このモジュールでは、NodeJS アプリケーションをパッケージ化してデプロイできるようにする方法を説明します。また、AWS CDK を使用して モジュール 2 で作成したすべての AWS Elastic Beanstalk リソースをプロビジョニングする方法についても説明します。
学習内容
- NodeJS アプリケーションをパッケージ化する
- CDK アプリケーションを構築してデプロイする
- NodeJS アプリケーションのデプロイを更新する
所要時間
10 分
モジュールの前提条件
- 管理者レベルのアクセス権を持つ AWS アカウント**
- 推奨ブラウザ: Chrome または Firefox の最新バージョン
[**] 過去 24 時間以内に作成されたアカウントは、このチュートリアルに必要なサービスへのアクセス権限がまだ付与されていない可能性があります。
実装
NodeJS アプリケーションをパッケージ化する
モジュール 2 では、AWS CDK の S3 アセットモジュールを使用してアプリケーションを zip ファイルで S3 にアップロードすることを説明しました。
そのためには、NodeJS アプリケーションの zip ファイルを作成し、AWS CDK アプリケーションのルートディレクトリに配置する必要があります。 zip ファイルに「app.zip」という名前を付けます。これを行うには、次のコマンドを実行します:
zip -r ../app.zip ./*

アカウントの CDK をブートストラップする
このリージョンにあるこのアカウントで AWS CDK を初めて使用する場合、ブートストラップする必要があります。AWS CDK アプリを AWS アカウントとリージョンにデプロイする場合、CDK はデプロイを実行するために必要なリソースをプロビジョニングする必要があります。これらのリソースには、デプロイファイルを保存するための Amazon S3 バケット、およびデプロイを実行するのに必要なアクセス許可を付与する IAM ロールが含まれます。これらの初期リソースをプロビジョニングすることを「ブートストラップ」と呼びます。
AWS アカウントとリージョンをブートストラップするには、次を実行します
cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1
これは次のようになります。
cdk bootstrap aws://123456789012/us-east-1
アカウント番号は AWS マネジメントコンソールから取得でき、リージョン名はこのリストから取得できます。
CDK アプリケーションを構築してデプロイする
NodeJS アプリケーションをパッケージ化し、CDK アプリケーションディレクトリのルートに配置し、AWS アカウントとリージョンをブートストラップすると、CDK アプリケーションを構築してデプロイする準備が整います。
最初のステップは、CDK アプリケーションを構築することです。
node run build
アプリケーションにエラーがない場合、これは成功し、CDK アプリケーションをクラウドにデプロイできるようになります。
cdk deploy
新しいロールを作成したため、最初にアカウントのセキュリティレベルを変更するかどうかの確認を求められます。

「y」で応答すると、デプロイが開始されます。完了するまでに数分かかります。完了すると、このデプロイが作成されたという、CloudFormation スタックの ARN (Amazon リソースネーム) のメッセージが表示されます。
CloudFormation マネジメントコンソールを開くと、そこに 2 つの新しいスタックがあることがわかります。

CdkEbInfraStack と呼ばれるスタックは、前のモジュールで作成したすべての Elastic Beanstalk リソース (Elastic Beanstalk アプリケーション、アプリケーションバージョン、インスタンスプロファイル、および環境) を含むスタックです。
もう 1 つのスタック (ランダムな文字列を含む) は Elastic Beanstalk で作成され、Elastic Beanstalk アプリケーションが実行する必要のあるすべてのリソース (Auto Scaling グループ、インスタンス、Amazon CloudWatch アラームとメトリクス、ロードバランサー、およびセキュリティグループ) が含まれています。
クラウドでのアプリケーションの表示
アプリケーションがクラウドにデプロイされていることを確認したい場合、最初に行う必要があるのは、ウェブアプリの URL を見つけることです。この URL は、AWS コンソールで Elastic Beanstalk サービスにアクセスし、MyWebAppEnvironment という環境を探すことで見つけることができます。

そこに URL が表示されます。それをクリックすると、ウェブアプリケーションが起動します。
NodeJS アプリケーションのデプロイを更新する
ウェブアプリケーションに変更を加え、それをクラウドに再デプロイする場合は、次の手順を実行できます。
- ウェブアプリケーションで変更を加える
- app.zip ファイルにパッケージ化する
- app.zip ファイルを CDK アプリケーションのルートディレクトリに配置する
- CDK プロジェクトを構築する - npm run build
- CDK プロジェクトをデプロイする - cdk deploy
これで、Elastic Beanstalk アプリケーションの新しいバージョンがデプロイされていることを確認できます。また、ウェブアプリケーションの URL にアクセスすると、新しいバージョンがデプロイされます。これには少し時間がかかります。コンソールを監視して、いつ完了するかを確認してください。

よくある間違い
アプリケーションを圧縮する
NodeJS アプリケーションが Elastic Beanstalk にアップロードされたときにこのエラーが発生した場合。
Failed to find package.json. Node.js may have issues starting. Verify package.json is valid or place code in a file named server.js or app.js.
1 つの問題は、アプリケーションのパッケージ化方法である可能性があります。package-lock.json および node_modules ディレクトリを削除し、ウェブアプリケーションディレクトリ内でこのコマンドを実行します。
zip -r app.zip .
これにより、Elastic Beanstalk 用にファイルが正しく圧縮されます。
アプリをパッケージ化するときのノードモジュール
ダウンロードしたすべての依存関係を含む node_modules ディレクトリをウェブアプリケーションの zip ファイルにパッケージ化できます。
このディレクトリがある場合、Elastic Beanstalk は依存関係をダウンロードする必要がないと想定します。
手順の詳細については、Elastic Beanstalk パッケージでの NodeJS 依存関係の処理 をお読みください。
まとめ
このガイドでは、NodeJS ウェブアプリケーションをパッケージ化して Elastic Beanstalk を使用してデプロイする方法と、すべてのインフラストラクチャを CDK アプリケーションとしてデプロイする方法を説明しました。
次回: リソースをクリーンアップする