Slide 1

Slide 1 text

prismatixでのTerraform運用で 活用しているツールの紹介 2023/04/11 prismatix事業部 Nakayama Nobuhiro

Slide 2

Slide 2 text

自己紹介 • 中山 順博(なかやま のぶひろ) • prismatix事業部 SREチーム • 2017年10月にJoin • 2022年3月にprismatix事業部へ異動

Slide 3

Slide 3 text

Agenda • prismatixについて • Atlantisによるterraform plan / applyの自動化 • tflint / Terraform-docs / Trivyによる改善

Slide 4

Slide 4 text

本日の資料等について • 資料(ブログ)は公開します • デモで利用するGitHubリポジトリも参照できるようにしています • https://github.com/nakayamanobuhiro/day-one-terraform-demo

Slide 5

Slide 5 text

prismatixとは • EC / CRM特化型プラットフォーム • 注⽂や決済といった各機能のまとまりをマイクロサービス化 • EC / CRMに必要な各種機能をAPIとして提供 • ヘッドレスコマースのバックエンド側 • クラスメソッドのB2B自社サービス ECサイトCRM基盤構築|戦略的OMOを実現するAPIプラットフォーム https://prismatix.jp/

Slide 6

Slide 6 text

prismatixの技術スタック • Development • Java, Spring Boot, docker, Elasticsearch (on EC2), GitHub, CircleCI, IntelliJ IDEA • Infrastructure • AWS • ECS on Fargate, RDS (Aurora for MySQL), DynamoDB, Elasticache (Redis), Kinesis Stream, SQS, SNS, CloudWatch • Monitoring • Datadog, Sentry, pingdom

Slide 7

Slide 7 text

prismatixの(インフラにおける)特徴と課題 • AWSアカウントが多い • prismatixは「シングルテナント」でサービスを提供 • 顧客数×環境数(本番 / ステージング / 開発 / 他) • 現在、100以上のAWSアカウントを運用・管理 • 顧客毎に異なるバージョンを利用 / 必要な機能だけをマイクロサービスとして提供 • 構成のパターンが多い / アクセス数やその傾向も顧客毎に異なる • 複雑化したデプロイフロー • 2016年11月から事業スタート • 逐次拡張した事で複雑化 / やっていることに対して利用しているツールが多い AWSリソースの管理にTerraformを活用

Slide 8

Slide 8 text

Terraformとは? • クラウドインフラストラクチャを管理するためのオープンソースのイン フラストラクチャ自動化ツール • クラウドプロバイダ(AWS、Google Cloud、Microsoft Azureなど)を 含む、様々なプラットフォームに対応 • インフラストラクチャをコードで記述し、そのコードをバージョン管理 することが可能

Slide 9

Slide 9 text

例:S3バケット provider "aws" { region = "ap-northeast-1" } resource "aws_s3_bucket" "example" { bucket = "example-bucket" acl = "private" tags = { Terraform = "true" Environment = "dev" } }

Slide 10

Slide 10 text

Atlantisとは? • Terraformによるインフラストラクチャのプロビジョニングを自動化する ためのオープンソースのツール • Pull Requestをトリガーとして、Terraformのコードの変更を検知し、 terraform init / fmt / plan / applyを自動化 • GitHub、GitLab、Bitbucketといったバージョン管理システムと連携 • Dockerイメージとして提供され、簡単なインストールと設定を行えばす ぐに利用することが可能 • AWS上にAtlantisの環境を構築するためのTerraformモジュールもある

Slide 11

Slide 11 text

Atlantisの利用イメージ(1)

Slide 12

Slide 12 text

Atlantisの利用イメージ(2) version: 3 automerge: true projects: - name: environment dir: environment terraform_version: v1.4.4 autoplan: when_modified: ["*.tf"] enabled: true apply_requirements: [mergeable, approved] workflow: default workflows: default: plan: steps: - run: terraform fmt -check=true -diff=true -write=false - init - plan apply: steps: - apply

Slide 13

Slide 13 text

Atlantisの利用イメージ(3)

Slide 14

Slide 14 text

Atlantisのいいところ • PRを通したレビュー・承認により、誤った内容をapplyするリスクを低減 • PR上でのコミュニケーションを後で参照しやすい • Slackでの過去のやりとりを探すのはめんどくさい • ローカルでテスト(terraform plan)する必要がない

Slide 15

Slide 15 text

