Initial commit
This commit is contained in:
308
references/mta.md
Normal file
308
references/mta.md
Normal file
@@ -0,0 +1,308 @@
|
||||
# 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
|
||||
|
||||
```yaml
|
||||
_schema-version: "3.1"
|
||||
ID: my-cap-app
|
||||
version: 1.0.0
|
||||
description: My CAP Application
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
```yaml
|
||||
parameters:
|
||||
enable-parallel-deployments: true
|
||||
deploy_mode: html5-repo
|
||||
```
|
||||
|
||||
### Modules
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
```yaml
|
||||
_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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
- Using MTAs: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/using-multitarget-applications-to-manage-dependencies-41184aa.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/using-multitarget-applications-to-manage-dependencies-41184aa.md)
|
||||
- MTA Documentation: [https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment](https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment)
|
||||
Reference in New Issue
Block a user