GPT-4Vを活用してAWS環境をサクッと構築してみました
2023-11-02
azblob://2023/11/01/eyecatch/2023-11-02-chatgpt-gpt-4v-generate-aws-cdk-code-000.png

こんにちは、株式会社FIXERの村上です。

この10月下旬あたりに公開されたGPT-4V(画像解析)があまりに便利すぎて感動しました!!

早速使ってみたく、GPT-4V を使用して AWSのクラウド構成図をもとにAWS CDK v2(TypeScript)のコード生成を試してみることにしました。

前提条件

下記の条件を満たしておきます。

いざ試してみた

1.AWSの構成図をGPT-4Vで解析する

本ブログで用意したAWSのクラウド構成図(※)はこちらです。

※ S3に配置したコンテンツをCloudFront経由で配信する

ChatGPTに問いかける文章は必要最低限でいきます(画像解析の能力を確認したいため)。


生成結果はこちらです!!! 

生成された Resource モジュール はOpenAIの学習データを参照するため かなり古い(≒利用できない)ため公式リファレンスを読みながら人間の手で修正していきます。

2.CDKのソースコードを改修する

生成されたAWS CDKのコードをテキストエディタにコピペします。さっそくエラーの反応がありますね・・・

7行目、22行目のエラーを直したコードはこちらです。

TypeScriptimport { Construct } from 'constructs';
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';

export class GenerateAwsCdkProjectStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Amazon S3バケットの作成
    const websiteBucket = new s3.Bucket(this, 'WebsiteBucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY, // この行は本番環境では使用しないでください
      autoDeleteObjects: true, // この行も本番環境では使用しないでください
      publicReadAccess: false,
    });

    // CloudFrontのDistributionの作成
    const distribution = new cloudfront.Distribution(this, 'Distribution', {
      defaultBehavior: { 
        origin: new origins.S3Origin(websiteBucket),
        allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL,
        // HTTPをHTTPSにリダイレクトする設定
        viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
      }
    });

    // 出力
    new cdk.CfnOutput(this, 'CloudFrontDistributionURL', {
      value: distribution.distributionDomainName,
    });
  }
}

const app = new cdk.App();
new GenerateAwsCdkProjectStack(app, 'GenerateAwsCdkProjectStack');

3.デプロイする

5分ぐらい待機・・・

できた!

4.コンテンツ配信用の作業

静的ファイルをS3バケットに配置して、CloudFront経由で配信できるように実装していきます。

ChatGPTでリソースの設定を実装できると思いますが、いっぱいテキストを書くことを頑張りたくないため、手作業していきます。

  1. S3バケットに適当なHTMLファイルのオブジェクトを配置してみます。
  2. S3とCloudFrontを内部連携するために新しくオリジンアクセスを作成します。
  3. CloudFrontのディストリビューションへ移り、既存オリジンを編集します。
    ① オリジンアクセスを「Origin access control settings (recommended)」へ変更する
    ② 指示されるバケットポリシーをS3バケットに差し替える

     

5.動作確認

https://CloudFrontディストリビューションドメイン名/S3オブジェクト名」をブラウザで叩きます。

私の場合は https://d2b8j6acjl8dwa.cloudfront.net/index.html です。


無事、CloudFront経由でコンテンツ配信されたことを確認できました!!

さいごに

どのAI生成サービスも同様で、テキストだけのやり取りしかできなかったため、適切なプロンプトの記述に手間がかかったり、図で表現はできるものの、それをどうテキストに起こすべきか、常に悩んでいました。ただ、今回のアップデートにより画像解析の機能が追加され、ChatGPTの利用がかなり楽になりました。

個人的に次に期待したいのは、HashiCorp社のTerraformやOSSのPulumiなどのIaC(Infrastructure as Code)に関する最新情報を、ChatGPTが常に学習データとして取り込むことができる環境を実現してほしいですね!

参考