初心者向けAWS CloudFormationハンズオン！ Web システムを構築する①

こんにちは。
AWS公式のハンズオン資料に沿って、AWS CloudFormationを使ったハンズオンをしていきます。


## ハンズオン内容
本記事は下記ページを参考にハンズオンを進めていきます。
[AWS Hands-on for Beginners - AWS環境のコード管理 AWS CloudFormationでWebシステムを構築する](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-cfn-2022-reg-event.html?trk=aws_introduction_page)



## こんな方におすすめ
・AWS における IaC (Infrastructure as Code) に興味がある方
・AWS CloudFormation をハンズオンで試してみたい方

## ざっくり今回やること
１．事前準備→開発環境（SageMaker Studio コードエディタ）の構築
２．AWS CloudFormationテンプレートの実行
３．スタックのリソースを編集

<br />

## １．事前準備（SageMaker Studio コードエディタの構築）
**参考ブログ**
https://qiita.com/moritalous/items/656793cd97e1e967f045

AWS公式ハンズオン動画では、Cloud9を使用しています。
しかし、使えない方もいると思うので、今回は上記サイトを参考に、
SageMaker Studio コードエディタの開発環境を構築しました。
ここでさっそくSageMaker Studio Code Editorを構築するCloudFormationテンプレートを使わせていただきます。
本題ではテンプレートの中身に触れており、編集もするのでご容赦いただけると嬉しいです。
（CloudFormationを２回も使えてラッキーですね。）
作業はほんの数クリックで済んで、とっても楽！ありがたいです。
<br />

### 指定したパラメータ３点
自身のご都合に合わせてください。設定しなくても問題ありません。
１．スタック名に名前追記
```名前-日付-CodeEditorStack```と指定しました。

２．falseに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/b0e1e7ec-cc5d-4161-863f-0ec52e8e5464.png)

３．IAMロール名選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/4634ea55-822b-49b7-b10b-799935f244e4.png)
<br />
スタックができるまでの待ち時間で、次のステップ
２．AWS CloudFormationテンプレートの実行（VPCの作成）
に進んでも大丈夫です。
<br />
### SageMaker Studio コードエディタ環境出来上がり！
ハンズオン動画を見ながらVPCのCloudFormationスタックを作成している間に、
SageMaker Studio コードエディタのスタックが出来上がっていました。
参考ブログ通りに環境を立ち上げることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/00390498-04de-4a08-a878-92365ae285b9.png)

<br />
<br />

## ２．AWS CloudFormationテンプレートの実行（VPCの作成）
あらかじめ用意されているテンプレートファイル（Zipファイル）をアップロードし、スタックを作成します。
10分ほどでリソース作成が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/ae5ec99f-560e-4fef-bc1b-c5d30f0fbccb.png)

<br />
<br />

## ３．スタックのリソースを編集

### SageMaker Studio コードエディタで、ローカルファイルのアップロード方法
1. 左の三本線 &gt; File &gt; Open file...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/c686c7d3-d3f9-45e3-ad3d-0fe2ad865529.png)

2. Show Localを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/116a2fd4-847c-4b1f-b45c-f174bf760161.png)

3. ローカルのエクスプローラーが表示されるので、01_vpc.ymlファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/3d7b5cc2-877a-4a85-847f-26ec3c29afb4.png)



SageMaker Studio コードエディタでテンプレートを編集します。
具体的には、サブネット名を変更していきます。

旧）PublicSubnet1
新）PublicSubnet1-update
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/60078b1f-7c7b-4311-b24a-320e784a28df.png)

<br />


#### 寄り道話：論理IDの便利さ

矢印で示した箇所、
本来なら**VPC ID(vpc-xxxxxxxxxxxxxxxxx)** のような意味不明な文字列ですが、
AWS CloudFormationでは論理IDを記述できるため、どんなリソースなのかイメージがつきやすいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/e735a10b-a50f-49ef-acb3-50b30d4ee528.png)

<br />
<br />

## ３．AWS CLIを利用したスタックの更新

ハンズオン動画の通り、
SageMaker Studio コードエディタのターミナルで、AWS CLIでスタックを更新しました。

１．01_vpc.ymlファイルをアップロードしたディレクトリへ移動
```bash
cd ~/user-default-efs
```
２．テンプレートが正しく記述されているか検証
```bash
aws cloudformation validate-template --template-body file://01_vpc.yml
```

正しければ以下のような出力が返されます。
```
{
    "Parameters": [],
    "Description": "Hands-on template for VPC"
}
```
正しくなければエラーが出ます。


３．スタック更新処理
```bash
aws cloudformation update-stack --stack-name handson-vpc --template-body file://01_vpc.yml
``` 


  
スタック更新が成功し、コンソール上でサブネット名の変更が確認できました！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4084313/c66c6a50-356e-4977-8049-297bc00bd97a.png)



## まとめ
コンソールでポチポチすると、何度も画面を遷移したり、タブの移動があったりと面倒です。
CloudFormationではあっという間にインフラ環境を構築でき、編集も容易でした。
次回はVPCに引き続き、EC2、RDS、ELBも作成します。
ご覧いただけますと嬉しいです。