Amazon Qを使用してAWS CloudFormationのテンプレートを作成してみた

Amazon Qを使用してAWS CloudFormationのテンプレートを作成してみた

Clock Icon2024.10.04

こんにちは。まるとです。
皆さんはAmazon Qを活用していますか?

今回はAmazon QとAWS CloudFormationを組み合わせて使ってみたところ、驚くほどテンプレート作成が捗ったので記事にしたいと思います。

先にまとめ

  • コメントを書くだけで効率よくテンプレート作成ができる
  • Nameタグなど、今まで設定した内容を元にうまく生成してくれる
  • 完璧なものができる、という訳ではなく生成内容の確認は必要
  • Amazon Q Developerを使うことで作業効率が向上し、より快適に作業できると感じました(個人の感想)

Amazon Qとは

AWSが提供している生成AIアシスタントです。
Amazon Qの中にもいくつかサービスがあり、簡単にですが以下に記載します。

  • Amazon Q Business
    • 質問への回答やサードパーティサービスとのコネクタを使用することで組織が保有するデータを元にしたQ&A、自然言語によるタスクの実行ができる
  • Amazon Q Developer
    • 開発者向けの生成AIアシスタント。Q&Aやコード生成などができるサービスです。

その他、以下のサービスとの統合もあります。

  • Amazon QuickSight
  • Amazon Connect
  • AWS Supply Chain

以下のブログでも取り扱っていますので、よろしければご覧ください。

https://dev.classmethod.jp/articles/introduction-2024-amazon-q-business/

https://dev.classmethod.jp/articles/amazon-q-developer-ga/

AWS CloudFormationのテンプレートを書きたい

AWS CloudFormationのテンプレートは、細かな値を一つ一つ定義できる一方で、自分で設定しなければならない値が多く、何度も公式ドキュメントとエディタを行き来したことはありませんか?自分はAWS CloudFormationのテンプレート作成に慣れていないこともあり、結構行き来していました。

ある程度決まったパラメーターなどはドキュメントを行き来しなくても、テンプレートを書けるようになりたいな、という気持ちもありつつ、設定できるパラメーターや覚えることが多いと感じることがあります。

そこでAmazon Q Developerの出番です。

最初の簡単なまとめでもお伝えしたように、Amazon Q Developerにはコード生成機能がございます。
もちろん、AWS CloudFormationのテンプレートも生成の例外ではありません。

それでは早速やっていきましょう。

Amazon Q Developerをエディタ上で使用するには以下のものが必要となります。

  • エディタに合った拡張機能(プラグイン)
    • JetBrains IDE、Visual Studio Code、Visual Studio、コマンドライン(macOS)に対応
  • Builder IDまたはProライセンスが割り当てられたIAM Identity Centerユーザー

今回はVisual Studio Codeを想定して触っていきたいと思います。

拡張機能のインストール

まずは、Visual Studio Code用の拡張機能をダウンロード、インストールを行います。
拡張機能は公式サイトからダウンロードできます。

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

Amazon Qの有効化、やってみる

拡張機能のインストール後、Builder IDまたはProライセンスが割り当てられたIAM Identity Centerユーザーでサインインします。
今回はFreeライセンスを使用するため、Use for Freeを選択して、Builder IDでサインインします。(ブラウザが開くのでサインイン、連携の承認をしてください)

m-C-1

連携完了後、チャットの画面が開き、ステータスバーのAmazon Qの表示で赤色のハイライトがされなくなれば、準備OKです。
チャット画面は今回使わないので、拡張機能のサイドバーを閉じておきましょう。

m-C-2

それでは早速新規ファイルを作成して、書いていきましょう!
YAMLで書いていくので、ファイル形式でYAMLを選択しておきます。

m-C-3

今回はシンプルに以下の構成を作っていきます。

m-C-4

Amazon Qはエディタで入力していくと候補を生成してくれます。
試しにVPCというコメントを入力してみます。すると、Amazon Q is generating...という表示がでます。

m-C-5

しばらくすると、生成した候補が表示されます。(Tabキーを押下することで確定できます。)

m-C-6

同じように図の構成を作っていきます。(1分もかからずテンプレートが作成できています。凄いです。)

https://www.youtube.com/watch?v=TVpMpgMw3yQ

できたもの

提示された候補をそのまま確定した結果が以下のようになります。

AWSTemplateFormatVersion: 2010-09-09
Description: Amazon Q Developer generate AWS CloudFormation template test

# VPC
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-vpc

# Public Subnet
  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.0.0/24
      AvailabilityZone: !Select [ 0, !GetAZs '' ]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-public-subnet

# Private Subnet
  PrivateSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [ 0, !GetAZs '' ]
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-private-subnet

# Internet Gateway
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-igw

# Attach Internet Gateway to VPC
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway

# Route Table
  RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-route-table

生成されたテンプレートの中で細かなパラメーターを見ていきます。

VPC

項目名 設定値
Nameタグ <スタック名>-vpc
CIDR 10.0.0.0/16
DNSホスト名 有効
DNS解決 有効
テナンシー デフォルト

パブリックサブネット

項目名 設定値
Nameタグ <スタック名>-public-subnet
CIDR 10.0.0.0/24
アベイラビリティーゾーン 任意の1ゾーン
パブリックIPv4アドレスの自動割り当て 有効

プライベートサブネット

項目名 設定値
Nameタグ <スタック名>-private-subnet
CIDR 10.0.1.0/24
アベイラビリティーゾーン 任意の1ゾーン
パブリックIPv4アドレスの自動割り当て 無効

インターネットゲートウェイ

項目名 設定値
Nameタグ <スタック名>-igw
アタッチ先VPC 本テンプレートで構築したVPC

ルートテーブル

項目名 設定値
Nameタグ <スタック名>-route-table
ルート 10.0.0.0/16 local

感想

なお、今回の検証では、AWS CloudFormationで実際にスタックを作成した際に、生成されたテンプレートを正常に利用・リソースの作成が成功しました。

m-C-7

一方で、インターネットゲートウェイが存在するのにもかかわらず、ルートテーブルではデフォルトで作成される、VPC内の通信(10.0.0.0/16)のみが定義されています。

そのため、インターネット宛の通信を行うためには、ルートテーブルに適切なルートを追加する必要があります。(例: 0.0.0.0/0をインターネットゲートウェイ宛)
ただ、ルートテーブルの修正のみを行うことで、インターネットアクセスを提供するVPCを簡単に構築できる点も魅力です。

終わりに

今回はAmazon Qを用いてAWS CloudFormationのテンプレートを作成してみました。
必ず自身の要件にあったものになっているか確認が必要であるものの、素早くテンプレートを作成することができました。

テンプレートの作成を高速化することにより、直ぐに実際の環境構築に取り掛かれる点は凄く魅力的なのではないでしょうか。
ぜひ皆様も触って見てください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.