AWSのEC2インスタンス作成しSSH接続してみるという処理を、これまで「AWS Management Console」と「AWS CLI」2通りで実現してみました。
今回は AWS Cloudformation で同じことを実行してみます。
キーペアの作成
まず、AWS CLIを使って次のコマンドでキーペアを作成します。
aws ec2 create-key-pair --key-name CFKey --query "KeyMaterial" --output text > CFKey.pem
コマンド入力したカレントディレクトリに.pemファイルができていればOK。

CloudFormationテンプレートの作成と保存
以下の内容を、”ec2.yml”というテキスト形式で保存します。
AWSTemplateFormatVersion: '2010-09-09'
Description: Simple EC2 instance with SSH access
Parameters:
KeyName:
Description: EC2 KeyPair Name
Type: AWS::EC2::KeyPair::KeyName
Resources:
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow SSH access
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
MyInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
KeyName: !Ref KeyName
ImageId: ami-08350f5895bb9d2fe # Amazon Linux 2023 kernel-6.1 AMI (使用するリージョン毎に異なるのでチェックが必要)
SecurityGroupIds:
- !Ref MySecurityGroup
Tags:
- Key: Name
Value: CFInstance
“MySecurityGroup”というセキュリティグループを作成している個所、ここではどこからでもアクセス可能なように0.0.0.0/0を指定していますが、本来であれば絞り込みを行った方が安全。
スタックの作成
以下のコマンドでスタックを作成します。(Windowsコマンドプロンプト方式)
aws cloudformation create-stack ^
--stack-name MyStack ^
--template-body file://ec2.yml ^
--parameters ParameterKey=KeyName,ParameterValue=CFKey
AWS management console上でもスタックが作成されていることが確認できます。

EC2インスタンスも作成されています。

SSH接続
パブリックIPアドレスを確認します。
マネジメントコンソール上でも見られますが、AWS CLIから以下のコマンドでも確認可能。
aws ec2 describe-instances ^
--filters Name=tag:Name,Values=CFInstance ^
--query "Reservations[*].Instances[*].PublicIpAddress" ^
--output text
パブリックIPアドレスを確認できたら、次のコマンドを実行。
ssh -i CFKey.pem ec2-user@<確認したパブリックIPアドレス>
次の表示が出て接続完了です。
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
リソースの削除
最後に余計な課金を防ぐためにも、リソースを全て削除しておきましょう。
aws cloudformation delete-stack --stack-name MyStack
マネジメントコンソール上で、スタックが削除されているのが確認できます。
