🏗️ ガバナンスと自動化を一度に!Backstage標準スキャフォルダー(テンプレート)完全ガイド

こんにちは!本日は、プラットフォームエンジニアリングの核であるBackstage Scaffolderを活用して、「セキュリティガードレールを含む標準プロジェクト」をどのように生成できるかをご紹介します。

単に「コードをコピー」するのではなく、誰が、どのような目的で、どのようなセキュリティポリシーを遵守して生成するのかをコードで管理する方法を共有します。🛠️


1. テンプレートの全体構造 (Anatomy of a Template) 🦴

Backstageテンプレートは、大きくMetadata(名前、説明)、Parameters(ユーザー入力)、Steps(実行段階)、Output(結果案内)に分かれます。

YAML

# 1. テンプレートの識別情報の定義
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: standard-python-service
  title: "🛡️ 보안 표준 Python Flask 서비스"
  description: "KISA 보안 가이드라인과 CI/CD 스캔이 내장된 표준 API 서버를 생성합니다."
  tags: [standard, security, python]

spec:
  owner: platform-team
  type: service

  # 2. ユーザーから入力される「質問票」
  parameters:
    - title: "기본 정보"
      required: [component_id, owner]
      properties:
        component_id:
          title: "서비스 이름"
          type: string
          description: "생성할 프로젝트의 이름 (영문/숫자/-)"
        owner:
          title: "담당 팀"
          type: string
          ui:field: OwnerPicker # Backstage登録グループの選択

    - title: "저장소 설정"
      required: [repoUrl]
      properties:
        repoUrl:
          title: "GitHub 위치"
          type: string
          ui:field: RepoUrlPicker # リポジトリ作成場所の選択
          ui:options:
            allowedHosts: [github.com]

  # 3. 実際の魔法が起こる「自動化プロセス」
  steps:
    - id: fetch-base
      name: "표준 스켈레톤 가져오기"
      action: fetch:template
      input:
        url: ./skeleton # テンプレートソースフォルダ
        values:
          name: ${{ parameters.component_id }}
          owner: ${{ parameters.owner }}

    - id: publish
      name: "GitHub 저장소 생성 및 푸시"
      action: publish:github
      input:
        allowedHosts: ['github.com']
        description: "Created by Backstage Scaffolder"
        repoUrl: ${{ parameters.repoUrl }}

    - id: register
      name: "카탈로그 자동 등록"
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps['publish'].output.remoteUrl }}
        catalogInfoPath: '/catalog-info.yaml'

  # 4. 完了後にユーザーに表示する結果
  output:
    links:
      - title: "생성된 GitHub 저장소 보기"
        url: ${{ steps['publish'].output.remoteUrl }}

2. 主要ステップごとのコード詳細説明 🔍

📍 Parameters: データ入力の技術

ユーザーが入力する情報は単なるテキストではありません。ui:fieldを使用すると、Backstageシステムと連携した高度なコンポーネントを呼び出します。

  • OwnerPicker: 組織図に登録されたチームをリアルタイムで検索し、選択します。👥
  • RepoUrlPicker: 権限のあるGitHub組織を選択し、その場でリポジトリ名を決定します。

📍 Steps: 自動化の核となるエンジン

  • fetch:template: 最も重要なステップです。./skeletonフォルダにあるファイルをコピーしながら、${{ values.name }}のような変数をユーザーが入力した実際の値に「置換」します。
  • publish:github: 単にコードをアップロードするだけでなく、GitHub APIを通じて新しいリポジトリを作成し、初期コミットを行います。🛰️
  • catalog:register: 生成されたサービスがすぐにBackstage管理リスト(Catalog)に表示されるようにし、「シャドーIT」を防止します。

3. プロジェクトの心臓部:Skeletonフォルダ 🦴

テンプレートが参照する./skeletonフォルダの中には何が入っているのでしょうか?それは、まさに標準仕様書です。

./skeleton/catalog-info.yaml (例) このファイルはプロジェクトが生成されると同時に作成され、サービスの「身分証明書」の役割を果たします。

YAML

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: ${{ values.name | dump }}
  description: "이 서비스는 표준 템플릿으로 자동 생성되었습니다."
spec:
  type: service
  lifecycle: experimental
  owner: ${{ values.owner | dump }} # 作成時に入力したチームが所有者として自動指定!

Tip: ここで${{ values.owner }}を使用することで、生成と同時に所有権管理が自動的に行われます。🛡️


4. この設計図がもたらす結果 🎁

このテンプレートを実行すると、開発者は以下の成果物を1分以内に得ることができます。

  1. GitHubリポジトリ: 標準コード構造とCI/CD(GitHub Actions)設定が完了したリポジトリ。📁
  2. セキュリティ設定: デフォルトでTrivyやSnykなどのセキュリティスキャン設定が含まれた状態で開始。🔒
  3. 管理自動化: Backstageカタログに登録され、依存関係グラフやドキュメント(TechDocs)を即座に確認可能。📡

🔥 終わりに:なぜコードで管理すべきなのか?

開発者が直接catalog-info.yamlを作成したりGitHub設定を操作したりすると、誤字脱字やセキュリティ設定の漏れが発生しやすくなります。しかし、Scaffolderの設計図を通すことで、「組織の標準ポリシー」がそのまま「プロジェクトの出発点」となります。

さあ、このコードをあなたのBackstageに適用してみてください!あなたのプラットフォームエンジニアリングの旅は、さらに強固なものになるでしょう。🚀



Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です