Menu Close

5.16. プロダクトのエクスポート

3scale プロダクト定義を .yaml 形式でエクスポートすると、そのプロダクトをソース 3scale インスタンスとの接続がない 3scale インスタンスにインポートすることができます。プロダクトをエクスポートする前に、3scale プロダクトを設定する必要があります。Creating new products to test API calls を参照してください。

2 つの 3scale インスタンスにネットワーク接続がある場合は、両方の 3scale インスタンスで同じ 3scale プロダクトを使用する場合は、toolbox 3scale copy コマンド を使用します。

説明

3scale プロダクトをエクスポートすると、toolbox は Product および Backend カスタムリソース定義 (CRD) に準拠する .yaml 形式でプロダクト定義をシリアライズします。.yaml 出力には、プロダクトの基本情報の他に、以下が含まれます。

  • プロダクトにリンクされているバックエンド。
  • リンクされたバックエンドのメトリクス、メソッド、およびマッピングルール。
  • アプリケーションプランで定義される制限および課金ルール。
  • 制限および課金ルールで参照されるメトリクスおよびメソッド。

プロダクトのエクスポートは読み取り専用操作です。つまり、プロダクトを繰り返しエクスポートすることは安全です。toolbox は、エクスポートされるプロダクトを変更しません。必要であれば、別の 3scale インスタンスにインポートする前に .yaml 出力を変更することができます。

3scale プロダクトのエクスポートは、以下の状況を対象としています。

  • ソースおよび宛先 3scale インスタンスの間には接続がない。たとえば、複数の 3scale インスタンスで同じプロダクトを使用する場合、toolbox 3scale copy コマンドを実行できないような、深刻なネットワーク制限がある可能性があります。
  • Git またはその他のソースコントロールシステムを使用して、.yaml 形式で 3scale プロダクト定義を維持する。

3scale toolbox の export および import コマンドは、プロダクト定義のバックアップおよび復元にも役立つことがあります。

フォーマット

export コマンドを実行するには、以下の形式を使用します。

3scale product export [-f output-file] <remote> <product>

export コマンドは、出力を stdout またはファイルに送信できます。デフォルトは stdout です。出力をファイルに送信するには、.yaml ファイルの名前を指定して -f または --file オプションを指定します。

<remote> を、プロダクトのエクスポート元の 3scale インスタンスに関連付けられた 3scale プロバイダーアカウントエイリアスまたは URL に置き換えます。これを指定する方法の詳細については、Managing remote access credentials を参照してください。

<product> を、エクスポートするプロダクトのシステム名または 3scale ID に置き換えます。このプロダクトは、指定した 3scale プロバイダーアカウントに関連付けられている必要があります。プロダクトのシステム名は、プロダクトの Overview ページの 3scale GUI にあります。プロダクトの 3scale ID を取得するには、toolbox 3scale services show コマンド を実行します。

以下のコマンドは、my-3scale-1 プロバイダーアカウントに関連付けられた 3scale インスタンスから petstore プロダクトをエクスポートし、それを petstore-product.yaml ファイルに出力します。

3scale product export -f petstore-product.yaml my-3scale-1 petstore

以下は、Default API プロダクトのシリアライズの例です。

