Files
gh-secondsky-sap-skills-ski…/references/mta.md
2025-11-30 08:55:02 +08:00

7.1 KiB

Multitarget Applications (MTA) Reference

Overview

Multitarget Applications enable packaging multiple interconnected cloud components into a single deployable bundle, addressing the complexity of modern cloud applications.

Key Characteristics

  • Single archive with all modules and dependencies
  • Deployable across multiple SAP BTP subaccounts
  • Automated deployment in proper dependency order
  • Integrated deployment descriptor (mta.yaml)

When to Use MTAs

Scenario Recommendation
Business app with multiple components Use MTA
Dependencies on external resources (DB, messaging) Use MTA
Need standardized configuration Use MTA
Simple single-module app Consider cf push

Creation Options

Tool Description
SAP Business Application Studio Native MTA support
SAP Web IDE Full-Stack Automatic descriptor maintenance
mbt (Command Line) Java-based builder
CI/CD Pipelines Automated archive generation

MTA Structure

my-app/
├── mta.yaml              # Deployment descriptor
├── package.json          # Node.js dependencies
├── xs-security.json      # Security configuration
├── app/                  # UI module
│   ├── webapp/
│   └── package.json
├── srv/                  # Service module
│   ├── src/
│   └── package.json
└── db/                   # Database module
    ├── src/
    └── package.json

mta.yaml Anatomy

Schema and Identification

_schema-version: "3.1"
ID: my-cap-app
version: 1.0.0
description: My CAP Application

Parameters

parameters:
  enable-parallel-deployments: true
  deploy_mode: html5-repo

Modules

modules:
  - name: my-srv
    type: nodejs
    path: gen/srv
    parameters:
      buildpack: nodejs_buildpack
      memory: 256M
      disk-quota: 512M
    build-parameters:
      builder: npm
    requires:
      - name: my-hana
      - name: my-xsuaa
    provides:
      - name: srv-api
        properties:
          srv-url: ${default-url}

Resources

resources:
  - name: my-hana
    type: com.sap.xs.hdi-container
    parameters:
      service: hana
      service-plan: hdi-shared

  - name: my-xsuaa
    type: org.cloudfoundry.managed-service
    parameters:
      service: xsuaa
      service-plan: application
      path: ./xs-security.json

Module Types

Type Description
nodejs Node.js application
java Java application
hdb HANA database content
html5 Static HTML5 content
approuter.nodejs Application Router
com.sap.application.content Generic content

Resource Types

Type Description
com.sap.xs.hdi-container HDI container
org.cloudfoundry.managed-service Managed service instance
org.cloudfoundry.existing-service Existing service reference
org.cloudfoundry.user-provided-service User-provided service

Complete Example

_schema-version: "3.1"
ID: incident-management
version: 1.0.0

parameters:
  enable-parallel-deployments: true

build-parameters:
  before-all:
    - builder: custom
      commands:
        - npm ci
        - npx cds build --production

modules:
  # Service module
  - name: incident-srv
    type: nodejs
    path: gen/srv
    parameters:
      buildpack: nodejs_buildpack
      memory: 256M
    requires:
      - name: incident-db
      - name: incident-auth
      - name: incident-destination
    provides:
      - name: srv-api
        properties:
          srv-url: ${default-url}

  # Database deployer
  - name: incident-db-deployer
    type: hdb
    path: gen/db
    parameters:
      buildpack: nodejs_buildpack
    requires:
      - name: incident-db

  # UI Application
  - name: incident-app
    type: approuter.nodejs
    path: app/
    parameters:
      memory: 256M
    requires:
      - name: srv-api
        group: destinations
        properties:
          name: srv-api
          url: ~{srv-url}
          forwardAuthToken: true
      - name: incident-auth
      - name: incident-html5-repo-runtime

  # UI content deployer
  - name: incident-ui-deployer
    type: com.sap.application.content
    path: .
    requires:
      - name: incident-html5-repo-host
        parameters:
          content-target: true
    build-parameters:
      build-result: resources
      requires:
        - artifacts:
            - nsincidents.zip
          name: nsincidents
          target-path: resources/

  - name: nsincidents
    type: html5
    path: app/incidents
    build-parameters:
      build-result: dist
      builder: custom
      commands:
        - npm ci
        - npm run build:cf

resources:
  - name: incident-db
    type: com.sap.xs.hdi-container
    parameters:
      service: hana
      service-plan: hdi-shared

  - name: incident-auth
    type: org.cloudfoundry.managed-service
    parameters:
      service: xsuaa
      service-plan: application
      path: ./xs-security.json
      config:
        xsappname: incident-${org}-${space}
        tenant-mode: dedicated

  - name: incident-destination
    type: org.cloudfoundry.managed-service
    parameters:
      service: destination
      service-plan: lite

  - name: incident-html5-repo-runtime
    type: org.cloudfoundry.managed-service
    parameters:
      service: html5-apps-repo
      service-plan: app-runtime

  - name: incident-html5-repo-host
    type: org.cloudfoundry.managed-service
    parameters:
      service: html5-apps-repo
      service-plan: app-host

Build Commands

# Install MTA Build Tool
npm install -g mbt

# Build MTA archive
mbt build

# Build with specific platform
mbt build -p cf

# Build to specific directory
mbt build -t ./dist

Deploy Commands

# Install MTA plugin
cf install-plugin multiapps

# Deploy
cf deploy mta_archives/my-app_1.0.0.mtar

# Deploy with options
cf deploy my-app.mtar --version-rule ALL

# Blue-green deployment
cf bg-deploy my-app.mtar

# List deployed MTAs
cf mtas

# Undeploy
cf undeploy my-app --delete-services

Common Issues

Issue Cause Solution
Service binding fails Service not ready Add dependency order
Memory exceeded Insufficient allocation Increase in mta.yaml
Build fails Missing dependencies Run npm ci first
Deploy timeout Large application Increase timeout

Best Practices

  1. Use build-parameters for complex builds
  2. Enable parallel deployments for faster deploys
  3. Externalize configuration via variables
  4. Version your MTAs semantically
  5. Test locally before deploying

Source Documentation