Slide 1

Slide 1 text

〜TerraformerがAWS CloudFormationで環境作ってみた〜 
 ITインフラのコード化(IaC)


Slide 2

Slide 2 text

自己紹介
 名前:檜山 準(ひやま じゅん) 
 
 所属:IRET
 
 
 お仕事:インフラエンジニア 
     -分析基盤の構築/保守/運用 
     -データチェックサーバの構築  
   
 
 出身:栃木県


Slide 3

Slide 3 text

外部でいろいろ活動してます😏
 8/27 CloudFormationの本をZennで出す 
 
 9/26 JAWS-UG東京 ランチタイムLT 
 
 10/26 めぐろLT(ラクスル) 
 
 10/27 IRETスプラトゥーン大会 予選突破 
 
 11/3 KDH 登壇 ★いまここ 
 
 11/12 技術書典 出店 
 
 11/22 Cloud Security Day 2023 LT 
 
 12/22 IRETスマブラ大会 決勝出場予定 
 
 未定 CICDのZenn本 
 未定 JAWS-UG朝会 LT 
 もろもろ「hiyanger」で活動してます! 
 いろいろやりたいのでなんでもお声がけください! 


Slide 4

Slide 4 text

〜レベル1〜 IaC(infrastructure as code)とは 
 
 〜レベル2〜 ① CloudFormtionで環境構築するにあたって必要な事前知識 
        ② TerraformとCloudFormationの比較 
 
 〜レベル3〜 CloudFormationで環境構築して困ったことと、その対処方法 
 今日お話しすること(幅広くお話しします!)


Slide 5

Slide 5 text

〜レベル1〜 IaC(infrastructure as code)とは 
 
 〜レベル2〜 ① CloudFormtionで環境構築するにあたって必要な事前知識 
        ② TerraformとCloudFormationの比較 
 
 〜レベル3〜 CloudFormationで環境構築して困ったことと、その対処方法 
 今日お話しすること(幅広くお話しします!)


Slide 6

Slide 6 text

6 IaCの前にそもそもインフラ(infrastructure)とは?


Slide 7

Slide 7 text

インフラ(infrastructure)とは
 ここが
 ITインフラだよ
 スマホなどをはじめとした 
 アプリケーションなどで使われる 受け皿てきな存在です。 


Slide 8

Slide 8 text

IaCとは
 インフラはAWSでは200以上ある様々なサービス画面からポチポチと構築します。 
 これらをコード化することを Iac(infrastructure as code) と呼びます。


Slide 9

Slide 9 text

IaCのメリット
 構築における正義である、 スピードと精度の両方を爆上げできます。 
 まだコード化されてないインフラは、是非IaCを推進していきましょう! 
 再利用できる
 
 コードで書かれているので、同じコードをデプ ロイすれば同じ環境をすぐに構築できます。 
 
 変更管理できる
 
 コードを変更管理(Git)すれば、過去 の変更履歴を簡単に辿れます。 
 設定値を確認しやすい 
 
 このサービスの設定値はどうだっけと いうとき、コードをみればすぐに確認 できます。そのため、設計書を起こす 必要もないです。


Slide 10

Slide 10 text

IaCの種類
 クラウドベンダーに依存しない 
 プログラミング言語に近い 


Slide 11

Slide 11 text

〜レベル1〜 IaC(infrastructure as code)とは 
 
 〜レベル2〜 ① CloudFormtionで環境構築するにあたって必要な事前知識 
        ② TerraformとCloudFormationの比較 
 
 〜レベル3〜 CloudFormationで環境構築して困ったことと、その対処方法 
 今日お話しすること(幅広くお話しします!)


Slide 12

Slide 12 text

12 仕事でTerraform使ったけど、CloudFormationも使ってみたい!
 
 (みなさんどっち派ですか?それともCDK派?) 


Slide 13

Slide 13 text

個人的に環境作ってみた


Slide 14

Slide 14 text

事前に勉強したこと(これだけは学んでおけ!)
 事前にいくつか学習しておくことで効率よく構築を進められます。 
 関数
 
 テンプレートをできるだけシンプルにするた めに必須です。(Ref、Sub、GetAttくらいで OK)
 
 CLI
 
 スタックをさくっと流すのに必須です。 
 クロススタック/ネスト 
 
 必須ではないけど、スタックをある程 度分割するために必要です。 
 
 (スタックを分割するとリソースの修正 がしやすい。なお、やりすぎは逆に煩 雑になるので注意) 


Slide 15

Slide 15 text

AWSにおける CloudFormatin と Terraform の使い分けイメージ
 
 
 CloudFormation 確実性を重視
 さくっとIaCを使いたい、出来る限り安全性を担保したいなど 
 
 
 
 Terraform スピード感を重視
 プロジェクトの規模が大きい、環境が割と自由など 


Slide 16

Slide 16 text

16 …ッ もっと細かくメリットを明らかにするんや!


