Slide 1

Slide 1 text

IaCジャーニーマップの紹介
 2023年12月15日
 クラスメソッド AWS事業本部 佐藤 雅樹
 1

Slide 2

Slide 2 text

resource “my_profile” “this” { name = “佐藤雅樹” company = “クラスメソッド株式会社” department = “ソリューションアーキテクト” Interest = [ “CI/CD”, “IaC” ] } 2 自己紹介 2

Slide 3

Slide 3 text

3 本セッションの対象聴講者、ゴール ● 対象者
 ○ IaCの導入を検討している方
 ○ IaCをすでに適用していて、課題に向き合っている方
 ● ゴール
 ○ 組織のIaC利用の成熟度を上げるために、必要なステップがわ かる


Slide 4

Slide 4 text

4 IaCジャーニーマップとは クラスメソッド作成の「IaCを導入させるためのステージ分けさ れた、ロードマップ」

Slide 5

Slide 5 text

5 ペルソナ ● Webシステムを運営している事業会社
 ○ システムはAWS上で稼働
 ● インフラチームは3名
 ○ IaCの経験者は無し、プログラミング経験も無し
 ● インフラの設定変更は手動で行なっている


Slide 6

Slide 6 text

6 課題 ● インフラ規模は拡大していて、以下のような課題がある
 ○ インフラ構築や変更のリードタイムが長い
 ○ 手動変更によって作業ミスが発生してしまった


Slide 7

Slide 7 text

7 IaCジャーニーマップ ここからスタート

Slide 8

Slide 8 text

8 Stage.2 IaC導入 ToDo ● ツール選定(IaCツール、VCS)
 ● 実行環境の整備(ローカル/リモート)
 ● 既存リソースのImport
 ● 各種フローの整備
 ● ツールのチーム内への普及
 ● ...etc
 
 ※太字部分を解説


Slide 9

Slide 9 text

9 Stage.2 IaC導入 ツール選定 ● IaCツール: Terraform
 ○ ツールの学習コストを抑えたい
 ○ AWS以外にも将来的に、別クラウドやSaaSも管理したい
 ● VCS: GitLab
 ○ アプリケーションチームがGitLabを使っていた


Slide 10

Slide 10 text

10 Stage.2 IaC導入 実行環境 ● ローカル
 ○ リモート環境用のサーバーを維持したくない
 ○ tfenvでTerraformバージョンを合わせる運用とする
 ○ ローカルにAWS認証情報が必要だが、一旦許容する


Slide 11

Slide 11 text

11 Stage.2 IaC導入 構成図

Slide 12

Slide 12 text

12 Stage.2 IaC導入 振り返り ✅ 解決できたこと
 ○ IaCコードを再利用することで、リードタイム短縮
 ○ コード化したことで、変更履歴がGitで確認できるように
 ○ レビューがしやすくなり、作業ミス減少・品質向上
 ❌ 課題
 ○ ローカルのAWS認証情報を使って、承認(レビュー)なしで、イン フラを変更できてしまう
 ○ コマンドの手動実行ミス
 


Slide 13

Slide 13 text

13 Stage.3 デプロイパイプライン ToDo ● デプロイパイプラインツールの選定
 ● デプロイフローの整備
 ● デプロイ方法の切り替え
 ● ...etc
 
 ※太字部分を解説
 
 
 


Slide 14

Slide 14 text

14 Stage.3 デプロイパイプライン ツール選定

Slide 15

Slide 15 text

15 Terraform Cloud

Slide 16

Slide 16 text

Pros - Terraformのデプロイに最適化されている - 少ない工数でデプロイパイプラインを構築可能 - ツール用のインフラの構築・運用が不要 - Stateファイルの管理機能等、その他機能も充実 - HashiCorp社のサポートを受けれる Cons - デフォルト設定では、VCS上でPlan等の実行結果が見れな い - その他の方法より料金が高い Terraform Cloud 16

Slide 17

Slide 17 text

17 CIツール(Github Actions, GitLab CI/CD)

Slide 18

Slide 18 text

18 Pros - アプリケーションのデプロイとツールを統一できる - ツール用のインフラの構築・運用が不要(SaaS製品の場合) Cons - パイプライン処理の作り込みが必要 - (Terraform CloudやAtlantisと比較して) - 環境の数が増えるとデプロイ設定用のファイルが増えて管 理が大変 CIツール(Github Actions, GitLab CI/CD)

Slide 19

Slide 19 text

19 Stage.3 デプロイパイプライン ツール選定
 ● Terraform Cloud
 ○ パイプラインの構築・維持コストを最小化したい
 ○ HashiCorp社のサポートを受けたい
 
 


