EC2 Auto Scaling 起動設定（Launch Configuration）の廃止　→　起動テンプレート（LaunchTemplate）への移行｜Beanstalk　EB CLI環境

# 起動設定（Launch Configuration）の廃止とは
EC2 Auto Scaling の旧設定方法が廃止され変わるというものです。具体的にはLaunch Configurationという設定ファイルからLaunch Templateという設定ファイルに変わります。

自分のところへは以下のようなタイトルでメールが届きました。
「[お知らせ] EC2 Auto Scaling 起動設定の廃止のお知らせ | [Notification] EC2 Auto Scaling Launch Configuration Deprecation Notification」

# 環境
取り急ぎテスト環境で以下のものを立ち上げました。

Route53
↓
Cloud Front
↓
Beanstalk
　ALB＋Auto scaling
　↓
　EC2
↓
RDS

デプロイ方法はeb cliで直デプロイです。

# 試してみた事
まずBeanstalkがどんな動作をしているのかを確認するためにeb createで新規にアプリを作成してみました。
その後以下実施しています。

## Auto scalingを確認
AWSコンソールから確認するとただeb createすると未だ起動設定が使われており、起動テンプレートの画面（コンソールEC2の画面左メニューのインスタンス→起動テンプレート）でも作成されていないことが確認できました。

つまり現状ではBeanstalkでは指定をしないと起動設定が使われ、起動テンプレートは使われないという動作でした。

## ebextensionsにテンプレートの指定を追加
Beanstalkを運用、カスタマイズを進めていくと色々な設定を追加したくなります。そんな時にBeanstalkのプロジェクトディレクトリ（eb initしたディレクトリ）に.ebextensionsディレクトリを作成してその中にconfigファイルで設定すると様々なことができるようになります。
要は裏側ではCloudFormationが動いているのでCloudFormationの設定ファイルのような形でBeanstalkもカスタマイズできるようになっているんですね。
以下の公式をもとに設定ファイルを作成して見ました。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/quickref-elasticbeanstalk.html

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environments-cfg-ec2-imds.html


```
Resources:
  sampleConfigurationTemplate:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: myAppName
      Description: AWS ElasticBeanstalk Sample Configuration Template
      OptionSettings:
        - Namespace: aws:autoscaling:asg
          OptionName: MinSize
          Value: '1'
        - Namespace: aws:autoscaling:asg
          OptionName: MaxSize
          Value: '2'
      SolutionStackName: 64bit Amazon Linux 2023 v4.3.0 running PHP 8.3

option_settings:
  aws:autoscaling:launchconfiguration:
    DisableIMDSv1: true
```

上記YAMLで自分の環境に合わせる項目は以下となります。
##### 「sampleConfigurationTemplate:」
これは自分がわかりやすい名前に変更可能です。BeanstalkやCloud Formationなどのログでも出てきたり、他の設定で呼び出したりする際に使われます。
##### 「myAppName」
こちらも任意の名前に変更可能です。
##### 「AWS ElasticBeanstalk Sample Configuration Template」
こちらも任意の名前に変更可能です。

---

各項目の詳細は公式ドキュメントをご参照ください。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-elasticbeanstalk-configurationtemplate.html

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environments-cfg-ec2-imds.html

## eb createで新環境を作成
前述の設定でcreateしたところ無事起動テンプレートからAuto Scalingが生成されていることをコンソールから確認できました。
Auto Scalingのコンソールを開き「起動テンプレート／設定」のリンクをクリックして起動テンプレートのページ飛べばOKです。
ここで警告の小ウィンドウで起動設定が表示される際は設定が失敗し起動設定（launch configurations）から起動されています。

## 番外編｜コンソールからも設定はできます
公式ドキュメントに沿ってまずはコンソールから設定してみます。
ここでの操作は起動設定を起動テンプレートにコピーするというものです。
このプロセスの中で新規にAuto Scalingを作成することもできるようですが
今回はBeanstalkのeb cliで管理している前提なのでその手順は飛ばします。

https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/migrate-to-launch-templates.html#copy-launch-config

ちなみに上記手順に沿って作業した段階ではダウンタイムは発生しませんでした。
ここでの作業では立ち上がっている環境から単純に起動テンプレートのみを生成するだけなので想定通りの動きでした。
実際に適用させるには追加でテンプレートを適用させる作業があり、そちらは未実施ですがおそらくダウンタイムありのものとなります。（CloudFrontなど環境によっては最小限にもできそうな気もします）
結局当方の環境ではEB CLIでデプロイしているのでこちらの設定は使わずにebextensionsによる設定で起動する形にしました。

# 遭遇したエラー
前述のebextensionsにて記載が足らなかった時にエラーが表示されました。エラーはBeanstalkとCloudFormationで確認します。

##### Beanstalkでeb create後にBeanstalkコンソールにて表示されたエラー
```
ERROR: ServiceError - Launched environment: xxxxxxxxxxx. However, there were issues during launch. See event log for details.
```

##### Cloud Formationのコンソールで表示されていたエラー
```
Resource handler returned message: "Error occurred during operation 'You must specify either SolutionStackName or SourceConfiguration or EnvironmentId. (Service: ElasticBeanstalk, Status Code: 400, Request ID: xxxxxxxxxxxxxxx)'." (RequestToken: xxxxxxxxxxxx, HandlerErrorCode: GeneralServiceException)
```

Beanstalkでは簡易的なエラーしか表示されないことがあるのでCloudFormationのコンソールを常に見るようにした方が確実かもしれません。

## 前述のエラー対策
以下の設定がebextensionsから抜けていたためのエラーでした。

```
SolutionStackName: 64bit Amazon Linux 2023 v4.3.0 running PHP 8.3
```

この時注意点としてドキュメント情報が古くなっているタイミングがありますので
SolutionStackNameに設定する値は以下のコマンドで確認することをお勧めします。

```
$ aws elasticbeanstalk list-available-solution-stacks
```

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP

# 参考サイト

公式の案内は以下となります。

https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/migrate-to-launch-templates.html

CloudFormation環境での対応（Beanstalkのeb cliを使っている場合も）

https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/migrate-launch-configurations-with-cloudformation.html

起動構成のリソース詳細

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html

起動テンプレートのリソース詳細

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html

今回の件についてのQ＆A

https://repost.aws/questions/QUQKkV_qnVRWCBc--mJOV69w/cloudformation-launchtemplate-for-elastic-beanstalk-environment

https://stackoverflow.com/questions/74647624/change-elastic-beanstalk-environment-from-launch-configuration-to-launch-templat