Slide 17

Slide 17 text

AWS CloudFormationのメリット
 
 
 GUIが存在する
 
 これは初級者にとって大きなメリットです。どう動かすかと、どうなったが一目瞭然 です。デプロイの流れも非常に追いやすいです。
 
 
 スタック(デプロイの単位)失敗時にリソースが綺麗にロールバック される
 
 CloudFormationではとにかくスタックが失敗すれば、スタック実行前の状態に戻し てくれます。
 
 
 利用権限が柔軟 
 
 AWSのサービスなので、スタック削除のできるできないの権限を自由に与えること ができます。
 
 
 ドキュメントが豊富 
 
 権限同様、AWSのサービスなのでやはり情報が豊富です。
 実際にCloudFormationを使ってる画面 


Slide 18

Slide 18 text

Terraformのメリット
 
 
 コードを記述するファイルの分割がしやすい 
 
 リソースが膨大になれば、ファイルを分割する必要がでてきます。 ファイルを分割してしまうとデプロイが分かれるので、その依存関 係を保つ必要がありますが、Terraformではそれが容易に可能で す。
 
 
 デプロイ(apply)失敗してもそのまま次のデプロイができる 
 
 直前の失敗したdeployの後処理が不要で、次のデプロイが継続し て可能です。そのため構築がスムーズに可能です。 
 
 
 コードが書きやすい 
 
 関数が豊富なので、結果コードが書きやすい(短くできる)です。 


Slide 19

Slide 19 text

〜レベル1〜 IaC(infrastructure as code)とは 
 
 〜レベル2〜 ① CloudFormtionで環境構築するにあたって必要な事前知識 
       ② TerraformとCloudFormationの比較 
 
 〜レベル3〜 CloudFormationで環境構築して困ったことと、その対処方法 
 今日お話しすること(幅広くお話しします!)


Slide 20

Slide 20 text

20 いよいよ最後のパートです。
 ちょっとエンジニアよりのお話になります。
 
 (CloudFormationでカスタムリソース使ったことある人いますか?) 
 


Slide 21

Slide 21 text

構築時に困ったこと
 スタックがごく稀にバグる 
 
 タイミングの問題なのでリトライすればOKです。 
 
 
 
 スタックの結果が返ってこない 
 
 1時間待ちぼうけ。テンプレートを確実に直しきってから流し直しま しょう。
 
 
 
 S3にオブジェクトがあるとスタックを消せない 
 
 カスタムリソースでLambda作って対処しました。 
 ログを出力するバケットなどはデータがたまると料金が高額になる。 自前の環境で作る人は、悲しいけど節約のために都度リソースを消 すということをしないといけないのである。 


Slide 22

Slide 22 text

構築時に困ったこと
 スタックがごく稀にバグる 
 
 タイミングの問題なのでリトライすればOKです。 
 
 
 
 スタックの結果が返ってこない 
 
 1時間待ちぼうけ。テンプレートを確実に直しきってから流し直しま しょう。
 
 
 
 S3にオブジェクトがあるとスタックを消せない 
 
 カスタムリソースでLambda作って対処しました。 


Slide 23

Slide 23 text

S3にオブジェクトがあるとスタックが消せない事象
 ①作成
 ③削除
 ②データを追加 
 ×
 削除
 できないよー


Slide 24

Slide 24 text

S3にオブジェクトがあるとスタックが消せない事象 の対処
 ①作成
 ③削除
 ②データを追加 
 コードに
 カスタムリソースを
 追加する


Slide 25

Slide 25 text

カスタムリソースとは
 通常のリソースタイプではできない処理に 機能を追加して 処理させる方法です。
 
 今回の例だと、通常S3削除時にはオブジェクトを削除する という動作はできませんが、このカスタムリソースを使用す ることでオブジェクトを削除するという動作を追加すること ができます。


Slide 26

Slide 26 text

どんな感じでテンプレートに追加すればよい? Lambda側
 S3削除用のlambdaをデプロイします。 
 
 Outputsでは、S3の作成が記述されたどこのyamlでも使 えるようにエクスポート(クロススタック) させてます。


Slide 27

Slide 27 text

どんな感じでテンプレートに追加すればよい? S3側
 S3を作成してるコードの Resourcesにカスタムリソース使 うよ のコードを追加してあげます。 


Slide 28

Slide 28 text

カスタムリソース作成時の注意点
 前述でスタックの結果が 1時間帰ってこない というお話をしました が、カスタムリソースはLambdaの記述を誤るとこの事象に該当す るようです。
 その間止めることも削除することもできず待つしかないので、でき るだけコードは詰めてからスタックを流しましょう。 


Slide 29

Slide 29 text

IaC化をどんどん推奨して、よりインフラのレベルをあげていきましょう! 
 
 いまはCICDやってるので、今後はその方面でアウトプットしていきます! 
 Thanks!!