こんにちは!本日は、プラットフォームエンジニアリングの核である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分以内に得ることができます。
- GitHubリポジトリ: 標準コード構造とCI/CD(GitHub Actions)設定が完了したリポジトリ。📁
- セキュリティ設定: デフォルトでTrivyやSnykなどのセキュリティスキャン設定が含まれた状態で開始。🔒
- 管理自動化: Backstageカタログに登録され、依存関係グラフやドキュメント(TechDocs)を即座に確認可能。📡
🔥 終わりに:なぜコードで管理すべきなのか?
開発者が直接catalog-info.yamlを作成したりGitHub設定を操作したりすると、誤字脱字やセキュリティ設定の漏れが発生しやすくなります。しかし、Scaffolderの設計図を通すことで、「組織の標準ポリシー」がそのまま「プロジェクトの出発点」となります。
さあ、このコードをあなたのBackstageに適用してみてください!あなたのプラットフォームエンジニアリングの旅は、さらに強固なものになるでしょう。🚀
コメントを残す