Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
prismatixでのTerraform運用で活用しているツールの紹介
Search
NobuhiroNakayama
April 13, 2023
Technology
1
1.4k
prismatixでのTerraform運用で活用しているツールの紹介
NobuhiroNakayama
April 13, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
コロプラのオンボーディングを採用から語りたい
colopl
5
1.2k
2025年に挑戦したいこと
molmolken
0
160
AWSの生成AIサービス Amazon Bedrock入門!(2025年1月版)
minorun365
PRO
7
470
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
embedパッケージを深掘りする / Deep Dive into embed Package in Go
task4233
1
210
Git scrapingで始める継続的なデータ追跡 / Git Scraping
ohbarye
5
490
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!事例のご紹介+座学②
siyuanzh09
0
110
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
1
110
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
360
The future we create with our own MVV
matsukurou
0
2k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
Making Projects Easy
brettharned
116
6k
Navigating Team Friction
lara
183
15k
We Have a Design System, Now What?
morganepeng
51
7.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Optimizing for Happiness
mojombo
376
70k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Transcript
prismatixでのTerraform運用で 活用しているツールの紹介 2023/04/11 prismatix事業部 Nakayama Nobuhiro
自己紹介 • 中山 順博(なかやま のぶひろ) • prismatix事業部 SREチーム • 2017年10月にJoin
• 2022年3月にprismatix事業部へ異動
Agenda • prismatixについて • Atlantisによるterraform plan / applyの自動化 • tflint
/ Terraform-docs / Trivyによる改善
本日の資料等について • 資料(ブログ)は公開します • デモで利用するGitHubリポジトリも参照できるようにしています • https://github.com/nakayamanobuhiro/day-one-terraform-demo
prismatixとは • EC / CRM特化型プラットフォーム • 注⽂や決済といった各機能のまとまりをマイクロサービス化 • EC /
CRMに必要な各種機能をAPIとして提供 • ヘッドレスコマースのバックエンド側 • クラスメソッドのB2B自社サービス ECサイトCRM基盤構築|戦略的OMOを実現するAPIプラットフォーム https://prismatix.jp/
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
prismatixの(インフラにおける)特徴と課題 • AWSアカウントが多い • prismatixは「シングルテナント」でサービスを提供 • 顧客数×環境数(本番 / ステージング /
開発 / 他) • 現在、100以上のAWSアカウントを運用・管理 • 顧客毎に異なるバージョンを利用 / 必要な機能だけをマイクロサービスとして提供 • 構成のパターンが多い / アクセス数やその傾向も顧客毎に異なる • 複雑化したデプロイフロー • 2016年11月から事業スタート • 逐次拡張した事で複雑化 / やっていることに対して利用しているツールが多い AWSリソースの管理にTerraformを活用
Terraformとは? • クラウドインフラストラクチャを管理するためのオープンソースのイン フラストラクチャ自動化ツール • クラウドプロバイダ(AWS、Google Cloud、Microsoft Azureなど)を 含む、様々なプラットフォームに対応 •
インフラストラクチャをコードで記述し、そのコードをバージョン管理 することが可能
例:S3バケット provider "aws" { region = "ap-northeast-1" } resource "aws_s3_bucket"
"example" { bucket = "example-bucket" acl = "private" tags = { Terraform = "true" Environment = "dev" } }
Atlantisとは? • Terraformによるインフラストラクチャのプロビジョニングを自動化する ためのオープンソースのツール • Pull Requestをトリガーとして、Terraformのコードの変更を検知し、 terraform init /
fmt / plan / applyを自動化 • GitHub、GitLab、Bitbucketといったバージョン管理システムと連携 • Dockerイメージとして提供され、簡単なインストールと設定を行えばす ぐに利用することが可能 • AWS上にAtlantisの環境を構築するためのTerraformモジュールもある
Atlantisの利用イメージ(1)
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
Atlantisの利用イメージ(3)
Atlantisのいいところ • PRを通したレビュー・承認により、誤った内容をapplyするリスクを低減 • PR上でのコミュニケーションを後で参照しやすい • Slackでの過去のやりとりを探すのはめんどくさい • ローカルでテスト(terraform plan)する必要がない
Demo(1) • GitHubに対してPull requestを作成 • terraform planの自動実行 • コメントによるterraform apply
• Approveは省略 ※Atlantisのサーバーは公式のTerraformモジュールで構築済&GitHubのリポジトリに対するWebhookの設定は実施済み
導入中のツール • 現在、GitHub Actionsで以下のツールを導入中 • tflint • tfsec Trivy •
terraform-docs
tflint • Terraformのコードを静的解析して、問題を検出するためのツール • 例えば、非推奨の記述、未使用の変数の検出、など • Terraformのベストプラクティスに基づいた検証ルールを提供 • プラグインによる拡張も可能 •
https://github.com/terraform-linters/tflint-ruleset-aws • CI/CDツールとの連携が可能
tfsec • Terraformのコードを静的解析して、セキュリティ上の問題を検出するた めのツール • 例えば、AWSリソースのパブリックアクセスの有効化、暗号化の不足、セキュリテ ィグループの設定の不備など • 多くのクラウドプロバイダーに対応 •
AWS、GCP、Azureなど • CI/CDツールとの連携が可能
tfsecからTrivyへの移行が推奨されてた • tfsec is joining the Trivy family • https://github.com/aquasecurity/tfsec/discussions/1994
• tfsec自体も当面はサポートされるっぽい?
Trivy • コンテナ環境(Dockerイメージ、Kubernetesオブジェクト)で使用され るパッケージや依存関係の脆弱性をスキャンするツール • 脆弱性スキャンだけでなく、ミス検知やセキュリティベストプラクティスのチェッ クも実行可能 • Terraformにも対応 •
スキャン結果を複数のフォーマット(JSON、HTMLなど)で出力可能 • シェルスクリプトやAPIを介して使用することができ、CI/CDツールと統 合しやすい
terraform-docs • Terraformのコードのドキュメンテーションを自動生成するためのツール • 各リソースの説明、変数、出力などをドキュメント化することが可能 • 複数の出力形式をサポート • Markdown、JSON、YAML、HCLなど •
CI/CDツールとの連携が可能
Demo(2) • GitHub actionsでPush時にこれらのツールを自動実行 • tflintで未使用の変数定義と非推奨の記述を検出 • tfsecでセキュリティリスクを検出 • terraform-docsでモジュールのリソース・変数・出力をドキュメント化
まとめ • prismatixでは100以上のAWSアカウントを管理 • 現時点では部分的にTerraformとatlantisを活用して構成管理・デプロイ を効率化 • 全面的なTerraformでの管理に移行しつつ、より効率的な運用を模索中 ダレカタスケテー
We are hiring! • クラウドインフラエンジニア リーダー候補 (自社サービスECプラットフォームの運用・改善) • クラウドインフラエンジニア (自社サービスECプラットフォームの運用・改善)
詳しくはWebで! https://careers.classmethod.jp/requirements/
参考情報 • 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
参考情報 • 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
参考情報 • 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
参考情報 • 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