[アップデート]Elastic BeanstalkでAWS GravitonベースのEC2インスタンスタイプがサポートされたので試してみた

Elastic BeanstalkのプラットフォームでGravitonベースのEC2インスタンスタイプがサポートされましたので試してみました。
2021.12.03

こんにちはコカコーラ大好きカジです。

Elastic BeanstalkのプラットフォームでGravitonベースのEC2インスタンスタイプがサポートされましたので試してみました。

AWS GravitonはAmazonによって構築されたarm64ベースのプロセッサであり、同等のx86ベースのプロセッサと比較して最大40%優れた料金パフォーマンスを提供するものです。

ElasticBeanstalkのGravitonベースのEC2対応リージョン(2021/12現在)

  • 米国東部(オハイオ)– us-east-2
  • 米国東部(バージニア州北部)– us-east-1
  • US West(北カリフォルニア)– us-west-1
  • US West(オレゴン)– us-west-2
  • ヨーロッパ(フランクフルト)– eu-central-1
  • 南アメリカ(サンパウロ)– sa-east-1

GravitonベースのEC2対応プラットフォーム(2021/12現在)

  • Docker running on 64bit Amazon Linux 2
  • Node.js 14 running on 64bit Amazon Linux 2
  • Node.js 12 running on 64bit Amazon Linux 2
  • Python 3.8 running on 64bit Amazon Linux 2
  • Python 3.7 running on 64bit Amazon Linux 2
  • Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2
  • Tomcat 8.5 with Corretto 8 running on 64bit Amazon Linux 2
  • PHP 8.0 running on 64bit Amazon Linux 2
  • PHP 7.4 running on 64bit Amazon Linux 2
  • Ruby 2.7 running on 64bit Amazon Linux 2
  • Go 1 running on 64bit Amazon Linux 2

Gravitonインスタンスタイプを選択可能なイメージIDについて

新規構築の場合、以下のページでGravitonインスタンスタイプをサポートする各プラットフォームのイメージIDを確認して利用しましょう。

2021/12時点のバージニアのIDを抜粋

プラットフォームバージョン Image ID
64bit Amazon Linux 2 v3.4.7 running Docker ami-0fbdb88ce139244bf
64bit Amazon Linux 2 v4.2.6 running Tomcat 8.5 Corretto 11 ami-00e7b90f6d15fb548
64bit Amazon Linux 2 v3.3.6 running PHP 8.0 ami-04de7ac2259913496

試してみた

注意:サンプルアプリケーションをx86で新規環境を構築し、UpdateでGraviton切り替えています。簡易検証が目的で実施しており、言語・環境によってできない可能性が高いです。別途Graviton用のElastic beanstalk環境を作ってデプロイしてテストを行うことをオススメいたします。

詳細な手順は以下をご参照ください。

Recommendations for Graviton arm64 first wave environments

phpのサンプルアプリケーションで新規環境を構築

x86のインスタンスタイプで構築されます。

ブラウザアクセスできることを確認。

Gravitonへの切り替え

現在のところ、Gravitonの構築やアップデートはCLIでの実施となります。

構築が完了しましたら、Gravitonへの変更に必要な情報を確認します。

$ aws elasticbeanstalk describe-environments --region us-east-1
## 抜粋です ##
{
    "Environments": [
        {
            "EnvironmentName": "Sampleapp-env",
            "ApplicationName": "sample-app",
            "SolutionStackName": "64bit Amazon Linux 2 v3.3.8 running PHP 8.0",
            <省略>
        }
    ]
}

以下のコマンドで変更できました。option.jsonは下に書いています。(application-nameやenvironment-nameを上記より記載)

$ aws elasticbeanstalk update-environment \
--region us-east-1 \
--application-name sample-app \
--environment-name Sampleapp-env \
--solution-stack-name "64bit Amazon Linux 2 v3.3.8 running PHP 8.0" \
--option-settings file://option.json

{
    "EnvironmentName": "Sampleapp-env",
    "EnvironmentId": "e-cjb29rgpbr",
    "ApplicationName": "sample-app",
    "VersionLabel": "Sample Application",
    "SolutionStackName": "64bit Amazon Linux 2 v3.3.8 running PHP 8.0",
    "PlatformArn": "arn:aws:elasticbeanstalk:us-east-1::platform/PHP 8.0 running on 64bit Amazon Linux 2/3.3.8",
    "EndpointURL": "awseb-AWSEB-hogehoge-xxxxxxxxxxx.us-east-1.elb.amazonaws.com",
    "CNAME": "Sampleapp-env.hogehoge.us-east-1.elasticbeanstalk.com",
    "DateCreated": "2021-12-03T08:20:14.315000+00:00",
    "DateUpdated": "2021-12-03T09:29:44.372000+00:00",
    "Status": "Updating",
    "AbortableOperationInProgress": true,
    "Health": "Grey",
    "Tier": {
        "Name": "WebServer",
        "Type": "Standard",
        "Version": "1.0"
    },
    "EnvironmentArn": "arn:aws:elasticbeanstalk:us-east-1:xxxxxxxxxxxx:environment/sample-app/Sampleapp-env"
}

option.json

[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  },
  {
    "Namespace": "aws:ec2:instances",
    "OptionName": "InstanceTypes",
    "Value": "t4g.small, t4g.micro"
  }
]

変更時のログなどはGUIで確認できます。

Elastic Beanstalkでのログを確認。

EC2インスタンスが切り替わっていることを確認

ブラウザで同様にアクセスを確認

最後に

東京リージョンでも利用できるようになるのが楽しみですね。