【AWS】CloudFormation ~ 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2024/02/10/231900

の続き。

AWS CloudFormation (CFn)  を触ったのでメモ。

目次

【1】手順
 1)新規作成
 2)設定変更
【2】サンプル
 例1:1 VPC 1 Subnet作成
 例2:EC2インスタンス構築 (イメージ)

【1】手順

https://techblog.raccoon.ne.jp/archives/1601887183.html

1)新規作成

[1] テンプレート作成 (後述「【2】サンプル」を参照)
[2] AWS Management コンソールにログインして、
 CloudFormation画面を開く
[3] 「スタックの作成」ボタン押下
[4] テンプレートをアップロードして、「次へ」ボタン押下
[5] スタック名とテンプレートに応じてパラメータを入力して
 「次へ」ボタン押下
[6] 「次へ」ボタン押下
[7] 確認画面が表示されるので、内容に問題がなければ
 「スタックの作成」ボタン押下

2)設定変更

# 変更も簡単にできる

[1] テンプレートを修正
[2] AWS Management コンソールにログインして、
 CloudFormation画面を開く
[3] 変更したいスタックを選択し、「更新する」ボタン押下
[4] テンプレートをアップロードして、「次へ」ボタン押下
[5] スタック名とテンプレートに応じてパラメータを入力して
 「次へ」ボタン押下
[6] 「次へ」ボタン押下
[7] 確認画面が表示されるので、内容に問題がなければ
 「実行」ボタン押下

【2】サンプル

例1:1 VPC 1 Subnet作成

AWSTemplateFormatVersion: '2010-09-09'
Description: "Create 1 VPC and 1 Subnet"

Resources:
  # ------------------------------------------------------------#
  #  VPC
  # ------------------------------------------------------------#
  DemoVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      InstanceTenancy: default
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
      - Key: Name
        Value: DemoVPC
  # ------------------------------------------------------------#
  #  Sunbet
  # ------------------------------------------------------------#
  DemoSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "us-west-2a"
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: 'true'
      # VPC ID は動的に決まるので、Ref関数を用いて参照
      VpcId: !Ref VPC
      Tags:
      - Key: Name
        Value: DemoSubnet

例2:EC2インスタンス構築 (イメージ)

AWSTemplateFormatVersion: '2010-09-09'
Description: "Demo to Create EC2 instance"

Parameters:
  InstanceType:
    Description: Select instance type
    Type: String
    Default: t2.small
    AllowdValues:
      - t2.micro
      - t2.small
      - t2.medium
  KeyPair:
    Description: Select key pair for EC2
    Type: AWS::EC2::KeyPair::KeyName

Resources:
  # ------------------------------------------------------------#
  #  VPC
  # ------------------------------------------------------------#
  DemoVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      InstanceTenancy: default
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
      - Key: Name
        Value: DemoVPC
  # ------------------------------------------------------------#
  #  Sunbet
  # ------------------------------------------------------------#
  DemoSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "us-west-2a"
      CidrBlock: 192.168.1.0/24
      MapPublicIpOnLaunch: 'true'
      VpcId: !Ref DemoVPC
      Tags:
      - Key: Name
        Value: DemoSubnet
  DemoInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
      - Key: Name
        Value: DemoInternetGateway
  DemoEc2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: 
      InstanceType: !Ref InstanceType
      SubnetId: !Ref DemoSubnet
      KeyName; !Ref KeyPair

参考文献

公式サイト
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html
一般サイト
https://atmarkit.itmedia.co.jp/ait/articles/1408/25/news014.html
https://dev.classmethod.jp/articles/cloudformation-beginner01/
https://zenn.dev/soshimiyamoto/articles/3c624728438902

関連記事

CloudFormation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/02/10/231900
CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
CloudFormation ~ 開発環境 ~
https://dk521123.hatenablog.com/entry/2022/05/22/000000
CloudFormation ~ 組み込み関数 ~
https://dk521123.hatenablog.com/entry/2021/12/04/202519
CloudFormation ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/07/02/214543
CloudFormation ~ Mappings ~
https://dk521123.hatenablog.com/entry/2024/03/09/000428
CloudFormation ~ Parameters ~
https://dk521123.hatenablog.com/entry/2024/02/29/220042
CloudFormation ~ Outputs ~
https://dk521123.hatenablog.com/entry/2024/04/04/112146
CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313
CloudFormation ~ DeletionPolicy 属性 ~
https://dk521123.hatenablog.com/entry/2021/12/27/211328
CloudFormation ~ 認証情報の扱い ~
https://dk521123.hatenablog.com/entry/2021/12/28/224501
CloudFormation ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/02/23/003010
CloudFormation ~ VPC
https://dk521123.hatenablog.com/entry/2024/03/03/011149
CloudFormation ~ S3 ~
https://dk521123.hatenablog.com/entry/2022/05/25/220037
CloudFormation ~ EC2 ~
https://dk521123.hatenablog.com/entry/2024/02/11/010935
CloudFormation ~ KMS ~
https://dk521123.hatenablog.com/entry/2022/05/26/112627
CloudFormation ~ IAM ~
https://dk521123.hatenablog.com/entry/2022/05/27/100820
CloudFormation で Github/CodePipeline/CodeBuild を構築する
https://dk521123.hatenablog.com/entry/2021/12/26/155956
CloudFormation でのトラブル
https://dk521123.hatenablog.com/entry/2022/05/30/191507
CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050
AWS Service Catalog ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2022/06/12/225648
CodeBuild ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/21/221122
CodePipeline ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/23/231827
CodeDeploy ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/30/122803
Amazon ECR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/22/165711
AWS Lake Formation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/10/13/094041
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
機密データの管理 ~ パラメータストア / Secrets Manager ~
https://dk521123.hatenablog.com/entry/2020/01/31/231636
YAML (YAML Ain't Markup Language)
https://dk521123.hatenablog.com/entry/2019/10/13/000000