Slide 20

Slide 20 text

20 Stage.3 デプロイパイプライン


Slide 21

Slide 21 text

21 Stage.3 デプロイパイプライン ✅ 解決できたこと
 ○ 手動コマンド実行によるミスを防止
 ○ ローカルのAWS認証情報を廃止、デプロイツール上で一元管 理
 


Slide 22

Slide 22 text

22 しばらく経ち IaC運用が軌道に乗ってきた

Slide 23

Slide 23 text

23 IaCの利用規模拡大 規模が大きくなり、以下の課題が発生
 ❌ 課題
 ○ コードレビューの負荷が高く、リリースサイクルが遅くなってい る
 ■ 以下のようなインフラコードのPR(MR)が上がってくる
 - 自社のガイドラインに違反している
 - セキュアな設定になっていない
 ○ 手動運用時より障害は減ったが、もっと減らしたい


Slide 24

Slide 24 text

Stage.4 スキャン・テスト・ビルド 24 ● 自動テストを導入する
 ○ 静的解析
 ○ プランテスト
 ○ ユニットテスト
 ○ 統合テスト
 ○ E2Eテスト
 ● ...etc
 
 ※太字部分を解説
 
 


Slide 25

Slide 25 text

25 静的解析 terraform validate tflint Snyk IaC 説明 Terraformの組み込 みコマンド リンターツール セキュリティスキャ ンツール チェック対象 文法 プロバイダー (AWS,GCP,Azure) の特定の制約やエ ラー 例) AMIやインスタ ンスタイプの検証 作成されるリソース のセキュリティ 例) S3バケットが暗 号化されてない Terraformコードを解析する(実際のコード実行は無し)
 
 
 


Slide 26

Slide 26 text

● TerraformのPlan結果を解析する
 ● 静的解析との比較
 ○ Pros
 - Planを実行するため、より踏み込んだ解析が可能
 ○ Cons
 - プロバイダ(AWS,Azure, Google Cloud)の認証情報が必要
 ● ポリシーの例
 ○ 「ManagedBy = terraform」タグがついていないリソースのデプ ロイ禁止
 ○ 金曜日にデプロイすることを禁止
 
 
 26 プランテスト

Slide 27

Slide 27 text

27 プランテスト Open Policy Agent (OPA) HashiCorp Sentinel Snyk IaC (内部でOPA利用) 対象 Terraform,Kubern etes,Envoy等 HashiCorp製品 (Terraform,Vault,N omad,Consul) Terraform,CloudF ormation,Kubernet es等 言語 Rego Sentinel Rego

Slide 28

Slide 28 text

選定したツール 28 ● 静的解析: terraform validate,tflint, Snyk IaC
 ○ 役割が異なるため、全て組み込む
 ● プランテスト: Snyk IaC,OPA
 ○ Terraform Cloudがサポートしているため組み込み易い
 ○ KubernetesやEnvoyにも対象を広げていきたい
 ○ Terraform Cloudでカスタムルールを使う場合、OPAの方が使 い回ししやすい
 
 
 


Slide 29

Slide 29 text

29 Stage.4 スキャン・テスト・ビルド


Slide 30

Slide 30 text

30 Stage.4 スキャン・テスト・ビルド ✅ 解決できたこと
 ○ レビュー負荷が軽減、リリースサイクル向上
 ○ 早期にミスを検出できるようになり、障害のリスク軽減


Slide 31

Slide 31 text

31 Stage.5 発展的なIaC活用 ● インフラセルフサービス化
 ○ No-Code Provisioning(Terraform Cloud)
 ● AWSアカウント払い出し&ベースライン設定
 ○ AFT、CfCT


Slide 32

Slide 32 text

32 まとめ IaC運用の成熟度向上に、IaCジャーニーマップを
 是非お役立てください


Slide 33

Slide 33 text

33 関連URL Terraform Cloud - https://developer.hashicorp.com/terraform/cloud-docs Snyk - https://snyk.io/jp/product/infrastructure-as-code-security/ Terraformのデプロイパイプラインに使用できるツールをまとめてみた - https://dev.classmethod.jp/articles/terraform-deploy-pipeline-tool/ Snyk IaCでTerraformコードのセキュリティ解析をしてみた - https://dev.classmethod.jp/articles/snyk-infrastructure-as-code-security-overvie w/ Terraform CloudのOPA Policy適用のチュートリアルをやってみた - https://dev.classmethod.jp/articles/terraform-cloud-opa-policy-tutorial/