Demo(1) • GitHubに対してPull requestを作成 • terraform planの自動実行 • コメントによるterraform apply • Approveは省略 ※Atlantisのサーバーは公式のTerraformモジュールで構築済&GitHubのリポジトリに対するWebhookの設定は実施済み

Slide 16

Slide 16 text

導入中のツール • 現在、GitHub Actionsで以下のツールを導入中 • tflint • tfsec Trivy • terraform-docs

Slide 17

Slide 17 text

tflint • Terraformのコードを静的解析して、問題を検出するためのツール • 例えば、非推奨の記述、未使用の変数の検出、など • Terraformのベストプラクティスに基づいた検証ルールを提供 • プラグインによる拡張も可能 • https://github.com/terraform-linters/tflint-ruleset-aws • CI/CDツールとの連携が可能

Slide 18

Slide 18 text

tfsec • Terraformのコードを静的解析して、セキュリティ上の問題を検出するた めのツール • 例えば、AWSリソースのパブリックアクセスの有効化、暗号化の不足、セキュリテ ィグループの設定の不備など • 多くのクラウドプロバイダーに対応 • AWS、GCP、Azureなど • CI/CDツールとの連携が可能

Slide 19

Slide 19 text

tfsecからTrivyへの移行が推奨されてた • tfsec is joining the Trivy family • https://github.com/aquasecurity/tfsec/discussions/1994 • tfsec自体も当面はサポートされるっぽい?

Slide 20

Slide 20 text

Trivy • コンテナ環境(Dockerイメージ、Kubernetesオブジェクト)で使用され るパッケージや依存関係の脆弱性をスキャンするツール • 脆弱性スキャンだけでなく、ミス検知やセキュリティベストプラクティスのチェッ クも実行可能 • Terraformにも対応 • スキャン結果を複数のフォーマット(JSON、HTMLなど)で出力可能 • シェルスクリプトやAPIを介して使用することができ、CI/CDツールと統 合しやすい

Slide 21

Slide 21 text

terraform-docs • Terraformのコードのドキュメンテーションを自動生成するためのツール • 各リソースの説明、変数、出力などをドキュメント化することが可能 • 複数の出力形式をサポート • Markdown、JSON、YAML、HCLなど • CI/CDツールとの連携が可能

Slide 22

Slide 22 text

Demo(2) • GitHub actionsでPush時にこれらのツールを自動実行 • tflintで未使用の変数定義と非推奨の記述を検出 • tfsecでセキュリティリスクを検出 • terraform-docsでモジュールのリソース・変数・出力をドキュメント化

Slide 23

Slide 23 text

まとめ • prismatixでは100以上のAWSアカウントを管理 • 現時点では部分的にTerraformとatlantisを活用して構成管理・デプロイ を効率化 • 全面的なTerraformでの管理に移行しつつ、より効率的な運用を模索中 ダレカタスケテー

Slide 24

Slide 24 text

We are hiring! • クラウドインフラエンジニア リーダー候補 (自社サービスECプラットフォームの運用・改善) • クラウドインフラエンジニア (自社サービスECプラットフォームの運用・改善) 詳しくはWebで! https://careers.classmethod.jp/requirements/

Slide 25

Slide 25 text

参考情報 • Atlantis Documentation • https://www.runatlantis.io/docs/ • AWS Terraform module which runs Atlantis on AWS Fargate • https://registry.terraform.io/modules/terraform-aws-modules/atlantis/aws/latest

Slide 26

Slide 26 text

参考情報 • terraform-linters/tflint • https://github.com/terraform-linters/tflint • terraform-linters/setup-tflint • https://github.com/terraform-linters/setup-tflint • terraform-linters/tflint-ruleset-terraform • https://github.com/terraform-linters/tflint-ruleset-terraform

Slide 27

Slide 27 text

参考情報 • aquasecurity/tfsec • https://github.com/aquasecurity/tfsec • tfsec is joining the Trivy family • https://github.com/aquasecurity/tfsec/discussions/1994 • aquasecurity/trivy • https://github.com/aquasecurity/trivy • aquasecurity/trivy-action • https://github.com/aquasecurity/trivy-action • Aqua Vulnerability Database • https://avd.aquasec.com/misconfig/aws

Slide 28

Slide 28 text

参考情報 • terraform-docs • https://terraform-docs.io/ • terraform-docs/terraform-docs • https://github.com/terraform-docs/terraform-docs/ • terraform-docs/gh-actions • https://github.com/terraform-docs/gh-actions