AWS CloudFormation Master Class を受けてみた②「 CFnを利用したS3環境の構築 」

##はじめに
前回、 Udemy で Stephane Maarek 氏 が提供している「 [AWS CloudFormation Master Class](https://www.udemy.com/aws-cloudformation-master-class/) 」というコースについてまとめた記事を投稿しました。
今回の記事はその続きとなります。
AWS CloudFormation Master Class に関する前回の記事については、[こちらから](https://qiita.com/Yoshiyuki03/items/ad21f72dbfb9c9eb32fa)。


##CloudFormation First Hands-On

###YAML

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/f2a35337-6105-8760-3477-1ee7d468c12e.png)
CloudFormation では、JSON と　YAML の2つの言語を利用できますが、本コースでは JSON ではなく、YAML を利用していきます。

- YAML を使用する主な理由
 - key バリュー
 - オブジェクトのネスト
 - Arrays のサポート
 - マルチライン
 - コメントを含む事が可能 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/2798bc11-35c6-aed4-d1ab-2c776cb14f5f.png)
ちなみに、 JSON をYAML に変更する際はこちらのサイトがおススメだそうです。
検索すれば、結構出てきます。


###Creating an S3 bucket
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/e3d2eaaf-629c-c201-f08f-ea998671bd4f.png)
今回は、CloudFormation を使用して S3 バケットを作成します。

- S3 の簡単な説明
 - S3 自体の作成は無料
 - S3 はグローバルサービスであり、ファイルのストレージが可能
 - 複数のウェブサイトの提供などが可能

CloudFormation を使って S3 などの AWS サービスを作成する際は、 AWS 公式が書き方を提供しているのでそちらを参照すると便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/71d018a4-f47c-0c7d-d8b4-97608a319035.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/edd54d4e-f3f5-2eb1-2648-8e820a1d33c7.png)
YAML で S3 を作成する際の書き方はこちらになります。

それでは、S3 を作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/2d833cec-f665-1852-1ed1-04e4a1290023.png)
テンプレートの選択で、ダウンロードしたコードより、
「1-creating-s3-bucket.yaml」YAML ファイルを選択して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/3a435691-ed4b-6dfa-45c4-eee2101a788e.png)
無事に作成が完了すると、CloudFormation に作成したスタックが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/902d801d-8d70-af97-77a0-6dd1cb13c3a5.png)
S3 のサービス画面でも、バケットが作成されたのが確認できます。


###Updating an S3 bucket
次に、作成した S3 をアップデートさせます。
具体的には、アクセスコントロールを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/30e505c2-7529-7612-835d-52b6490d4a94.png)
こちらは、最初に S3 を作成した際のコードです。
このコードに以下の記述をすることで、アクセスコントロールの設定を追加できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/9c150dcb-6d5b-d67d-38af-60986b5e166b.png)

※上記のコードを追加したものが、「2-adding-access-control.yaml」YAML ファイルです。

それでは、アップデートを行いましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/154e9ad4-af55-c4c1-5a3a-e08044b3f805.png)
作成したスタックを選択した状態で、「アクション」→「スタックの更新」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/157dc5fe-4b09-9f9d-c513-2aefad38023b.png)
テンプレートの選択で、「2-adding-access-control.yaml」YAML ファイルを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/ceaa8cdf-80a9-f91d-4201-12659900acce.png)
作成前に、テンプレートの変更による変更内容の確認が表示されます。
内容を確認したら、「 Update 」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/7fba2aa5-2b3a-ee50-ece1-b0c78cabb768.png)
アップデートされた S3 の内容を確認すると、パブリックアクセスの設定がされていることが確認できます。
これでアクセスコントロールの設定は完了です。

###Chainging an S3 bucket name
それでは、テンプレートを変更してバケット名の変更も行ってみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/c2af1dde-51ec-a772-8b90-4f7c0b11e158.png)
「スタックの更新」から、「3-chainging-name.yaml」YAML ファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/6437aa19-ae7c-7510-e2a4-d86dbc851c07.png)
ちなみに、今回のファイルの中身はこの様になっております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/f9bb9392-1f03-3762-7954-c803b01e7f82.png)
作成前の確認画面の内容で注意して頂きたいのは、今回の構築では既存の S3 バケットは削除され、新たに作成される、ということです。
そのため、既存の S3 に重要な情報を残している場合は逃しておく必要があります。


###Deleting an S3 Bucket
それでは、EC2 の時と同じ様に S3 についても削除しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/8d35a592-8196-9d8a-1c73-c68543aa3a5e.png)
手順も EC2 の時と同じです。「スタックの削除」を選択し、削除を実行することで完了します。
そのスタックを使用して作成したもの全てが削除されるので、スタックの削除を実行する際は、くれぐれも注意してください。

##おわりに
CloudFormation を使った S3 バケットの作成等についての紹介は以上となります。
前回、今回と CloudFormation を使った AWS サービスの構築といった基本的なことを紹介させて頂きました。
本コースの紹介はまだまだ続きますので、よろしくお願いします。