【勉強会メモ】AKIBA.AWS ONLINE #03 -IaC を語りたい 編- に参加しました
こんにちは、IaC経験は下記で、ほぼ初心者のAshisanです。
- Ansible(運用で少々)
- AWS CloudFormation(構築で少々)
今日は、クラスメソッド株式会社のオンライン勉強会「AKIBAAWS ONLINE」に参加しました。
このイベントは3回目で過去3回とも全て参加していますが、特にアウトプットしていなかったのですが、特に今回は勉強中のIaCがテーマということで特別楽しみでした!
そんなこんなで今回からレポートを書こう!と思い立ち、早速記事(ほぼメモですが)にしました。
レポート
1. IaCで全てが上手くいくと思うなよ!失敗事例のご紹介
Speaker:mokoさん
初めに
- いきなりまとめ
- 「IaCは手段であり、目標である」
- 「何も考えないでIaCにすると後悔する」
- 「リソースを素手で触らない強い意志」
IaCとは?
- IaC= Infrastracture As Code
対象範囲
- AWS環境のコード化のみ触れる ※OSミドルについては対象外
IaCツールの比較
- Terraform
- CloudFormation
- いいところ:yml、jsonで書ける(簡単)
- 悪いところ:単純な繰り返しも書きづらい
- CDK
- 慣れた言語からCFnを実行できる
- その他
- AWS SAM
- Severless Flamework
あるある失敗
- メンバがIaC未経験の場合
- IaCは明示的にパラメータを入れなきゃいけない
- さくっとコンソールから作ることばっかやってるとできない
- CDKならいい感じに作れるが、暗黙で作られるリソースの把握が大事
- 学習コストの発生は時間が解決してくれる(1ヶ月もやればそのうち慣れる)
- IaCは明示的にパラメータを入れなきゃいけない
- IaCが目的
- IaCでやらなくてもいいのに、頑張ってIaCにしちゃう
- 構成管理不要なのに、無駄に頑張っちゃう
- 結果マネコンでやったほうが運用しやすかったりする
- とはいえIaCにするメリットはたくさんあるので、目標に設定するのはあり
- IaCでやらなくてもいいのに、頑張ってIaCにしちゃう
- 手動オペレーションしちゃう
- 一番あるある
- IaCで管理しているリソースをまねこんから変更しちゃった(まずい)
- 環境を見て差分うめはできるので、なんとかできる
- IaCでリソース管理してるけど、デプロイが手動
- 一番良くない!
- とある事故(あるある失敗例):手動オペレーションで破綻
- スタック(ファイル)分割ができる
- スタック間のパラメータ連携はOutputs(まねこんの出力)をみてやってる
- 画像参照、参照されていない順にデプロイする必要がある
- ダウンタイム無しで真ん中のインスタンスを入れ替えたい
- どうすんの??
- 手動オペレーションを含んだややこしい手順
- なぜこうなったか→依存関係がごちゃごちゃ
- CFnのスタックはライフサイクルごとに管理しろ
- EC2とALBは同じスタックでもいいが、規模が大きいとコード量がやばい
- Nested Stackも最近できるようになったが、、、
- 子スタックの更新差分まで見れるのは最近になってやっと
- 規模が大きい場合はTerraformを推奨
- 深澤さんのセッションで詳しくは解説
IaCのメリット、デメリット
メリット
デメリット
- コードに起こすのしんどい
- 設計きちんと考えなきゃいけない
- IaCでの運用投げ出しがち
mokoさん流IaCベストプラクティス
- IaCとの付き合い方を決める
- 構築だけIaC
- IaC使って運用する
- IaCもCI/CDする
- Gitを正しく使う
- レビューきちんとやろう
- CI/CD環境を整える
- Linterいれたり
- Mergeしたら自動デプロイさせたり
- 手動デプロイは甘え!!!オペミスの根本原因
- Terraform Cloudってのもあるよ
- Gitを正しく使う
- AWS環境は素手で触らない(超重要)
- スケーリングさせる(少し関係ない話)
- アプリのデプロイとIaCは別で考える
- アプリはアプリのCi/CDパイプラインで完結させる
- デプロイのためにIaCを触るのはしんどいから分離しよう
- インフラとアプリの境界線はしっかり引く
- アプリとセットで作れるツールの場合はセットで考えよう
- CDK/Copilit/SAM
- アプリはアプリのCi/CDパイプラインで完結させる
まとめ
- IaCはメリットがでかいからみんなつかおう
- ある程度注意すればOKだよ
- せっかくAWS使いならいい環境にしよう
- スケーリング、CI/CD
2.Former2でコード生成してGUIポチポチ卒業の第一歩を(仮)
Speaker:inomasoさん
想定視聴者
- 手作業環境構築につかれた人
- IaCに興味があるけど、、な人
- 構築済みなAWS環境を持ってる人
ゴール
- GUIポチポチ卒業
IaCとは
- インフラをコードで記述すること
- 最初はシステム管理の自動化だけが焦点、いまはプラットフォームまで拡大
formar2ってなに?
- ブラウザベースのサービス
- AWSの認証情報をつかって
- セットアップ方法
- IAMアクセスキー、シークレットキー入力がある!?
- 大丈夫なん?
- 絶対外部に送信しないから大丈夫だよ、だそう
- とはいえ、抵抗がある人へ
- ローカルのDockerでFormar2コンテナを起動できるよ
- IAMアクセスキー、シークレットキー入力がある!?
既存リソースのコード化
- EC2の場合
- ボタンポチポチでTerraformのコードが自動でできる
- CFnでも出力可能
自動生成コードの注意点
- 再利用のときは注意してね
- リソースID指定
- リソースIDがそのまま出るので、新規作成時に使いまわしするとエラーになる
- 「リソースの種類.任意のリソース名.id」で指定すればOK
- IAMポリシー
- IAMポリシーがテキストで出力される
- 共通のポリシーを使い回すときは管理が煩雑に
- 解決策:JSONでポリシードキュメントを書こう
まとめ
- Formar2は銀の弾丸じゃないよ
- まず小規模環境から、IaCを始めるきっかけに
- 検証環境をとりあえずコード化するのは便利
3. TerraformとCloudFormationどちらを採用すべき?
Speaker:深澤俊さん
- Terraform vs CFn
前提
- 納品物に指定ある?
- メンバでメンテできますか など
CloudFornationとは
Terraformとは
- Hashicorp製
- HCLで書ける
- ローカルPC上で実行
- キーの管理を考えないといけない
- EC2上でやる or スイッチロールでセキュアな認証ができる
違い
- 異なるリージョン、アカウントへのデプロイ
- CFn:StackSetsを使う
- Terra:異なるProviderを使う
- AWS内でのIaCならCFnはデプロイしやすい
- 異なるIaaSへのデプロイ
- Terraformしかできない
- 差分検出
- IaC管理してるが、つい手作業で修正しちゃうことはよくある →どう検出する?
- CFn:ドリフト検出
- AWSサービスでできるので楽
- Terra:Planコマンドを使って差分比較
- 作り込みが必要
- ロジック
- 排他制御
- バージョン管理
- うまく管理する必要あり
- 環境差異をなくす、最新への追従
- CFn:管理しなくていい
- Terra:Terraform自体とProviderのバージョン管理する必要あり
- 言語のバージョン管理に似ている
- うまく管理する必要あり
- 開発ツール
まとめ
全体まとめ
- IaCにもいろいろあるが時と場合によって使い分けよう
- IaCを使うには制約を受け入れる覚悟が必要
- 大変だがIaCはとてもいいもの
- 結論:みんな、IaCを使おう!
みんな、IaCやろうぜ #AKIBAAWS
— Ashisan (@oni_py) 2021年5月18日