スタディサプリ Product Team Blog

株式会社リクルートが開発するスタディサプリのプロダクトチームのブログです

Terraform の検索結果:

スタディサプリ小中高の技術戦略について

…合、quipper/terraform リポジトリの label 上限に引っかかるためです - また、あまりサービス名が長いと書きづらく、発音しにくいため、略称を使われるなど、1 のように無理なく認知されることが難しくなります。また略称を使われることで Slack や GitHub 等でのググラビリティの低下も懸念されます - 略称は避けるべきですが、やむを得ずどうしても略称が必要ならば、公式に略称を提供して、その使用を徹底してください。 今後追加が予定されているもの 数年前…

CQRS なレコメンドシステムをGCP で構築した話

…、各コンポーネントはTerraform の定義をコピーしていくだけなので、そこまで見通しが悪くなることもありませんでした。 ただ、エラー時に各所に散らばったエラーを漁って、周辺時刻での状況を把握する作業はまだ複数のステップが必要な状況で、このあたりは改善の余地がありそうです。 メッセージング CQRS ではメッセージングは必須ではありませんが、コマンドの発行やイベントの更新を処理するためにメッセージングが使用されることもよくあります。 その場合には、メッセージのエラーや重複を…

スムーズな開発体験を支えるデータベースリストアの仕組み

…響範囲を抑えられる Terraform などでジョブの構成を管理し、Pull Request で変更できる 解決策 Step Functions の実現性検証 スタディサプリでは主に AWS を利用しているため、フルマネージドなワークフローエンジンである Step Functions に白羽の矢が立ちました。 Amazon Aurora のリストア処理は AWS API で完結するため、まずは Step Functions で Amazon Aurora のリストア処理を試み…

Terraform Modules を Monorepo で versioning して管理

…nsuke です。 Terraform Modules を Monorepo で versioning して管理するようにした話を紹介します。 先日紹介したとおり、弊プロダクトではインフラを Terraform の Monorepo で管理しており、 CI は GitHub Actions + tfaction で実行しています。 blog.studysapuri.jp 弊プロダクトの Terraform Modules の管理手法は、この 2.5 年の間に 2 回ほど変化が…

Renovate の大量の Pull Request を処理する技術

…nsuke です。 Terraform Monorepo に対する Renovate の大量の Pull Request を処理するための技術について紹介します。 背景 過去ブログで何度か紹介しているように、弊プロダクトでは Terraform の Monorepo を管理しています。 先日、 CI を AWS CodeBuild から GitHub Actions + tfaction に移行しました。 blog.studysapuri.jp working directo…

6社合同 SRE 勉強会で" SRE を実現するための組織マネジメント"という題で登壇します

…ce で行えるよう Terraform monorepo platform を進化させてきました。 Service の Monitoring、 Incident response も各サービスチームがオーナーシップを持って実施できており、SRE チームがいないとできないことはかなり減ってきたように思えます。 事業としては利用ユーザを獲得しながらも、パフォーマンスなどユーザー体験を損ねないためのパフォーマンスの維持・改善だけでなく、中学講座ベーシックコースをフルリニューアルした…

Terraform の CI を AWS CodeBuild から GitHub Actions + tfaction に移行しました

…nsuke です。 Terraform の CI を AWS CodeBuild (以下 CodeBuild) から GitHub Actions + tfaction に移行した話を紹介します。 これまでの Terraform Workflow (CodeBuild) 弊プロダクトの Terraform の CI に関しては過去の記事でも何度か紹介していますが、 元々 CodeBuild 上で CI を実行していました。 かつては CircleCI 上で実行していましたが、…

AWS SSO を導入してセキュリティと利便性を改善した話

…n Set などは Terraform で管理するようにしました。 ssosync による Google Workspace と AWS SSO の同期 SSO User, Group は ssosync という AWS 公式のツールを使って Google Worksapce を同期するようにしました。 ssosync を実行するために Google Cloud Project (以下 GCP) の Service Account を作ったりする手順に関しては ssosync…

GitHub Actions Self-hosted Runner と Gatling による負荷試験

… ノードグループ (Terraform) Gatling を実行するための GitHub Actions Runner (Kubernetes manifests) データベースなどの AWS リソース (Terraform) 本番に近いデータが必要な場合、個人情報をマスク済みのスナップショットを利用できます *1 試験対象のアプリケーション アプリケーションリポジトリに Pull Request を作成するとプレビュー環境がデプロイされます 専用のノードグループに配置される…

Poetry, Docker, Build, and Run

…使い分けています。 Terraform のリソースgoogle_cloudbuild_trigger のgithub.pull_request と github.push にあたる設定を使い分けることで、PR が出されたときとマージされたときを区別しています。 またcloudbuil.yaml のdeploy コマンドで指定する名前を ${_APP_NAME}-${_ENV}${_PR_NUMBER} として、「pull リクエスト トリガーに使用する GitHub 固有のデ…

