AWSとChatGPTを組み合わせたインフラ構築

    AWSとChatGPTを組み合わせたインフラ構築

    目次

      記事の目的

      ChatGPTとAWS CDKを利用してインフラ構築を自動化し、その構築の流れを紹介します。

      想定読者

      • ChatGPTに興味がある人
      • インフラ構築の自動化に興味があり勉強をしたい人

      アジアクエスト(AQ)のChatGPTの利用姿勢

      弊社としてはセキュリティへの配慮を十分に行いつつ、生産性、品質の向上にむけたChatGPTの利用可能性を最大限模索していく予定です。

      ただし、現時点ではChatGPT及びその関連サービスの安全性確認が十分に取れていないため、顧客案件での利用や機密性の高い分野での利用は控えております。

      ChatGPTとは

      ChatGPTとは、OpenAIによって開発された、人間の発話をシミュレートしてユーザーと自然なやり取りをするチャットボットのモデルです。OpenAIのGPT-3.5モデルを採用し、AI設計チームが強化学習(RLHF)を用いて学習されており、中国語、英語、日本語、スペイン語など複数の言語を認識します。

      参考:ChatGPTの概要

      CDKとは

      AWS Cloud Development Kit (AWS CDK) (以下、CDK)はTypeScript及びPythonなどのプログラミング言語を使用して、AWSリソースを定義し、Terraformの様にInfrastructure as Code(以降、IaC)を実現する手段として、クラウドインフラのリソースをプロビジョニングすることができます。

      参考:CDKの概要

      CloudformationとCDKとの違い

      CloudformationではJSONやYAMLを使用してAWSリソースを定義しています。
      CDKではプログラミング言語を使用し、Cloudfomationよりも少ないコード数でAWSリソースを定義できます。

       ChatGPTを使ったインフラ構築

      ゴール

      ChatGPTを使ってCDKのコードを作成し、EC2インスタンスとEC2 AutoScalingGroupを使ったインフラを構築します。

      以下の画像のような構成を作成します。

      Diagram.drawio

      実行環境

      事前に準備する実行環境は以下の通りです。

      • 言語:Typescript5.0.3
      • OS: Ubuntu20.04.5LTS 

      STEP1: CDKの使い方を聞いてみる

      CDKの利用方法を聞いてみます。

      1-0

      1-1

      1-2

      1-3

      1-4

      CDKを使用するためには、まず初めにいくつかのツールをインストールする必要があるみたいです。

       

      STEP2: 必要なツールをインストールする

      STEP2-1: Node.jsのインストール

      では、Node.jsをインストールしていきましょう。

      1-1

      $ curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
      sudo apt-get install -y nodejs

      画像の通りにコマンドを実行します。

      2

      Node.jsをインストールできました。

       

      STEP2-2: CDKのインストール

      Node.jsのインストールができたら、次はCDKのインストールです。

      1-2

      $ npm install -g aws-cdk

      コマンドを実行します。

      error

      エラーが出ました。

      sudoをつけて管理者権限で実行してみます。

      cdk_install

      cdk_version

      CDKをインストールできました。

       

      STEP3: CDKプロジェクトの準備をする

      STEP3-1: ディレクトリの作成と移動

      Node.jsとCDKのインストールが終わったら、CDKプロジェクト用のディレクトリを作成します。

      1-3

      $ mkdir my-cdk-project
      cd my-cdk-project

      画像のコマンドを実行して、ディレクトリを作成し、そのディレクトリに移動します。

       
       

      STEP3-2: プロジェクト作成

      CDKアプリケーションを作成します。

      1-4

      $ cdk init app --language typescript

      今開いているmy-cdk-projectで画像のコマンドを実行して、CDKアプリケーションを作成します。

      5

      作成できました。

      これでCDKプロジェクトの作成は完了です。 

       

       

      STEP3-3: アプリケーション内ファイルの役割

      CDKプロジェクトを作成すると、以下のようなファイルが生成されます。

       

      スクリーンショット 2023-05-25 22.49.51

      それぞれのファイルがどのような役割を持っているのか分からないので、質問をしてみます。

      9

      AWSリソースを生成するためのコードは、'lib/<アプリ名>-stack.ts'に書くようです。

      今回の場合、'lib/my-cdk-project-stack.ts'です。

      ちなみに、初期状態の'my-cdk-project-stack.ts'の中身は以下の画像のようになっています。

      7

       

      STEP4: 構成の作成

      STEP4-1: コード記述

      実際にコードを書いて構成を作成していきます。

      EC2 AutoScalingGroupを使用した構成を、作成する方法を聞きます。

      8-1

      8-2

      import * as cdk from 'aws-cdk-lib';
      import * as ec2 from 'aws-cdk-lib/aws-ec2';
      import * as autoscaling from 'aws-cdk-lib/aws-autoscaling';

      export class MyCdkProjectStack extends cdk.Stack {
      constructor(parent: cdk.App, name: string, props?: cdk.StackProps) {
      super(parent, name, props);

      const vpc = new ec2.Vpc(this, 'VPC');

      const asg = new autoscaling.AutoScalingGroup(this, 'ASG', {
               vpc,
               instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
               machineImage: new ec2.AmazonLinuxImage(),
      });
      }
      }

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

      EC2 AutoScalingGroupを構築するコードだけでなく、インフラ構築に必要な要素をまとめて書いてくれたようです。

      では、'lib/my-cdk-project-stack.ts'にこのコードを記述します。

      10

       

      STEP4-2: アプリケーションのビルド

      'lib/my-cdk-project-stack.ts'に記述しただけでは、コードは実行されません。

      記載したコードを実行する方法を聞きます。 11-1

      11-2

      $ npm run buildを実行してみます。

      12

      エラーが出ました。

      解決策を聞いてみます。

      13

      'lib/my-cdk-project-stack.ts'ファイル内のクラスが、他のファイルで使用できていないようです。

      'bin/my-cdk-project.ts'ファイル内のimport { MyCdkProjectStack } from '../lib/my-cdk-project-stack';という箇所では、'lib/my-cdk-project-stack.ts'ファイル内のクラス'MyCdkProjectStack'を読み込んでいます。

      13-2

      しかし、'lib/my-cdk-project-stack.ts'ファイル内のクラスには'MyCdkProjectStack'がないため、読み込みができていないようです。

      そのため、'lib/my-cdk-project-stack.ts'ファイル内のクラス名を'RedundantStack'から'MyCdkProjectStack'に変更する必要があります。

      'lib/my-cdk-project-stack.ts'ファイルには、'RedundantStack'と書かれている所が3つあるので、全て'MyCdkProjectStack'に変更します。

       

      変更前

      14-1

      変更後

      14-2

      では、改めて$ npm run buildを実行してみます。

      15

      エラーを出さずに実行できました。

      これでアプリケーションのビルドは完了です。

       

       

      STEP4-3: CDKのデプロイ(失敗)

      次はCDKのデプロイです。

      11-1

      $ cdk deployを実行します。

      16

      エラーが出ました。

      エラーについて聞いてみます。

      17-1

      17-2

      2つの解決方法を教えてくれました。

      1つ目の「'cdk.json'ファイルでAWSアカウントを設定する」の方法を試してみます。

      my-cdk-projectディレクトリ内の'cdk.json'ファイルを開きます。

      appの項目の下に、aws_accountを追加し、自分のAWSアカウントのIDを設定します。

      18

      再度、$ cdk deployを実行します。

      エラーが出ました。(スクショ撮り忘れました。内容は下記のChatGPT内で聴いているエラーになります。)

      エラーの解決方法を聞きます。

      19-1

      19-2

      19-3

      AWSアカウントの認証情報を設定する必要があるようです。 また、その設定のためにはAWS CLIが必要なようです。

       

       

      STEP4-4: CLIのインストール

      AWS CLIをインストールする方法を聞きます。

      20-1

      20-2

      以下を実行します。

      $ sudo apt-get update $ sudo apt-get install awscli

      ※この方法では最新バージョンのAWS CLIをインストールすることができないようです。最新バージョンのインストール方法は、後ほど記載します。

      $ aws --versionでAWS CLIのバージョンを確認します。

      21

      CLIのバージョン1がインストールされました。

      しかし、CLIには最新バージョンであるバージョン2が存在しています。

      最新バージョンのインストール方法を聞きます。

      22-1

      22-2

      公式サイトにアクセスする前に、先ほどインストールしたCLIを削除します。

      削除方法を聞きます。

      23-1

      23-2

      $ sudo apt-get remove awscli
      $ sudo apt-get autoremove
      $ rm -rf ~/.aws

      上記のコマンドを順番に実行します。

      すべて実行し終えたら、https://aws.amazon.com/cli/にアクセスして、最新バージョンのAWS CLIをダウンロードします。

      以下のコマンドでダウンロードできるようです。

      $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

      コマンドを実行します。

      次に、$ unzip awscliv2.zipを実行して、ダウンロードしたファイルを解凍します。

      24

      エラーが出ました。

      unzipをインストールする必要があるみたいです。

      インストール方法を聞きます。

      25-1

      25-2

      $ sudo apt-get update
      $ sudo apt-get install unzip
      $ unzip --version

      上記のコマンドを順番に実行していきます。

      26

      unzipをインストールできました。

      再度、$ unzip awscliv2.zipを実行します。

      問題なく実行できました。

      最後に、$ sudo ./aws/installを実行します。

      27

      AWS CLIをインストールできました。

       

       

      STEP4-5: 認証情報の設定

      それでは、AWSアカウントの認証情報を設定していきます。

      19-1

      19-2

      $ aws configureコマンドを実行して、以下の部分に値を入力していきます。

      • 'YOUR_ACCESS_KEY'
      • 'YOUR_SECRET_KEY'
      • 'YOUR_REGION'

      'Default region name'の項目は、AWSリソースを構築したいリージョンを入れます。

      オハイオリージョンを使用したいので、'us-east-2'と入力しました。

      リージョン名の一覧は以下のリンクから見れます。ちなみに東京リージョンは、'ap-northeast-1'です。

      https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

      認証情報をすべて入力しました。

      $ aws sts get-caller-identityを実行します。

      28

      エラーが出ました。

      AWSの認証にSTSを使用しているため、追加の設定が必要な可能性があります。

      STSについては詳しく知りたい方はこちらを参照してください。

      https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp.html

      STSを利用している場合の認証情報の設定を、質問してみます。

      29-1

      29-2

      既に一時的な認証情報は取得しているので、3番目のAWS CLIの認証情報を設定する所から始めます。

      先ほど、'AccessKeyId'と'SecretAccessKey'は設定したので'SessionToken'を設定していきます。

      $ aws configure set aws_session_token <SessionToken>の'SessionToken'の部分に自分が保持しているセッショントークンの情報に書き、コマンドを実行します。

      セッショントークン情報の設定を終えたら、$ aws sts get-caller-identityを実行します。

      自分のユーザーIDやアカウントIDが表示されました。

      これで認証情報が正しく設定できました。

       

       

      STEP4-6: CDKのデプロイ(成功)

      それでは、$ cdk deployを実行しましょう。

      30

      エラーが出ました。

      $ cdk bootstrapを実行する必要があるようです。

      ちなみにブートストラップとは、CDKアプリケーションを環境にデプロイする前にリソースをプロビジョニングするプロセスです。

      $ cdk bootstrapを実行します。

      31

      ブートストラップができました。

      $cdk deployを実行します。

      32-1

      正常に実行されました。

      コンソールを見ると、EC2インスタンスとEC2 AutoScalingGroupがデプロイされたのが確認できます。

       32-2

      32-3

       

      STEP5: CDKの削除

      最後にCDKで作成したリソースを削除します。

      削除の方法を聞きます。

      cdk-destroy1

      画像の通りに$ cdk destroyコマンドを実行します。

      cdk-destroy2

      確認画面が出たので、'y'を入力します。

      cdk-destroy3

      CDKで作成したリソースが削除できました。

       

       

      感想

      CDKの知見がまったくない状態からのスタートでした。分からないことは多々ありましたが、ChatGPTのおかげでリソースのデプロイまで実行することができました。

      今回の作業中に何度も思ったのが、ChatGPTの利便性です。
      ChatGPTの回答は一から丁寧に記載されており、達成したい目標に対して複数の工程が必要な場合も工程ごとに回答がまとめられていて分かりやすかったです。
      また、回答の中で疑問に思ったことがあれば、その旨を質問すると詳細な回答があり、時には公式のドキュメントに案内をしてくれました。

      ChatGPTをはじめとしたAIは、凄まじい勢いで進化を続けています。
      情報収集を積極的に行い、AIを上手に活用できるようになりたいです。

      参考記事 https://openai.com/blog/chatgpt https://aws.amazon.com/jp/cdk/