📝

Elastic Beanstalk の config ファイルで遊んでみた

2025/01/30に公開

Advanced environment customization with configuration files (.ebextensions) - AWS Elastic Beanstalk

The Resources section lets you further customize the resources in your application's environment, and define additional AWS resources beyond the functionality provided by configuration options. You can add and configure any resources supported by AWS CloudFormation, which Elastic Beanstalk uses to create environments.

CloudFormation でサポートされているリソースであれば .ebextensions 内の .config に定義することで Elastic Beanstalk 環境の一部としてデプロイできるので遊んでみました。

今回は Auto Scaling グループのヘルスチェック設定と、Lambda 関数の追加を行ってみました。

Auto Scaling グループのヘルスチェック設定

Auto Scaling health check setting for your Elastic Beanstalk environment - AWS Elastic Beanstalk
上記ドキュメントの autoscaling.config をそのまま使用しました。

autoscaling.config
Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300

Lambda 関数

Node.js 22.x の Lambda 関数のデフォルトコードでデプロイしました。

lambda.config
Resources:
  MyLambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      Handler: index.handler
      Role: your-role-arn
      Code:
        ZipFile: |
          export const handler = async (event) => {
            const response = {
              statusCode: 200,
              body: JSON.stringify('Hello from Lambda!'),
            };
            return response;
          };
      Runtime: nodejs22.x

デプロイ

Elastic Beanstalk のサンプルアプリを EB CLI からデプロイしてみた
基本的なデプロイ手順は上記ブログと同様ですが、config ファイルの作成と eb create コマンドの実行オプションが異なります。

config ファイルの作成

上記ブログの my_environment.config に加えて上述の autoscaling.config と lambda.config も作成しました。
作成手順は my_environment.config と同様に nano コマンドでの作成です。

$ nano .ebextensions/autoscaling.config

# 以下の内容でファイルを作成
Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300
$ nano .ebextensions/lambda.config

# 以下の内容でファイルを作成
Resources:
  MyLambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      Handler: index.handler
      Role: your-role-arn
      Code:
        ZipFile: |
          export const handler = async (event) => {
            const response = {
              statusCode: 200,
              body: JSON.stringify('Hello from Lambda!'),
            };
            return response;
          };
      Runtime: nodejs22.x

Elastic Beanstalk 環境の作成

上記ブログでは eb create --single コマンドを実行することで、EC2 インスタンスが 1 台かつ ELB を使用しない設定でデプロイしていました。
今回は ELB を使用するため、--single をつけずに eb create コマンドを実行します。

コマンド実行後にロードバランサーのタイプを選択する必要があるので、デフォルトの ALB を選択しました。

Select a load balancer type
1) classic
2) application
3) network
(default is 2): 2

デプロイ後

awseb から始める Auto Scaling グループを確認すると、ヘルスチェックのタイプに ELB が追加されていることがわかります。

また、awseb から始まる Lambda 関数がデプロイされていることも確認できます。

config ファイルで設定した内容がデプロイされていることを確認できました。

Lambda について

今回の Lambda はElastic Beanstalk 環境の一部としてデプロイしましたが、デフォルトコードなので Elastic Beanstalk との処理の連携はない独立したリソースです。

Elastic Beanstalk のデプロイでは Lambda に限らず CloudFormation でサポートされているリソースを環境の一部としてデプロイできるという点についてご理解頂ければ幸いです。

まとめ

Elastic Beanstalk の config ファイルで遊んでみました。
どなたかの参考になれば幸いです。

参考資料

Discussion