HashiTalks Japan 2021 で弊プロダクトの Terraform Platform について登壇しました

…けのイベントです。 Terraform や Vault など、 HashiCorp の様々なプロダクトに関して自由に登壇し、ナレッジを共有するイベントです。 2021年9月30日にオンラインで開催されました。 資料や動画が下記で公開されているので、ぜひご覧ください。 https://events.hashicorp.com/hashitalksjapan HashiTalks: Japan 発表資料 - Speaker Slides - HashiCorp User Grou…

スタディサプリ/Quipper オンラインミートアップ#3で How to measure "Site Reliability Engineering" というタイトルで登壇しました

…を実行する仕組みを、Terraform module を利用してコードとして定義できるようなものなどを検討しています AWS の複数アカウント化、Organization 化、SSO 対応 組織やプロダクトが大きくなっていく中で、セキュリティの重要性は上がり続けています。 現状は本番環境とそれ以外が VPC では分離されているものの、AWS アカウントは単一のものとなってしまっています セキュリティのため、それぞれの環境に対してアクセスできる人だったり、アクセスする方法につい…

SRE チームをよりサステナブルにするために Vision/Mission/Values を作った話

… そうならないよう、Terraform によるセルフサービスのためのプラットフォームを提供しており、開発チームのメンバーはデータベースだけでなくキャッシュサーバやメッセージキューなど、あらゆるクラウドリソースを自分たちで設計し、調達することができるようになっています。 また、アプリケーションについても同様に Kubernetes を用いたセルフサービスのためのプラットフォームを提供しており、新しいアプリケーションの構築も、それらの継続的なデプロイも、SRE チームの手を借りる…

Terraform の CI に tfmigrate を導入した話

…nsuke です。 Terraform Monorepo の CI にtfmigrate を導入した話を紹介します。 なお、弊社の Terraform Monorepo に関しては過去の記事も参照してください。 Terraform リポジトリをマージして CI/CD を改善した話 - スタディサプリ Product Team Blog Pull Request の terraform plan の実行結果を S3 に保存して安全に apply - スタディサプリ Produc…

AWS IAM の管理を miam から Terraform に移行した話

…を miam から Terraform に移行した話を紹介します。 なお、 AWS や miam に限らず「Terraform で管理されていない大量のリソースを Terraform で管理する」ことを検討している方には参考になる内容かと思います。 背景 本ブログでも何度か紹介したとおり、弊社では AWS のリソースを Terraform で管理しています。 しかし、実は IAM に関しては miam という別のツールで主に管理されていました。 miam は AWS IAM …

Kubeflow Pipeline の魅力を最大限に引き出すにはやっぱりコンポーネント化スキルが必要

…のtrigger はTerraform で管理されています (一部抜粋) cloudbuild.yaml steps: # Build - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/${PROJECT_ID}/trainer:${SHORT_SHA}', '-t', 'gcr.io/${PROJECT_ID}/trainer:${_ENV}', '.'] dir: 'recommend…

AWS - GCP の ID 連携を使い、 AWS CodeBuild で Terraform を使って GCP を管理

…以下 GCP) を Terraform で管理するように CI/CD を整備した話を紹介します。 背景 何度か本ブログで紹介したように、弊社では Terraform を使い AWS を始めとする様々なリソースを管理しています。 quipper.hatenablog.com しかし、 GCP はあまりちゃんと管理できていないという課題がありました。 弊社のサービスはほぼすべて AWS 上で動いており、 IaC が既に整備されています。 一方で GCP も以前から使っていますが …

AWS IAM User の初期パスワード通知を自動化

…、 miam から Terraform への移行を検討する際にネックだったので、自動化することにしました。 仕組み IAM User が作成されたら CloudWatch Event の CreateUser Event によって Lambda Function を呼び、 Lambda で初期パスワードを DM するようにしました。 弊社では IAM User の名前は Slack User の Display Name と同じにするというルールがあるので、 Slack Us…

GitHub Actions Self-hosted Runner の導入と安定運用に向けた軌跡

…eBuild(主に Terraform など AWS リソースにアクセスする場合) Google Cloud Build(主に Google Cloud のリソースにアクセスする場合) Jenkins(定期実行や手動実行に特化したジョブ) このうち GitHub Actions は以下の点が優れていると感じています。 monorepo 構成の場合にマイクロサービスごとに独立して Workflow を定義できる 公開 Action のエコシステムが発達している Workflow…

Terraform リポジトリをマージして CI/CD を改善した話

…nsuke です。 Terraform のコードを管理する複数のリポジトリ (以下 Terraform リポジトリ) を一つにまとめて CI/CD の品質およびメンテナンス性を改善した話をします。 弊社のこれまでの CI/CD 改善の取り組み 弊社ではこれまで Terraform の CI/CD を日々改善してきました。 その幾つかは既にブログで紹介していますのでそちらをご参照ください。 Terraform の CI/CD を CodeBuild に移行した話 - スタディサ…

