Amazon QにおすすめのEC2インスタンスタイプを教えてもらう

### Amazon Qが発表されました
2023年11月末、AWSの新サービス「Amazon Q」が発表されました。
こちらはAWSで利用できる生成AIアシスタントサービスとのことです。

>Amazon Q is a new type of generative AI–powered assistant. It is specifically for work and can be tailored to your business to have conversations, solve problems, generate content, and take actions using the data and expertise found in your company's information repositories, code bases, and enterprise systems.

https://aws.amazon.com/jp/q/faqs/

[現時点の機能としては、AWSサービスについて会話型Q&A機能や、コンソール画面から直接トラブルシューティング機能、コード変換によるアプリケーションのアップグレードなどが公表されています。](https://aws.amazon.com/blogs/aws/introducing-amazon-q-a-new-generative-ai-powered-assistant-preview/)

AWSをすでに利用している方にとってこれらの機能が興味深いのはもちろんですが、コード変換機能などはAWS未経験の方も気になる機能ではないでしょうか。

さてどうやら色々便利そうなAmazon Qですが、EC2インスタンスタイプの選択の最適化をサポートしてくれる機能があるのだとか。
今回はこちらの機能を試してみたいと思います。
>Amazon Q offers help to optimize EC2 instance type selection (preview)

https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-q-optimal-ec2-instance-selection-workload/

### Amazon Q のEC2 インスタンスタイプの選択サポート機能を試してみる
EC2のインスタンスタイプは非常に種類が多いです。
公式のページを見ても大まかに「一般用途向け」、「コンピューティング最適化」、「メモリ最適化」、「高速コンピューティング」、「ストレージ最適化」、「HPC最適化」と分かれており、そのそれぞれに何種類ものインスタンスタイプがあります。
https://aws.amazon.com/jp/ec2/instance-types/
それだけ多様なワークロードに対応可能ということですが、やはりどのインスタンスタイプが”最適”なのか判断するのは、なかなかハードルが高いです。

というわけで早速使ってみます！

サポート機能はEC2インスタンス起動時に利用できるようです。
コンソール画面から EC2 > インスタンス > インスタンスを起動 に移動します。
まずは名前を「test-AmazonQ」にして、AMIはクイックスタートの「Amazon Linux2023 AMI」を選択します。
![2023-12-04_23h24_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/d0ff41f5-e7ad-0927-e1e7-5ab1086df0e8.png)
![2023-12-04_23h24_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/c8666d92-caf5-e359-09d7-082b2f483e54.png)

いつもなら次に「インスタンスタイプ」を選択するのですが
「インスタンスタイプ」の横に「Get advice」というリンクができています。
![2023-12-04_23h26_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/1902afbd-9ff0-dde7-46be-1a8d7044dce5.png)
このリンクをクリックすると、ポップアップが出てきました。
![2023-12-04_23h28_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/dba1bce7-8b46-a037-a5cf-58f4592f9e60.png)
内容を見てみましょう。
>Get advice on instance type selection from Amazon Q

>Tell us more about your requirements to generate instance type suggestions
We will use Amazon Q, a generative AI assistant, to generate instance type suggestions

（DeepL翻訳）
>Amazon Qからインスタンスタイプ選択のアドバイスを受ける

>インスタンスタイプの提案を生成するための要件について詳しくお聞かせください。
>生成的なAIアシスタントであるAmazon Qを使用して、インスタンスタイプの提案を生成します。

なるほど、構築するEC2インスタンスの要件について答えればよさそうです。
ここで表示されているプルダウンメニューは全部で4つ。
①Use Case
②Workload type
③Priority
④CPU Manufacturers

（DeepL翻訳）
①ユースケース
②ワークロード型
③優先度
④CPUメーカー

今回は『自社ホームページのためのWebサーバーを構築したい。費用はなるべく抑えたい』というケースだと想定して答えてみましょう。
①ユースケース 
![2023-12-04_23h40_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/bc470612-f707-bb2e-adce-5c18a58e66b0.png)
色々選べますね！
確認したところ、選択肢には以下のようなものがありました。

:::note warn
現時点（2023/12/05）の選択肢を記載しています。
:::

<dl>
<dt>（選択肢）</dt>
<dd>Web Hosting</dd>
<dd>Application Hosting</dd>
<dd>Application Development & Testing</dd>
<dd>Backup and Disaster Recovery</dd>
<dd>Data Science & Analytics</dd>
<dd>High Performance Computing(HPC)</dd>
<dd>Gaming</dd>
<dd>General Database & Data Storage Applications</dd>
<dd>Content Delivery Networks(CDNs)</dd>
<dd>E-commerce</dd>
<dd>Customer Relationship Management(CRM)</dd>
<dd>Enterprise Resource Planning(ERP)</dd>
<dd>Business Intelligence(BI) </dd>
<dd>Internet of Things(IoT)</dd>
<dd>Desktop Virtualization</dd>
<dd>Other</dd>
</dl>
今回はWeb Hosting を選択します。

②ワークロード型 
![2023-12-05_01h18_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/cbf4c3bf-76bb-332d-3b65-c29b9294fc3f.png)
こちらも選択肢がいろいろありました。
<dl>
<dt>（選択肢）</dt>
<dd>Web/App Server</dd>
<dd>Cache</dd>
<dd>Data Warehousing</dd>
<dd>Deep Learning Training</dd>
<dd>ETL/Workflow Management</dd>
<dd>Hadoop</dd>
<dd>Kubernetes/Dockers/Containers</dd>
<dd>Machine Learning</dd>
<dd>Message Queue</dd>
<dd>NoSQL</dd>
<dd>Relational Database Management System(RDBMS)</dd>
<dd>SAP</dd>
<dd>SAP Hana</dd>
<dd>Scientific Simulations/Numerical Computing</dd>
<dd>Search</dd>
<dd>Spark</dd>
<dd>Streaming</dd>
<dd>Video Encoding/Transcoding</dd>
<dd>Other</dd>
</dl>

今回はWeb/App Server を選択します。

③優先度
ここでは何を最重視するかを入力するようです。
<dl>
<dt>（選択肢）</dt>
<dd>Price/Performance</dd>
<dd>High Performance</dd>
<dd>Low cost</dd>
<dd>High availability</dd>
</dl>

今回はLow cost（低コスト）を選びます。

④CPUメーカー
<dl>
<dt>（選択肢）</dt>
<dd>指定なし</dd>
<dd>Amazon(Gravition)</dd>
<dd>Intel</dd>
<dd>AMD</dd>
<dd>Apple(Mac)</dd>

今回は指定なしで選んでみましょう。

"Get instance type advice"をクリックします。
![2023-12-04_23h47_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/873dfb56-0c1b-5e0b-1c24-ec05e3cbc190.png)

すると、Amazon Qのチャットが開きました。先程入力した内容が疑問文になって送信されたようです。（！）
![2023-12-05_00h34_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/fe1a706f-f6d3-a51e-3605-c924bc80c80d.png)

この疑問に対するAmazon Qの回答は、T3, T2のインスタンスファミリーを推奨するという内容でした。
回答全文
>EC2 Instance Selection Assistant recommends Instance Families: T3, T2
>
>EC2 Instance Selection Assistant reasoning for recommendations:
>
>    The use case is for web hosting which requires low cost instance families for hosting static websites or low traffic dynamic websites.
>    T3 and T2 instance families are the lowest cost general purpose instance families suited for cost-optimized, burstable performance applications like web hosting.
>
>    T3 instances provide up to two times better CPU performance over T2 instances and are a better choice for most workloads.
>
>    General purpose instance families like T3 and T2 provide adequate compute, memory, and network resources for web/app server workloads and are more cost effective compared to compute or memory optimized instance families for this use case.
>
>    For higher performance requirements, M5 or M5a general purpose instance families can be considered which provide better network and CPU performance at a higher cost.
>
>    Refer AWS documentation for the latest pricing and instance specifications and limits before making a selection. Instance needs may vary based on the specific web application.
>
>Sources
>
>[1] How do I choose the appropriate EC2 instance type for my workload? 
>
>[2] Overview of Amazon EC2 and Amazon RDS Instance Families - Right Sizing: Provisioning Instances to Match Workloads 

（DeepL翻訳）
>EC2インスタンス選択アシスタントがインスタンスファミリーを推奨： T3、T2
>
>EC2 Instance Selection Assistantの推奨理由：
>
>    ユースケースはWebホスティングで、静的なWebサイトやトラフィックの少ない動的なWebサイトをホスティングするために低コストのインスタンスファミリが必要です。
>
>    T3およびT2インスタンスファミリは、Webホスティングのようなコスト最適化された、バースト可能なパフォーマンスのアプリケーションに適した、最も低コストの汎用インスタンスファミリです。
>
>    T3インスタンスは、T2インスタンスよりもCPU性能が最大2倍優れており、ほとんどのワークロードに適しています。
>
>    T3やT2のような汎用インスタンス・ファミリーは、ウェブ/アプリ・サーバー・ワークロードに十分な計算、メモリー、ネットワーク・リソースを提供し、このユースケースで計算やメモリーを最適化したインスタンス・ファミリーと比較して、コスト効率が高くなります。
>
>    より高いパフォーマンス要件については、より高いコストでより優れたネットワークとCPUパフォーマンスを提供するM5またはM5a汎用インスタンスファミリーを検討することができます。
>
>    選択する前に、最新の価格とインスタンスの仕様と制限については、AWSのドキュメントを参照してください。インスタンスのニーズは、特定のWebアプリケーションによって異なる場合があります。
>
>情報源
>
>[1] ワークロードに適したEC2インスタンスタイプを選択するには？
>
>[2] Amazon EC2とAmazon RDSインスタンスファミリーの概要 - Right Sizing： ワークロードに合わせてインスタンスをプロビジョニングする 

#### 嬉しいポイント
さて使ってみて、個人的に嬉しいポイントが3つありました。

##### 嬉しいポイント①　簡単！
コンソールでポチポチ要件を入力するだけでおすすめのインスタンスタイプを教えてくれる（しかもおすすめする理由まで教えてくれる）のは、嬉しいですね。
正直に言うと、最初は生成AIサービスの機能なのにプルダウンメニューでポチポチ操作……？と少し不安になりました。けれども、ポチポチ操作の結果Amazon Qへの質問文を生成するところまでやってくれて、自然言語での回答が得られるというのは分かりやすくて助かりますね。

##### 嬉しいポイント②　ソースが記載されている。
回答と一緒にソースとなるURLが記載されています。
（このあたりはBing AIっぽいですね。）
![2023-12-05_00h43_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/20c4c22a-885d-5648-de28-f49fc6db7096.png)

生成AIの問題として「それっぽいこと答えてくれるけど情報の正確性が不明」というのをしばしば聞きますが、その問題は比較的クリアされていそうです。

##### 嬉しいポイント③　レコメンドしたインスタンスタイプ以外のインスタンスタイプについても回答してくれる。
これは入力した要件によって異なるかもしれませんが、今回の回答では T3、T2をレコメンドすると同時に、より高パフォーマンスの要件ならM5、M5aを検討するといいと教えてくれています。
一番のおすすめと一緒に、他にも適当そうな選択肢があるよと教えてくれるのは嬉しいですね。

ここでおまけです。
他のケースでもインスタンスタイプを複数教えてくれるのかどうか気になったので、もう一つ別のケースを考えてサポートしてもらいました。
今回は『動画編集で使う仮想デスクトップ用のサーバーを構築する。パフォーマンス重視、CPUはIntel希望。』というケースを想定。
![2023-12-05_01h05_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632295/4cf4b50a-e300-9561-1f5b-afbb933467b4.png)
さて、得られた回答はというと……。
回答全文
>EC2 Instance Selection Assistant recommends Instance Families: C7i, F1
>
>EC2 Instance Selection Assistant reasoning for recommendations:
>
>    The use case is for video encoding/transcoding workload for desktop virtualization which requires high performance instance families.
>
>    C7i and F1 instance families are the latest generation Intel based instance families from AWS that provide the highest performance for compute-intensive workloads like video encoding and transcoding.
>
>    C7i instances deliver up to 40% better price-performance over C6g instances for a wide variety of workloads including video encoding and transcoding.
>
>    F1 instances are designed to provide maximum performance for compute-intensive workloads and are powered by AWS Graviton2 processors. They offer up to 40% better price performance over C6g instances for compute-intensive workloads.
>
>    Older generation instance families like C6i would not provide the highest performance required for this use case, though they provide lower costs.
>
>    Refer AWS documentation for the latest pricing, specifications and limits of different instance types to select the optimal instance meeting performance requirements and budget. Instance needs may vary based on the specific application.
>
>Sources
>
>[1] How do I choose the appropriate EC2 instance type for my workload? 
>
>[2] Run Open Source FFMPEG at Lower Cost and Better Performance on a VT1 Instance for VOD Encoding Workloads 

（DeepL翻訳）
>EC2インスタンス選択アシスタントがインスタンスファミリーを推奨： C7i、F1
>
>EC2インスタンス選択アシスタントの推奨理由：
>
>    ユースケースは、デスクトップ仮想化のためのビデオエンコーディング/トランスコーディングのワークロードであり、高パフォーマンスのインスタンスファミリーが必要である。
>
>    C7iとF1インスタンスファミリは、AWSの最新世代のインテルベースのインスタンスファミリであり、ビデオエンコーディングやトランスコーディングのような計算負荷の高いワークロードに最高のパフォーマンスを提供する。
>
>    C7iインスタンスは、ビデオエンコーディングやトランスコーディングを含む様々なワークロードに対して、C6gインスタンスよりも最大40%優れた価格パフォーマンスを提供します。
>
>    F1インスタンスは、AWS Graviton2プロセッサを搭載し、計算負荷の高いワークロードに対して最大限のパフォーマンスを提供するように設計されています。F1インスタンスは、C6gインスタンスと比較して、計算集約的なワークロードに対して最大40%優れた価格パフォーマンスを提供します。
>
>    C6iのような旧世代のインスタンスファミリーは、低コストを提供するものの、このユースケースに必要な最高のパフォーマンスは提供しない。
>
>    パフォーマンス要件と予算を満たす最適なインスタンスを選択するために、異なるインスタンスタイプの最新の価格、仕様、制限についてはAWSのドキュメントを参照してください。インスタンスのニーズは特定のアプリケーションによって異なる場合があります。
>
>情報源
>
>[1] ワークロードに適したEC2インスタンスタイプを選択するには？
>
>[2] VODエンコーディングワークロード用のVT1インスタンスで、オープンソースのFFMPEGを低コストかつ優れたパフォーマンスで実行する 

やはりレコメンドしたインスタンスタイプとは別のインスタンスタイプについても教えてくれました。
今回はパフォーマンス重視の要件ですが、低コストな旧世代のインスタンスタイプについて教えてくれています。
試行回数2なので断言はできませんが、要件から少し外れた（けれども参考になりそうな）インスタンスタイプも回答してくれそうです！

### まとめ
生成AIアシスタントであるAmazon Qの機能のひとつ、EC2のインスタンスタイプ選択のサポート機能について書いてきました。
サポート機能はコンソール画面から簡単に操作できるので、AWSの運用経験が浅い人でも気軽に使えそうです。
現時点ではAmazon Qの対応言語が英語のみなのが少し残念ですが……。
日本語の対応が待ち遠しいですね。

===
ナレッジコミュニケーションでは「[Musubite](https://musubite-job.com/)」というエンジニア同士のカジュアルトークサービスを利用しています。
生成 AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください！

https://recruiting.musubite-job.com/features/company/knowledge-communication
 
今後もクラウド AI の最新情報を皆さんに届けていきたいと思います。お楽しみに。