はじめてのcloudformation

## そもそもcloudformationとは？

AWS cloudformation はAWSの環境構築を自動化できるサービスです。
YAMLファイルを書いてデプロイすることで、環境を構築することが出来ます。

今回は、cloudformationやりたいけど、何をどうすればいいかわからない人のために
とりあえずに一歩を書いてみました。

## やってみる

### 今回作成する環境

`Sample-Vpc` という VPC1つと
`Sample-Vpc1-Subnet1` というsubnetを1つ作成します

![cloudformationUntitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/801cb602-6085-c9a9-f748-cb181db17121.png)


### YAMLファイルの作成

まず、 `Create-Network.yml` という名前でファイルを作成します。

```yaml:Create-Network.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create Network"
Resources:

# ------------------------------------------------------------#
#  VPC
# ------------------------------------------------------------#
  SampleVPC:
    Type: "AWS::EC2::VPC"
    Properties:
      CidrBlock: 10.1.0.0/16
      Tags:
        - Key: Name
          Value: Sample-Vpc
# ------------------------------------------------------------#
#  Subnet
# ------------------------------------------------------------#
  SampleSubnet01:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref SampleVPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: 10.1.1.0/24
      Tags:
        - Key: Name
          Value: Sample-Vpc1-Subnet01
```

### cloudformationの実施・確認

- AWSへログイン

AWSへログインして、cloudformationに移動します
`スタックの作成` で作成していきます

![スタックの作成CloudFormation - スタック - Google Chrome 2021-01-22 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/6eb4cc87-191e-91d2-ef90-9b084c9c5b52.png)


- cloudformationの設定・実施

`テンプレートの準備完了` から `テンプレートファイルのアップロード` で、先程作成した Create-Network.yml ファイルをアップロードします。
次へ進みます。

![スタックの作成準備CloudFormation - スタック - Google Chrome 2021-01-22 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/8f007b4f-b087-dad5-2cd4-67f84442b896.png)

スタックの名前を記載します。
ここでは `Create-Network` とします。

![スタックの詳細CloudFormation - スタック - Google Chrome 2021-01-22 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/09acaea2-c1d6-f59d-56bf-851c4757d277.png)

スタックオプションなど設定できますが、一旦最初はしなくてよいかと思います。
アクセス許可だったり、タグを付けて費用の管理をしやすくしたり出来ます。

![CloudFormation - スタック - Google Chrome 2021-01-22 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/3988d310-c633-690f-8760-02a634d180df.png)

最終確認です。
一番下まで行って特に問題なければ スタックの作成を行います。

![最終確認CloudFormation - スタック - Google Chrome 2021-01-22 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/61e4d5a2-0e7f-0f58-a4cd-87ba767daa00.png)

作成を行うと、このような画面になります。
`イベント` のタブを開くと今なんの処理をしているか確認することが出来ます。

確認CloudFormation - スタック Create-Network - Google Chro.png


- cloudformationで確認されたリソースの確認

まずはVPCを確認します。
yamlファイルの以下の箇所がこのVPCの設定になっております。

```yaml
  SampleVPC:
    Type: "AWS::EC2::VPC"
    Properties:
      CidrBlock: 10.1.0.0/16
      Tags:
        - Key: Name
          Value: Sample-Vpc
```


![VPCお使いの VPC _ VPC Management Console - Google Chrome .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/d2610829-faf9-5675-a471-9f7f671b4ca7.png)


次はsubmet。
名前も指定されているものになっています。
yamlファイルでは以下の記載を行いました。

```yaml
  SampleSubnet01:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref SampleVPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: 10.1.1.0/24
      Tags:
        - Key: Name
          Value: Sample-Vpc1-Subnet01
```


![subnetVPC Management Console - Google Chrome 2021-01-22 .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/b2018ee3-54f1-cb1b-0399-6c1e20e9d3e4.png)


### cloudformationの削除・確認

作成したVPCやsubnetを削除したい場合は、cloudformationのスタックの削除を行います。
※途中でVPCやsubnetの変更を手動で行うと削除や更新ができなくなるので、cloudformationで変更を行いましょう

- 削除方法

削除したいスタックに移動し、`削除` を行います。
確認が出るのでそのまま進めます。

![削除CloudFormation - スタック Create-Network - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/3461dfea-8af7-c36b-77a9-dae0837d89e8.png)


削除を進めるとイベントにDelete が走り、削除が行われます。

![deleteCloudFormation - スタック Create-Network - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/8f278ea1-d1ac-f952-2da7-b88d8f6fb20e.png)


すべて削除が行われたら、スタックがなくなりイベントにはDELETE_COMPLETEと出力されます

![でぇてCloudFormation - スタック Create-Network - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/167cce01-f3c5-0a74-42f6-5bcca8f667a7.png)



- 削除したリソースの確認

まずはVPC。
`Sample-Vpc` はもう削除されてありません。

![VPCこっちお使いの VPC _ VPC Management Console - Google Chrome .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/b85c01c8-70dc-dc57-5371-6bbdecccc86c.png)

お次はsubnet。
こちらも `Sample-Vpc1-Subnet01` は削除されてないです。

![VPC消えたVPC Management Console - Google Chrome 2021-01-22 .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/7227a856-d954-bf24-78ee-1404422d5e16.png)

こちらで、はじめてのcloudformationでの構築・削除は終わります。

## 勉強後イメージ

よくわからんけど、とりあえず回してみることはこれでできるかと。
後は他の人のコードとか、出来たもの見ながらいろいろ作っていきます。


## 参考

- [CloudFormation超入門](https://dev.classmethod.jp/articles/chonyumon-cloudformation/)