APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Backstage 基礎: Software Template

はじめに

こんにちは。ACS事業部 亀崎です。

前回の「Software Catalog」に引き続き、今回も Backstage の基本機能の1つ、Software Template をご紹介したいと思います。

techblog.ap-com.co.jp

Software Template

Software Template機能の基本的な機能は、あらかじめ用意したフォルダ、ファイル一式(テンプレート)を、新しいGitリポジトリとして作成・コピーする、またはテンプレートフォルダ・ファイル一式の追加するPull Requestを作成する機能です。

テンプレートからコピーする際、何も変更を加えずそのままコピーする機能とともに、特定のキーワード( {{ values }} といった特定の文字列)をユーザー指定の文字列に置き換える機能も備わっています。キーワード埋め込みの例としては、アプリケーション名などが挙げられます。

ソースリポジトリにテンプレート用のカタログ情報を用意し、それをPlaTT/Backstageに登録することで、指定したテンプレートが利用できるようになります。

ユースケース1 IaC Scriptの共有

社内のWeb API系システムなどを開発・実行する際、App Service/Functions等の利用する実行環境やデータベースなど、一定のパターン構成で提供することも多いかと思います。こうした場合に、Platform Teamがそのプロビジョニングスクリプトを用意していることも多いと思います。このプロビジョニングスクリプトをテンプレートとして登録し、各システム開発チームが必要に応じてそのテンプレートをコピーし、アプリケーション開発チーム自身がクラウドリソースをプロビジョニングできるようにします。

ユースケース2 アプリケーション初期コード(ボイラープレート)の共有

アプリケーションの初期コードの準備は面倒なものです。これらの初期コードは実は個々のアプリケーションで大きな違いはなく、いつも同じ作業の繰り返しです。Microservice化されたシステムの場合、特にこの傾向が強く、かつ何度も繰り返し行われる作業になります。こうした共通部分をテンプレートとして登録し、各システム開発チームがそのテンプレートをコピーし、アプリケーション開発を即座に始められるようにすることで、作業時間を短縮できます。

登録内容

Software Templateを登録するには、BackstageのTemplate Catalog情報を記述します。(公式ドキュメントはこちらです)

# Notice the v1beta3 version
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
# some metadata about the template itself
metadata:
  name: v1beta3-demo
  title: Test Action template
  description: scaffolder v1beta3 template demo
spec:
  owner: backstage/techdocs-core
  type: service

  # these are the steps which are rendered in the frontend with the form input
  parameters:
    - title: Fill in some steps
      required:
        - name
      properties:
        name:
          title: Name
          type: string
          description: Unique name of the component
          ui:autofocus: true
          ui:options:
            rows: 5
        owner:
          title: Owner
          type: string
          description: Owner of the component
          ui:field: OwnerPicker
          ui:options:
            catalogFilter:
              kind: Group
    - title: Choose a location
      required:
        - repoUrl
      properties:
        repoUrl:
          title: Repository Location
          type: string
          ui:field: RepoUrlPicker
          ui:options:
            allowedHosts:
              - github.com

  # here's the steps that are executed in series in the scaffolder backend
  steps:
    - id: fetch-base
      name: Fetch Base
      action: fetch:template
      input:
        url: ./template
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}

    - id: fetch-docs
      name: Fetch Docs
      action: fetch:plain
      input:
        targetPath: ./community
        url: https://github.com/backstage/community/tree/main/backstage-community-sessions

    - id: publish
      name: Publish
      action: publish:github
      input:
        allowedHosts: ['github.com']
        description: This is ${{ parameters.name }}
        repoUrl: ${{ parameters.repoUrl }}

    - id: register
      name: Register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }}
        catalogInfoPath: '/catalog-info.yaml'

  # some outputs which are saved along with the job for use in the frontend
  output:
    links:
      - title: Repository
        url: ${{ steps['publish'].output.remoteUrl }}
      - title: Open in catalog
        icon: catalog
        entityRef: ${{ steps['register'].output.entityRef }}

記述内容には重要な要素が2つあります。それが parameterssteps です。

parametersは、テンプレートの出力先リポジトリ情報や、テンプレート内の文字列置き換え処理で利用する入力値を指定する部分になり、画面で表示されます。

parametersで指定できる代表的な入力フィールドは次のようなものになります。

  • 通常のテキスト入力
  • Repository Picker
  • Owner Picker
  • Entity Picker

steps は実際のコピー等の処理内容を記載するもので、一般的は source repositoryからのテンプレートを取得する fetch と target repositoryへ書き出す publish というアクションから構成されます。

stepsで指定できる代表的な機能は以下のとおりです。

fetch系 (組み込みFetchアクション群

  • fetch:template
    文字列置換を実行しながら一連のフォルダ/ファイルを取得する
  • fetch:plain
    置換は行わず指定されたフォルダ/ファイルを取得する

publish系 (GitHub関連のアクション群

  • publish:github
    リポジトリを作成し、取得したフォルダ/ファイルを展開する
  • publish:github:pull-request
    ブランチを作成し、フォルダ/ファイルを指定先に展開後、Pull Requestを作成する
  • github:environment:create
    GitHub Environmentを作成する

Templateのカタログ化

Software Templateは前回ご紹介した Software Catalogの表現形式の1つでもあります。このため、様々なパターンのテンプレートを作成・公開し、利用者に選択してつかってもらうことができます。

今回紹介したSoftware Templateを使うことで、組織内で頻繁に発生するような実装・指定を、個々の開発者が個別に調査し、実装し、検証し、といったことが不要になり、 すでに実績のあるコードを組織内で共有・利用者が直接選択し、すぐにそれらを利用できるようになります。これによって、作業時間の短縮や品質向上にも寄与できるのではないかと考えます。

ぜひ、有効にご活用ください。

まとめ

弊社では オープンソースのInternal Developer Portal であるBackstageをマネージド・サービスとして提供しています。

www.ap-com.co.jp

また、Platform Engineering、Backstageに関するご支援をさせていただいております。ご興味のある方ぜひご連絡ください。

www.ap-com.co.jp

www.ap-com.co.jp