AWS - CloudFormation
AWSインフラをコードで宣言するCloudFormationについて学びましょう
Claude Opus 4.5による翻訳
AI生成コンテンツは不正確または誤解を招く可能性があります。
理論
CloudFormationとは?
AWSインフラをコードで宣言する方法です。 あらかじめコードで記述したAWSインフラリソースを作成または削除できます。 類似のサービスにはTerraformがあり、これらを総称してIaC(Infrastructure as Code)と呼びます。
テンプレート
作成するインフラリソースをコードで定義したファイルです。 JSON、YAML形式を使用できます。
作成手順
- テンプレートをCloudFormationにアップロード
- CloudFormationでスタック作成コマンドを実行
- AWSがテンプレートに記述された順序で自動的にリソースを作成
削除手順
- CloudFormationでスタック削除コマンドを実行
- AWSが自動的にインフラリソースを削除
実習
スタック作成
Parameters:
KeyName:
Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
Type: AWS::EC2::KeyPair::KeyName
ConstraintDescription: must be the name of an existing EC2 KeyPair.
LatestAmiId:
Description: (DO NOT CHANGE)
Type: "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>"
Default: "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
AllowedValues:
- /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: t2.micro
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: WebServer
SecurityGroups:
- !Ref MySG
UserData:
Fn::Base64: !Sub |
#!/bin/bash
yum install httpd -y
systemctl start httpd && systemctl enable httpd
echo "<h1>Test Web Server</h1>" > /var/www/html/index.html
MySG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP access via port 80 and SSH access via port 22
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0上記のコードをtest_lab1.yaml形式で保存し、次のステップに進みます。
- CloudFormation Consoleにアクセスし、スタック作成をクリック
- 準備されたテンプレートを選択 -> テンプレートファイルをアップロード
- 任意のスタック名を指定(CF-TEST)
- KeyName:使用しているキーペアを選択
作成されたリソースの確認
- EC2 Consoleにアクセス
- インスタンス -> インスタンス
- WebServerインスタンスのIPを確認
- SSHおよびHTTP接続を確認
スタック削除
- CloudFormation Consoleにアクセス
- スタックタブ
- 作成したスタックを選択(CF-TEST)
- 削除をクリック
削除されたリソースの確認
- EC2 Consoleにアクセス
- インスタンス -> インスタンス
- WebServerインスタンスの状態を確認(Terminated)
作成日:
更新日: