1
/
5

ChatGPTにAWSのクラウドフォーメーションを出力させてみた

ChatGPTへの出力依頼プロンプト
「あなたはAWSのエンジニアです。EC2インスタンス名「LiteraFAQ」が、ターゲットグループ名「LiteraFAQ」に含まれており、そのターゲットグループはロードバランサー名「Literaapp」にある振り分けルールで「ホスト名に community.litera.app」に振り分け先に指定されています。この内容をクラウドフォーメーションの設定として出力することはできますか?」


出力されたクラウドフォーメーションにはインスタンス構築が入っていなかったため、それを追加。
その上インスタンスは作成時にすでにHTTPDなどもセットアップ状態にしておきたい。

「ありがとう。このテンプレートではEC2インスタンスの構築部分が入っていないので、t2microのスペックのEC2インスタンスを2台構築し、それがターゲットグループに含まれるようにしてもらえますか?EC2インスタンスのOSは Amazon Linuxで、可能ならこのOSにはApache2と最新版のPHP、mySQLクライアントや、AWSのコードデプロイエージェントをインストール済みにしたいです。環境設定がDockerでできるなら、その形でも問題ありません。この内容を先に出力したクラウドフォーメーションに含める形で出力可能ですか?」


ここまでだと、ターゲットグループもロードバランサーもすでに構築済み状態のものに入れる前提になっているので、ターゲットグループ、ロードバランサーも作成させてみる。

「ありがとう。ターゲットグループとロードバランサーは実は作成されていないものを指定したので、先に出力したクラウドフォーメーションの中に、これらの作成コードも含めることはできますか?」


追加分だけしか出力してくれなかったので、今まで出力したものをすべて結合して、完全なものにしてもらう。

「ありがとう。では今まで出力してもらったテンプレートをすべて結合して、完全なスタックにしてもらえますか?」

そして出力結果。途中できれてる?

「はい、以下にすべてのテンプレートを結合した完全なCloudFormationテンプレートを提供します。これにより、Amazon Linux 2 AMIを使用し、Apache2、PHP、MySQLクライアント、CodeDeployエージェントをインストールしたt2.microインスタンスが2台、およびそれらを含むターゲットグループとロードバランサーが作成されます。」

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
KeyName:
Description: Name of an existing EC2 KeyPair for SSH access
Type: "AWS::EC2::KeyPair::KeyName"
ConstraintDescription: must be the name of an existing EC2 KeyPair.
VpcId:
Type: "AWS::EC2::VPC::Id"
Description: Choose which VPC this stack should be deployed to
SubnetIds:
Type: "ListAWS::EC2::Subnet::Id"
Description: Choose which subnets this stack should be deployed to
InstanceType:
Type: "String"
Description: "EC2 instance type"
Default: "t2.micro"
AllowedValues:
- "t2.micro"
- "t2.small"
- "t2.medium"
WebServerPort:
Type: "String"
Description: "TCP/IP port of the web server"
Default: "80"
AllowedValues:
- "80"
- "8080"
AppName:
Type: "String"
Description: "The name of the application"
Default: "LiteraFAQ"
EnvironmentName:
Type: "String"
Description: "The name of the environment"
Default: "LiteraFAQ-Env"

Resources:
SecurityGroup:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupDescription: "Security group for EC2 instances"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: -1
CidrIp: 0.0.0.0/0

TargetGroup:
Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
Properties:
HealthCheckEnabled: true
HealthCheckIntervalSeconds: 30
HealthCheckPath: "/"
HealthCheckPort: "80"
HealthCheckProtocol: "HTTP"
HealthCheckTimeoutSeconds: 10
HealthyThresholdCount: 2
UnhealthyThresholdCount: 5
Matcher:
HttpCode: "200"
Name: !Ref AppName
Port: 80
Protocol: "HTTP"
TargetType: "instance"

LoadBalancer:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: "Literaapp"
Scheme: "internet-facing"
Subnets: !Ref SubnetIds
SecurityGroups:
- !Ref SecurityGroup

Listener:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
DefaultActions:
- Type: "forward"
TargetGroupArn: !Ref TargetGroup
LoadBalancerArn: !Ref LoadBalancer
Port: !Ref WebServerPort
Protocol: "HTTP"

どうも途中で切れてる気がするし、EC2の内部セットアップが含まれていないしで、出力文字数には制限あるのか?それも聞いてみました。

いや、そのくらい最初から知っとけよ、という話ですよねきっと。でも親切に何度も回答をくれるChatGTPさん、ありがたい存在ですな。気を使わずにいくらでも質問できる。

お子様のなぜなぜ攻撃のお相手としてChatGPT、いかがですかね。


そんな最近ChatGPTばかり触ってるCTOがいるリベンリおよびリベンリ秋田へのご応募、お待ちしております!

株式会社リベンリ's job postings
6 Likes
6 Likes

Weekly ranking

Show other rankings
Like Makoto Sakurai's Story
Let Makoto Sakurai's company know you're interested in their content