![見出し画像](https://assets.st-note.com/production/uploads/images/162579895/rectangle_large_type_2_d5d93cacc1387ad64e92f16dcf0a3b78.png?width=1200)
はじめてのCloudFormation
大丈夫や、俺もterraformしか使った事ない。chatgptと学ぶCloudFormation
AWS CloudFormation
chatgptによる解説
AWS CloudFormation(クラウドフォーメーション)は、AWSが提供するインフラストラクチャ自動化ツールです。インフラをコード(Infrastructure as Code, IaC)として定義し、テンプレートを用いてAWSリソース(例:EC2、S3、RDSなど)のプロビジョニング、管理、更新を一括で行うことができます。
主な特徴
テンプレート駆動:
JSONまたはYAML形式のテンプレートを使用して、リソースの構成を記述します。
テンプレートには、リソースの依存関係や設定を記述できます。
スタック:
CloudFormationではテンプレートで定義されたリソースの集合を「スタック」として管理します。
スタック単位で作成、更新、削除を行うため、一括操作が可能です。
自動化:
手動でリソースを設定する必要がなく、テンプレートを実行するだけでリソースが作成されます。
一貫性のある環境を構築できるため、運用負荷を軽減します。
リソースの依存関係管理:
リソース間の依存関係を自動で解析し、正しい順序で作成・削除を行います。
更新の安全性:
更新時には「変更セット」を作成し、リソースへの影響を確認してから適用できます。
主な用途
インフラの一括プロビジョニング: 開発環境や本番環境の構築を効率化します。
環境の複製: 一つのテンプレートを使い、同じ構成を他の環境に適用できます。
変更管理: 更新履歴をテンプレートで管理でき、構成ミスを防ぎます。
メリット
可読性: YAML/JSONテンプレートでインフラ構成を視覚化。
再利用性: テンプレートを共有・再利用可能。
コスト効率: 不要になったスタックを簡単に削除可能。
制限事項
学習コスト: テンプレート作成には慣れが必要。
複雑さ: 大規模環境ではテンプレートが煩雑になりがち。
AWSの公式ドキュメントやサンプルテンプレートを活用すれば、スムーズに導入を進められます。
例としてVPCを作成してみる
VPCとは
VPC (Virtual Private Cloud) は、AWS上で仮想的に分離されたネットワーク環境を提供するサービス。まあ分離されたネットワーク空間ということで1つのプロジェクトに1つVPCがあるのが普通
作ってみる(YAML)
chatgptが出力してきたyaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Simple VPC Creation Example
Resources:
MyVPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: "10.0.0.0/16"
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: "Name"
Value: "MySimpleVPC"
これをCloudShellで編集あるいはCloudShellにuploadしてみる。CloudShellの使い方は解説省略していいよね?
![](https://assets.st-note.com/img/1732087363-JqGLdIObPAS3uXgoMNCZ5BTk.png?width=1200)
simple-vpc.yamlと命名する。
続いて
aws cloudformation create-stack --stack-name SimpleVPCStack --region ap-northeast-1 --template-body file://simple-vpc.yaml
とすると
[cloudshell-user@ip-10-134-19-71 ~]$ aws cloudformation create-stack --stack-name SimpleVPCStack --region ap-northeast-1 --template-body file://simple-vpc.yaml
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:****:stack/SimpleVPCStack/dd8aef40-a710-11ef-b761-066f8bb1d58f"
}
となった
作成されたstackの確認
https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks
とかで確認できる。
![](https://assets.st-note.com/img/1732087787-LTHYgu5D7sMGX4evkKm0fUpa.png?width=1200)
作成されたvpcをみると
![](https://assets.st-note.com/img/1732087854-c9k70LtBurnx61Z3GohNbTFW.png?width=1200)
このようにMySimpleVPC が作成されている事が確認できる。
ここまでのまとめ
VPCのyamlを作成し
スタック作成コマンドを実行し
状態を確認した
以上をCloudShellを通じて行った
作業の問題点
CloudShellで作業しつづけるのは辛い
別サーバーでawsコマンドで入力するのはさすがにベタな気がする
って考えるとCodePipelineを使うという手法が考えられすぎるので次回以降セットアップしてみよう。
おまけ: aws cloudformationのサブコマンド
使用頻度が高いコマンド
スタック操作: create-stack, update-stack, delete-stack
情報確認: describe-stacks, get-template
テンプレート確認: validate-template
変更セット: create-change-set, execute-change-set
だそうです