🔰

ベンチャー企業でのSRE活動を振り返る(後編)

2024/04/22に公開

※本記事は、2022年12月16日に公開済みの記事を移行して再掲載したものです。

はじめに

フェズでエンジニアをしている321です

この記事は ベンチャー企業でのSRE活動を振り返る(前編) の続きとなっています
2021年7月にフェズに入社して、SREとしてどんな事をやってきたのがちょっとしたTipsと共に振り返りつつご紹介しようと思います

プロダクト開発と共通化

前編でご紹介したようなデータ基盤の整備がそれなりに終わった頃、データを利用したプロダクトの開発が活発化してきました
それまでPoC的な位置づけのプロダクトが本格的にローンチを迎えたり、複数の新規プロダクトの開発が始まりました
元々インフラエンジニアをやっていた事もあり、基本的にクラウドの設計や構築は私が担当しました
そして、やはり複数プロダクトの運用をすると共通化をしたくなるのが世の常です

Opsコードの共通化

開発されたプロダクトは勿論それぞれで機能が異なりますが、クラウドの設計や運用に関しては似た部分が多くあります
フェズでは、クラウドはGoogle Cloudで構築されている事が多く、IaCにはTerraformを利用しています
他にも、CI/CDのワークフローはGithub Actions、モニタリングはDatadog、といった感じです
このあたりを共通コード化して各リポジトリから利用できるようにする事で、構築速度とメンテナンス性の向上が期待できます
Github ActionsとTerraformの例を簡単に紹介します

Github Actions

Github Actions には各Providerが公式に用意してくれている便利なアクションがあります
※例えばGoogle Cloud関連のものは こちら
ただ、中にはこれらを組み合わせたり独自のアクションを作りたいケースもあります
アクション自体はコードを書いて集約用のリポジトリにPushすればOKなのですが、問題はそれを各リポジトリからどうやって利用するかです
marketplace にアクションを登録すれば利用できそうですが、、、
marketplaceへの登録や更新の手間を省いて、社内privateリポジトリに閉じた形で共通アクションを利用したい。。。
ということで、以下のような形にしてみました

jobs:
  UseCommonAction:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          # アクションを管理しているリポジトリをチェックアウト
          repository: your_organization/your_repo
          # ブランチやTagを指定して特定のVersionを指定する事も可能
          ref: main
          # チェックアウト先のディレクトリを指定
          path: .github/actions/your_repo
          # アクションを管理するリポジトリをチェックアウトできるTokenを明示的に指定 (secrets.GITHUB_TOKEN ではチェックアウトできません)
          token: ${{ secrets.GITHUB_TOKEN_FOR_PRIVATE_REPO }}
      - name: UseCommonAction
        uses: ./.github/actions/your_repo/.github/actions/your_action
        with:
          PARAMETER1: 'patameter1'
          PARAMETER2: 'patameter2'

やってる事はシンプルで
actions/checkout を使ってアクションを管理しているリポジトリをチェックアウトして実行しているだけです
1点注意が必要なのは、実行中のリポジトリ以外のprivateリポジトリを実行するには Personal Access Token の指定が必要です
Tokenの発行が不要な GITHUB_TOKEN を使いたいところですが、こちらは権限が足りずチェックアウトができません
※詳しくは公式ドキュメントをご参照ください

Terraform

Terraformにはmoduleといって、複数のリソースをまとめてテンプレートのように管理できる仕組みがあります
こちらも 公式や各providerが公開しているもの がありますが、独自のmoduleを作成したいケースがあります
ということで、privateリポジトリに閉じた形で複数リポジトリから利用できるようにしてみました
※この方法は 公式 にも書いてます

module "terraform_module" {
  source    = "git::https://github.com/your_organization/your_terraform_modules.git//path/to/your_module?ref=main"
  variable1 = "variable1"
  variable2 = "variable2"
}

作業者のローカルPCから実行する場合は、該当のリポジトリをCheckoutする事ができればこれで実行できます
フェズでは、Github ActionsからTerraformを実行しているケースがあるのですが
その場合はGithub Actionsと同様に Personal Access Token を指定してチェックアウトのURLを置換する事で実行が可能です

jobs:
  UseTerraformModule:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Enable Checkout from terraform_modules Repo
				# Secret からPersonal Access Token を取得
        env:
          GITHUB_TOKEN_FOR_PRIVATE_REPO: ${{ secrets.GITHUB_TOKEN_FOR_PRIVATE_REPO }}
				# git config コマンドでチェックアウト先のURLをToken付きURLに置換する
        run: git config --global url."https://${GITHUB_TOKEN_FOR_PRIVATE_REPO}:x-oauth-basic@github.com/your_organization".insteadOf "https://github.com/your_organization"
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: x.x.x
      - name: Terraform init
        run: terraform init
      - name: Terraform plan
        run: terraform plan

クラウドのセキュリティ

プロダクトが並行して開発されていく中で、やはり気になるのはセキュリティです
フェズのようなベンチャーでは人的リソースに限りがあり、それぞれのプロダクトにセキュリティ担当を貼り付ける事は難しいです
かと言って、専門知識のない開発チームに完全に任せてしまうとセキュリティに問題のある構成や設計になってしまうリスクがあります
そこで、Google Cloud のセキュリティサービスである Security Command Center を導入しました
SCCに関しては以前こちらでも取り上げたので、この記事では詳しくは割愛します
ご興味ある方は是非ご覧いただければと思います 🙇

今後について

"リテール産業の新たな常識をつくる" ためにフェズでは様々なプロダクトを開発しローンチしています
そして、その中核を担うのはやはりデータになります
データの信頼性が正しく担保されていない状態では、フェズの全プロダクトの価値が損なわれてしまいます
改めて、 "データの信頼性が担保された状態" がどういうもので、どう実現されるのか?
をデータ基盤チームと協力して突き詰めて行こうと考えています

まとめ

この記事のタイトルを SRE活動を振り返る としましたが
そもそもこの記事で紹介したような内容は SRE活動 と呼んでいいのかよく分からない。というのが正直なところです
ただ、フェズくらいの組織規模では成熟した組織に比べるといい意味で境界が曖昧になっているので
仕事の幅を狭める事なく自由に挑戦させていただいた1年ちょっとでした
悩む事も無くは無かったですが、総じて 楽しかった という感想です
勿論、ここで書いた内容や順番が100%正しかった!
と言うつもりはありませんが、この記事がどなたかの参考になれば幸いです

フェズ開発ブログ

Discussion