夏の暑さもだいぶ落ち着いてきていよいよ秋めいてきました、そろそろサンマがおいしい季節ですね、菅野です。
AWSを用いて様々なアーキテクチャを作成することが可能ですが、どういった構成になっているのかを一目で表すには図が効果的です。
手動でPowerPointや、draw.io等の作図ツールを用いて作成することも多いのではないか、と思いますが、ChatGPTで簡単に出力できたら便利ですよね。
Advanced Data Analysysの動作環境ではDiagramsライブラリがインストールされていないため、Pythonコードを直接ChatGPTで動かして構成図を出力してもらうことはできませんでした。
なので、今回はChatGPTにPythonのライブラリDiagramsを用いてクラウドの構成図を作成するPythonコードを作成してもらいましょう。
今回の検証ではGPT-4モデルを利用します。
Diagrams
Pythonのライブラリで、AWS、Azure、k8sといった様々なクラウド、サービスの構成図を作成するためのライブラリです。 diagrams.mingrammer.com
Diagramsを用いる準備
Diagramsを用いて構成図を作成するため、ローカル環境に以下の準備を実施します。
diagramsのインストール
以下のコマンドを実行してdiagramsをインストールします。
pip install diagrams
graphvisのインストール
diagramsでは、graphvisを用いて図の作成をします。
以下のサイトからgraphvisをインストールしましょう。
Windowsでのインストール実行時にはPathに追加するオプションがデフォルトオフになっていますが、追加するようにするとスムーズに利用できます。
入れ忘れてしまった場合には手動で実行ディレクトリをPathに追加しましょう。
クラウドのアーキテクチャ図を作成してもらう
下準備がととのったので、さっそくChatGPTでクラウドの構成図を作成してもらいましょう。
Webアプリケーションの例
WebアプリケーションをAWSで作成した場合の構成図を作成してもらいましょう。
(中略)
出力されたコードを実行したところエラーが発生したため、何度か修正を実施してもらいました。
(中略)
ただしこの出力でもVPCGatewayEndpointのimportエラーが発生しました。このあと何パターンか試したのですが、ChatGPTの出力ですと、importするモジュールのパッケージを間違えるケースが散発しました。このあともう1回やり取りして、最終的に修正されたものが次のコードです 。
from diagrams import Cluster, Diagram from diagrams.aws.network import Route53, ELB, VPC, Endpoint # <-- 修正箇所 from diagrams.aws.compute import EC2 from diagrams.aws.storage import S3 from diagrams.aws.database import RDS with Diagram("Web Application Architecture", show=False): dns = Route53("dns") with Cluster("VPC"): with Cluster("ELB"): load_balancer = ELB("ELB") dns >> load_balancer with Cluster("EC2 Cluster"): ec2_1 = EC2("EC2 AZ1") ec2_2 = EC2("EC2 AZ2") load_balancer >> ec2_1 load_balancer >> ec2_2 db = RDS("RDS") ec2_1 >> db ec2_2 >> db s3_bucket = S3("S3 Bucket") vpc_endpoint = Endpoint("VPC Endpoint") # <-- 修正箇所 ec2_1 >> vpc_endpoint >> s3_bucket ec2_2 >> vpc_endpoint >> s3_bucket
実行した結果以下のファイルが出力されました。
矢印が変なところもありますが、おおむね期待した形に出力できていますね。
機械学習を行う構成
AWSでは機械学習もサポートしています。
そちらを用いた構成図を作成してもらいましょう。
ただしこの出力でもまたimportエラーが発生しました。SageMakerのところです
ChatGPTにSageMakerのImport元を修正する案を出してもらいましたが、それでもエラーは解消しませんでした。
SageMakerモジュールは現在のドキュメントを見ると、diagrams.aws.ml には存在しているみたいですがSageMakerではなくSagemakerとなっている模様です。
DiagramsのGithubからSageMaker部分のコードを確認しても、SageMakerのモジュール名は2020年時点ですでにSagemakerであったのでChatGPTのモデルの学習データにないから出力できないというわけではなさそうです。
考えうる可能性としては一般的に利用されているSageMakerという語に引っ張られてしまっている可能性がありますね。
手動で修正した結果は以下です。
from diagrams import Diagram from diagrams.aws.compute import Lambda from diagrams.aws.network import APIGateway from diagrams.aws.ml import Sagemaker from diagrams.aws.storage import S3 with Diagram("Machine Learning App on AWS", show=False): api_gateway = APIGateway("API Gateway") lambda_function = Lambda("Lambda") sagemaker = Sagemaker("SageMaker") s3 = S3("Model in S3") api_gateway >> lambda_function >> sagemaker >> s3
実行して出力した結果が以下です。
APIGatewayを介して学習を実行、実行に用いたデータ、出力結果等を保存するアーキテクチャ図が作成されました。
Fargate(ECS)を用いた構成図
Fargate(ECS)を用いたAWSの構成も作ってもらいましょう。
追加でChatGPTに以下の修正をしてもらいました
- コンテナのアイコンにFargateのアイコンを使っていたのでコンテナのアイコンを使うようにした。
- Fargateのクラスター内にFargateのアイコンを置いてもらった。
- ECSのクラスター内にECSのアイコンを置いてもらった。
また、DynamoDBのモジュール名(Dynamodb)がサービス名のDynamoDBに引っ張られて間違っているため手動で直しました。
最終的な出力はこちら。
from diagrams import Cluster, Diagram from diagrams.aws.compute import ECS, Fargate, ElasticContainerServiceContainer from diagrams.aws.network import CloudFront, ELB from diagrams.aws.database import Dynamodb with Diagram("Web Application Architecture with AWS Fargate and ECS", show=False): # CloudFront cloudfront = CloudFront("CloudFront") # LoadBalancer load_balancer = ELB("LoadBalancer") cloudfront >> load_balancer with Cluster("ECS Cluster"): ecs_icon = ECS("ECS Service") # Fargate with Cluster("Fargate Cluster"): fargate_icon = Fargate("Fargate Service") containers = [ElasticContainerServiceContainer("Container 1"), ElasticContainerServiceContainer("Container 2"), ElasticContainerServiceContainer("Container 3")] fargate_icon >> containers load_balancer >> fargate_icon # DynamoDB dynamodb = Dynamodb("DynamoDB") containers >> dynamodb
実行した結果の画像がこちら。
幾つか指示を出して途中で修正してもらいましたが、意図通りの出力ができました。
まとめ
ChatGPTを用いてAWSの構成図を作成するPythonコードを作成してもらいました。
正式サービス名と異なる一部のモジュールに関しては、正式サービス名に引っ張られエラーになる可能性が高いです。
エラーが出た場合はおとなしくDiagramsのドキュメントを参照し手動で修正した方が早そうでした。
今後もChatGPTでどういった使い方ができるか探求していこうと思います。
Acroquest Technologyでは、キャリア採用を行っています。少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長