100 以上の Terraform 環境をいい感じに v0.14 に upgrade した方法

… 100 個以上の Terraform state がある Monorepo で Terraform を v0.14 に upgrade しつつ Terraform Provider の自動 update を実現した方法を紹介したいと思います。 Terraform v0.14 の新機能とかにはあまり触れず、 upgrade するために何をしたかという点にフォーカスします。 Terraform 公式のドキュメントも参照してください。 なお、弊社の Terraform の CI/…

Pull Request の terraform plan の実行結果を S3 に保存して安全に apply

…R) の CI の terraform plan (以下 plan) の実行結果(以下 plan file)を S3 に保存して、安全に terraform apply (以下 apply) 出来るようにしたとともに、 GitHub リポジトリの Require branches to be up to date before merging の設定を無効化することで Experience を向上した話を紹介します。 課題 Terraform の CI/CD を CodeBu…

ArgoCD と Renovate によるコンポーネントの継続的なデプロイ

…deBuild で Terraform を実行して AWS リソースを管理していることを踏まえると、以下の方法が考えられます。 新しい EKS クラスタの作成時に Terraform から初期化スクリプトを自動実行する 新しい EKS クラスタを初期化するための CodeBuild Project を用意し、初期化スクリプトを手動実行する Terraform 定義ファイルと Kubernetes マニフェストファイルはそれぞれ別のリポジトリで管理しているため、後者を選択しまし…

Renovate の Tips

…prove もする Terraform のリポジトリで安全に自動マージする 正規表現を使って update する depName を使って設定を簡略化する 更新対象のファイルごとに Pull Request を分割する PR が溜まらないように PR の数を制限する CI で設定をテストする 設定方法について renovatebot/config-help で質問してみる Reviewer を設定する https://docs.renovatebot.com/configur…

Terraform の CI/CD を CodeBuild に移行した話

…nsuke です。 Terraform の CI/CD を CircleCI から AWS CodeBuild に移行した話を紹介します。 背景 弊社では AWS のリソースを Terraform で管理しており、元々 CircleCI で CI/CD を実行していました。 リポジトリは monorepo になっており、様々なサービスのリソースが同じリポジトリで管理されています。 Terraform の State はサービス・環境ごとに分割されており、現在 70 個以上の …

Self-Hosted Cluster から EKS への移行と Platform の Production Readiness

…ernetes や Terraform など、SRE が密接に関わる OSS は Go 製のものが多いため、コードを読んだり、upstream にパッチを投げたり、Plugin を書いたりする際に Go が書けることは有益だからです。また、現在の SRE Team には Go が得意なメンバーが多いこともその理由の1つです。今回、自分自身も(簡単なツールではありますが)仕事で Go を書ける機会を持てて良かったと思います。 Managed Node Groups の制限事項 …

RDS のセルフサービス化のための自動化の工夫

…す。 その作成には Terraform を用いており、いくつか適当な引数を入れると Terraform のコードが自動生成される仕組みを用意しています。 これで盤石...と思った1年前の私ですが、この仕組みにはいくつか問題点がありました。本記事ではその問題点とそれを改善した話をします。 既存の仕組みの問題点 以下、大きく2つの問題点がありました。 開発環境用のデータベースが本番環境用のデータベースのスナップショットからリストアされることが考慮されていない 開発環境用のデータベ…

みんなでつくる Production Readiness

…reate RDS Terraform や script で AWS Aurora を作成するためのガイド Environment Variables Configmap あるいは Secret(aws-secret-manager) を用いて環境変数をアプリケーションに設定するためのガイド CPU / Memory allocation Kubernetes における resource requests / limits の設定ポリシー Design Doc Product…

SRE NEXT 2020 で「SLO Review」というタイトルで登壇しました #srenext

…anagement(Terraform)の委譲などをしてきており、SLI/SLO もその施策の一環です。 さて、そういう流れで SLI/SLO を定義し、レビューすることを決めましたが、今回は以下の4ステップで徐々に進めることにしました。 システムと組織を紐付け、オーナーシップを決める・決められる仕組みを作る 1人でプロセスをまわし、実現方法を確立する Developer と一緒に SLI/SLO を定義し、プロセスをまわす Error Budget Policy を定義して…

Business Trip for Global Team

…anagement(Terraform)の Developer への委譲、SLI/SLO の策定とレビューサイクルを開発チーム自身に回してもらうことなどがあげられます。これらは(特に SLI/SLO は)Site Reliability Engineering のプラクティスを開発チームへの委譲すること意味します。 今回の Business Trip ではあらためて Site Reliability Engineering のコンセプトを説明しつつ、我々がどう変わっていこうと…