apiVersion: v1
kind: List
items:
- apiVersion: capabilities.3scale.net/v1beta1
  kind: Product
  metadata:
    annotations:
      3scale_toolbox_created_at: '2021-02-17T10:59:23Z'
      3scale_toolbox_version: 0.17.1
    name: api.xysnalcj
  spec:
    name: Default API
    systemName: api
    description: ''
    mappingRules:
    - httpMethod: GET
      pattern: "/v2"
      metricMethodRef: hits
      increment: 1
      last: false
    metrics:
      hits:
        friendlyName: Hits
        unit: hit
        description: Number of API hits
    methods:
      servicemethod01:
        friendlyName: servicemethod01
        description: ''
    policies:
    - name: apicast
      version: builtin
      configuration: {}
      enabled: true
    applicationPlans:
      basic:
        name: Basic
        appsRequireApproval: false
        trialPeriod: 0
        setupFee: 0.0
        custom: false
        state: published
        costMonth: 0.0
        pricingRules:
        - from: 1
          to: 1000
          pricePerUnit: 1.0
          metricMethodRef:
            systemName: hits
        limits:
        - period: hour
          value: 1222222
          metricMethodRef:
            systemName: hits
            backend: backend_01
    backendUsages:
      backend_01:
        path: "/v1/pets"
      backend_02:
        path: "/v1/cats"
    deployment:
      apicastSelfManaged:
        authentication:
          oidc:
            issuerType: rest
            issuerEndpoint: https://hello:test@example.com/auth/realms/3scale-api-consumers
            jwtClaimWithClientID: azp
            jwtClaimWithClientIDType: plain
            authenticationFlow:
              standardFlowEnabled: false
              implicitFlowEnabled: true
              serviceAccountsEnabled: false
              directAccessGrantsEnabled: true
            credentials: query
            security:
              hostHeader: ''
              secretToken: some_secret
            gatewayResponse:
              errorStatusAuthFailed: 403
              errorHeadersAuthFailed: text/plain; charset=us-ascii
              errorAuthFailed: Authentication failed
              errorStatusAuthMissing: 403
              errorHeadersAuthMissing: text/plain; charset=us-ascii
              errorAuthMissing: Authentication parameters missing
              errorStatusNoMatch: 404
              errorHeadersNoMatch: text/plain; charset=us-ascii
              errorNoMatch: No Mapping Rule matched
              errorStatusLimitsExceeded: 429
              errorHeadersLimitsExceeded: text/plain; charset=us-ascii
              errorLimitsExceeded: Usage limit exceeded
        stagingPublicBaseURL: http://staging.example.com:80
        productionPublicBaseURL: http://example.com:80
- apiVersion: capabilities.3scale.net/v1beta1
  kind: Backend
  metadata:
    annotations:
      3scale_toolbox_created_at: '2021-02-17T10:59:34Z'
      3scale_toolbox_version: 0.17.1
    name: backend.01.pcjwxbdu
  spec:
    name: Backend 01
    systemName: backend_01
    privateBaseURL: https://b1.example.com:443
    description: new desc
    mappingRules:
    - httpMethod: GET
      pattern: "/v1/pets"
      metricMethodRef: hits
      increment: 1
      last: false
    metrics:
      hits:
        friendlyName: Hits
        unit: hit
        description: Number of API hits
    methods:
      mybackendmethod01:
        friendlyName: mybackendmethod01
        description: ''
- apiVersion: capabilities.3scale.net/v1beta1
  kind: Backend
  metadata:
    annotations:
      3scale_toolbox_created_at: '2021-02-17T10:59:34Z'
      3scale_toolbox_version: 0.17.1
    name: backend.02.tiedgjsk
  spec:
    name: Backend 02
    systemName: backend_02
    privateBaseURL: https://b2.example.com:443
    description: ''
    mappingRules:
    - httpMethod: GET
      pattern: "/v1/cats"
      metricMethodRef: hits
      increment: 1
      last: false
    metrics:
      hits:
        friendlyName: Hits
        unit: hit
        description: Number of API hits
    methods:
      backend02_method01:
        friendlyName: backend02_method01
        description: ''

Product CR へのエクスポートおよびパイプ

export コマンドを実行すると、出力をパイプで渡し、プロダクトカスタムリソース(CR) を作成できます。この CR が含まれる 3scale インスタンスは、以下によって異なります。

  • threescale-provider-account シークレットが定義されている場合、3scale operator はそのシークレットによって識別される 3scale インスタンスにプロダクト CR を作成します。
  • threescale-provider-account シークレットが定義されていない場合は、新規プロダクト CR が置かれている namespace に 3scale インスタンスがインストールされていると、3scale operator はその namespace にプロダクト CR を作成します。
  • threescale-provider-account シークレットが定義されておらず、新規プロダクト CR が置かれている namespace に 3scale インスタンスが含まれていない場合は、3scale operator はプロダクト CR を failed 状態とマークします。

threescale-provider-account シークレットが含まれる namespace で以下のコマンドを実行するとします。toolbox は、threescale-provider-account シークレットで識別された 3scale インスタンスに petstore CR をパイプ処理します。

3scale product export my-3scale-1 petstore | oc apply -f -

詳細は、How the 3scale operator identifies the tenant that a custom resource links to を参照してください。