Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "sap-btp-best-practices",
|
||||||
|
"description": "Comprehensive BTP best practices for enterprise cloud architecture, account management, security, deployment, and operations. Covers account hierarchies, Cloud Foundry, Kyma, governance, and CI/CD.",
|
||||||
|
"version": "1.1.2",
|
||||||
|
"author": {
|
||||||
|
"name": "Zhongwei Li",
|
||||||
|
"email": "zhongweili@tubi.tv"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
"./"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# sap-btp-best-practices
|
||||||
|
|
||||||
|
Comprehensive BTP best practices for enterprise cloud architecture, account management, security, deployment, and operations. Covers account hierarchies, Cloud Foundry, Kyma, governance, and CI/CD.
|
||||||
447
SKILL.md
Normal file
447
SKILL.md
Normal file
@@ -0,0 +1,447 @@
|
|||||||
|
---
|
||||||
|
name: sap-btp-best-practices
|
||||||
|
description: |
|
||||||
|
Production-ready SAP BTP best practices for enterprise architecture, account management, security, and operations. Use when planning BTP implementations, setting up account hierarchies, configuring environments, implementing authentication, designing CI/CD pipelines, establishing governance, building Platform Engineering teams, implementing failover strategies, or managing application lifecycle on SAP BTP.
|
||||||
|
|
||||||
|
Keywords: SAP BTP, account hierarchy, global account, directory, subaccount, Cloud Foundry, Kyma, ABAP, SAP Identity Authentication, CI/CD, governance, Platform Engineering, failover, multi-region, SAP BTP best practices
|
||||||
|
license: GPL-3.0
|
||||||
|
metadata:
|
||||||
|
version: "1.3.0"
|
||||||
|
last_verified: "2025-11-27"
|
||||||
|
---
|
||||||
|
|
||||||
|
# SAP BTP Best Practices
|
||||||
|
|
||||||
|
## Related Skills
|
||||||
|
|
||||||
|
- **sap-btp-cloud-platform**: Use for technical implementation details, CLI commands, and runtime configurations
|
||||||
|
- **sap-btp-connectivity**: Use for connectivity patterns, destination configuration, and Cloud Connector setup
|
||||||
|
- **sap-btp-service-manager**: Use for service lifecycle management and programmatic service operations
|
||||||
|
- **sap-btp-developer-guide**: Use for development workflows, CAP integration, and application patterns
|
||||||
|
- **sap-cap-capire**: Use when designing CAP applications on BTP or implementing multitenancy
|
||||||
|
- **sap-fiori-tools**: Use for UI deployment strategies and frontend application guidelines
|
||||||
|
|
||||||
|
Production-ready SAP BTP implementation guidance based on official SAP documentation.
|
||||||
|
|
||||||
|
**Quick Links**:
|
||||||
|
- **Official Guide**: [https://github.com/SAP-docs/btp-best-practices-guide](https://github.com/SAP-docs/btp-best-practices-guide)
|
||||||
|
- **SAP Help Portal**: [https://help.sap.com/docs/btp/btp-administrators-guide](https://help.sap.com/docs/btp/btp-administrators-guide)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Platform Fundamentals](#platform-fundamentals)
|
||||||
|
2. [Account Model Setup](#account-model-setup)
|
||||||
|
3. [Security and Authentication](#security-and-authentication)
|
||||||
|
4. [Connectivity](#connectivity)
|
||||||
|
5. [Governance and Teams](#governance-and-teams)
|
||||||
|
6. [Development](#development)
|
||||||
|
7. [AI Development](#ai-development)
|
||||||
|
8. [Deployment and Delivery](#deployment-and-delivery)
|
||||||
|
9. [High Availability and Failover](#high-availability-and-failover)
|
||||||
|
10. [Operations and Monitoring](#operations-and-monitoring)
|
||||||
|
11. [Cost Management](#cost-management)
|
||||||
|
12. [Bundled Resources](#bundled-resources)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Platform Fundamentals
|
||||||
|
|
||||||
|
### Account Hierarchy
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account (SAP contract)
|
||||||
|
├── Directory (optional, up to 7 levels)
|
||||||
|
│ └── Subaccount (region-specific, apps run here)
|
||||||
|
│ ├── Cloud Foundry Org → Spaces
|
||||||
|
│ └── Kyma Cluster → Namespaces
|
||||||
|
└── Subaccount
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Points**:
|
||||||
|
- Global account = contract with SAP (one per commercial model)
|
||||||
|
- Directory = groups subaccounts (max 7 levels deep)
|
||||||
|
- Subaccount = deployed in specific region, enables runtimes
|
||||||
|
- Use labels for virtual grouping (Dev/Test/Prod, cost centers)
|
||||||
|
|
||||||
|
### Environments
|
||||||
|
|
||||||
|
| Environment | Use Case | Key Features |
|
||||||
|
|-------------|----------|--------------|
|
||||||
|
| **Cloud Foundry** | Polyglot apps | Multiple buildpacks, spaces |
|
||||||
|
| **Kyma** | Cloud-native K8s | Open-source, namespaces |
|
||||||
|
| **ABAP** | ABAP extensions | RAP, cloud-ready ABAP |
|
||||||
|
| **Neo** | Legacy | **Migrate away** - HTML5, Java, HANA XS |
|
||||||
|
|
||||||
|
### Commercial Models
|
||||||
|
|
||||||
|
- **Consumption-Based** (BTPEA/CPEA): Flexible access, best for pilots
|
||||||
|
- **Subscription-Based**: Fixed-cost for known service needs
|
||||||
|
|
||||||
|
**Best Practice**: Start with consumption-based, move to subscription for stable workloads.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Model Setup
|
||||||
|
|
||||||
|
### Simple Model (3 subaccounts)
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Dev Subaccount
|
||||||
|
├── Test Subaccount
|
||||||
|
└── Prod Subaccount
|
||||||
|
```
|
||||||
|
Best for: Initial implementations, single team, <3 projects
|
||||||
|
|
||||||
|
### Directory Model (scalable)
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Directory: HR
|
||||||
|
│ ├── hr-dev / hr-test / hr-prod
|
||||||
|
├── Directory: Sales
|
||||||
|
│ ├── sales-dev / sales-test / sales-prod
|
||||||
|
└── Directory: Central IT
|
||||||
|
├── api-management
|
||||||
|
└── shared-services
|
||||||
|
```
|
||||||
|
Best for: Multiple teams, cost allocation, complex governance
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
| Entity | Convention | Example |
|
||||||
|
|--------|------------|---------|
|
||||||
|
| Subaccount | Natural language | "HR Development" |
|
||||||
|
| Subdomain | Lowercase, hyphens | `hr-dev-acme` |
|
||||||
|
| CF Org | Company prefix | `acme-hr-dev` |
|
||||||
|
| CF Space | Consistent across stages | `hr-recruiting` |
|
||||||
|
|
||||||
|
**Tip**: Derive CF org/Kyma names from subaccount names for consistency.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security and Authentication
|
||||||
|
|
||||||
|
### Identity Provider Setup
|
||||||
|
|
||||||
|
**Always use SAP Cloud Identity Services - Identity Authentication**
|
||||||
|
|
||||||
|
```
|
||||||
|
Corporate IdP → Identity Authentication (proxy) → SAP BTP
|
||||||
|
```
|
||||||
|
|
||||||
|
**Critical Steps**:
|
||||||
|
1. Add multiple administrators (different time zones)
|
||||||
|
2. Enable MFA for all admins
|
||||||
|
3. Configure security alerts
|
||||||
|
4. Set up backup admins in SAP ID Service
|
||||||
|
|
||||||
|
### Authorization Methods
|
||||||
|
|
||||||
|
| Method | Best For | Notes |
|
||||||
|
|--------|----------|-------|
|
||||||
|
| **Provisioning** | Production, many users | Centralized roles, automated offboarding |
|
||||||
|
| **Federation** | Simple scenarios | Real-time sync, but doesn't scale well |
|
||||||
|
| **Manual** | Testing only | Quick setup, not production-ready |
|
||||||
|
|
||||||
|
### Destination Authentication
|
||||||
|
|
||||||
|
**Recommended**:
|
||||||
|
- `PrincipalPropagation` - SAP on-premise systems
|
||||||
|
- `OAuth2SAMLBearerAssertion` - Third-party systems
|
||||||
|
- `OAuth2JWTBearer` - User token exchange
|
||||||
|
|
||||||
|
**Avoid in Production**:
|
||||||
|
- `BasicAuthentication`
|
||||||
|
- `OAuth2Password`
|
||||||
|
|
||||||
|
**See**: `references/security-and-authentication.md` for complete guidance
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Connectivity
|
||||||
|
|
||||||
|
### Remote System Access
|
||||||
|
|
||||||
|
- **Internet Services**: Destinations with authentication
|
||||||
|
- **On-Premise Systems**: Destinations + Cloud Connector
|
||||||
|
|
||||||
|
### Cloud Connector
|
||||||
|
|
||||||
|
- Lightweight on-premise agent
|
||||||
|
- Secure tunnel to SAP BTP (no inbound ports)
|
||||||
|
- Fine-grained access control
|
||||||
|
- Supports RFC and HTTP protocols
|
||||||
|
- Enables principal propagation
|
||||||
|
|
||||||
|
**Note**: Each subaccount needs separate Cloud Connector config.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Governance and Teams
|
||||||
|
|
||||||
|
### Required Teams
|
||||||
|
|
||||||
|
**Platform Engineering Team (Center of Excellence)**:
|
||||||
|
- Manages cloud landscape infrastructure
|
||||||
|
- Handles account operations, build infrastructure
|
||||||
|
- Creates governance and compliance guidelines
|
||||||
|
- **Does NOT** manage individual application lifecycles
|
||||||
|
|
||||||
|
**Cloud Development Teams**:
|
||||||
|
- Follow DevOps (develop AND operate)
|
||||||
|
- Responsible for application lifecycle
|
||||||
|
- Regular maintenance (e.g., UI updates every 6 months)
|
||||||
|
|
||||||
|
### Essential Documentation
|
||||||
|
|
||||||
|
1. **Onboarding Doc**: Organization, app IDs, timeline, tech stack
|
||||||
|
2. **Security Doc**: Data sensitivity, policies, auth framework
|
||||||
|
3. **Services Catalog**: Templates for destinations, builds, schemas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Programming Models
|
||||||
|
|
||||||
|
**SAP CAP (Cloud Application Programming Model)**:
|
||||||
|
- Framework with languages, libraries, tools
|
||||||
|
- Supports Java, JavaScript, TypeScript
|
||||||
|
- Enterprise-grade services and data models
|
||||||
|
|
||||||
|
**ABAP Cloud**:
|
||||||
|
- Modern ABAP for cloud-ready apps
|
||||||
|
- RAP (RESTful ABAP Programming Model)
|
||||||
|
- Extensions for ABAP-based products
|
||||||
|
|
||||||
|
### Development Lifecycle
|
||||||
|
|
||||||
|
1. **Explore**: Business opportunity, team roles
|
||||||
|
2. **Discover**: Use cases, technology options
|
||||||
|
3. **Design**: UX design, domain-driven design
|
||||||
|
4. **Deliver**: Landscape setup, development
|
||||||
|
5. **Run and Scale**: Feedback, optimization
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AI Development
|
||||||
|
|
||||||
|
SAP BTP provides AI capabilities through **SAP AI Core** for:
|
||||||
|
- **Generative AI** (LLMs, RAG)
|
||||||
|
- **Narrow AI** (classical ML)
|
||||||
|
|
||||||
|
**Key Resources**:
|
||||||
|
- Repository: [SAP-samples/sap-btp-ai-best-practices](https://github.com/SAP-samples/sap-btp-ai-best-practices)
|
||||||
|
- Documentation: [https://btp-ai-bp.docs.sap/](https://btp-ai-bp.docs.sap/)
|
||||||
|
|
||||||
|
**Best Practices**:
|
||||||
|
- Use service keys for secure authentication
|
||||||
|
- Implement PII data masking
|
||||||
|
- Build RAG with SAP HANA Cloud Vector Engine
|
||||||
|
- Configure content filtering
|
||||||
|
- Monitor model drift
|
||||||
|
|
||||||
|
**Use Cases**: 20+ samples including chatbots, PDF extraction, procurement.
|
||||||
|
|
||||||
|
**See**: `references/ai-development-best-practices.md` for patterns and examples
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment and Delivery
|
||||||
|
|
||||||
|
### Deployment Methods
|
||||||
|
|
||||||
|
**Cloud Foundry/Neo**:
|
||||||
|
- Package as MTA archive
|
||||||
|
- Deploy via: BTP Cockpit, CF CLI, Business Application Studio
|
||||||
|
|
||||||
|
**Kyma**:
|
||||||
|
- Docker images (Dockerfile or Cloud Native Buildpacks)
|
||||||
|
- Helm charts for production
|
||||||
|
- Deploy via SAP Continuous Integration and Delivery
|
||||||
|
|
||||||
|
### CI/CD Approaches
|
||||||
|
|
||||||
|
**SAP Continuous Integration and Delivery**:
|
||||||
|
- Low expertise required
|
||||||
|
- Ready-to-use infrastructure
|
||||||
|
- Direct SAP support
|
||||||
|
|
||||||
|
**Project "Piper"**:
|
||||||
|
- High expertise required
|
||||||
|
- Jenkins-based
|
||||||
|
- Open-source community support
|
||||||
|
|
||||||
|
**Best Practice**: Combine CI/CD with SAP Cloud Transport Management for governance + agility.
|
||||||
|
|
||||||
|
**See**: `references/deployment-and-delivery.md` for detailed configs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## High Availability and Failover
|
||||||
|
|
||||||
|
### Multi-Region Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Custom Domain URL
|
||||||
|
│
|
||||||
|
Load Balancer
|
||||||
|
├── Region 1 (active)
|
||||||
|
└── Region 2 (passive/active)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Failover Implementation
|
||||||
|
|
||||||
|
**Four Core Principles**:
|
||||||
|
|
||||||
|
1. **Deploy in Two Regions**: Near users and backend systems
|
||||||
|
2. **Keep Synced**: CI/CD pipeline or Cloud Transport Management
|
||||||
|
3. **Define Detection**: Monitor 5xx errors, timeouts
|
||||||
|
4. **Plan Failback**: Visual differentiation, user-driven
|
||||||
|
|
||||||
|
**Legal**: Check cross-region data processing restrictions.
|
||||||
|
|
||||||
|
**See**: `references/failover-and-resilience.md` for implementation details
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Operations and Monitoring
|
||||||
|
|
||||||
|
### Go-Live Checklist
|
||||||
|
|
||||||
|
1. Deploy to production
|
||||||
|
2. Set go-live timeframe (avoid quarter-end)
|
||||||
|
3. Embed in SAP Fiori Launchpad
|
||||||
|
4. Provision business users
|
||||||
|
5. Configure role collections
|
||||||
|
|
||||||
|
### Monitoring Tools
|
||||||
|
|
||||||
|
**SAP Cloud ALM** (Enterprise Support):
|
||||||
|
- Real User Monitoring
|
||||||
|
- Health Monitoring
|
||||||
|
- Integration and Exception Monitoring
|
||||||
|
- Job Automation Monitoring
|
||||||
|
|
||||||
|
**SAP Cloud Logging**:
|
||||||
|
- Observability across CF, Kyma, Kubernetes
|
||||||
|
|
||||||
|
**SAP Alert Notification**:
|
||||||
|
- Multi-channel notifications (email, chat, ticketing)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cost Management
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
|
||||||
|
1. Check *Costs and Usage* monthly
|
||||||
|
2. Provide minimal required entitlements
|
||||||
|
3. Use labels for cost allocation
|
||||||
|
4. Set up automated alerts (Usage Data Management + Alert Notification)
|
||||||
|
|
||||||
|
### Contract Strategies
|
||||||
|
|
||||||
|
- Consolidate subscriptions in one global account
|
||||||
|
- Use hybrid accounts for mixed workloads
|
||||||
|
- Note: Consumption credits non-transferable between global accounts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bundled Resources
|
||||||
|
|
||||||
|
This skill provides comprehensive reference documentation:
|
||||||
|
|
||||||
|
### Account & Governance
|
||||||
|
- **`references/account-models.md`** (11K lines)
|
||||||
|
- Detailed account structure patterns
|
||||||
|
- Naming conventions and examples
|
||||||
|
- Cost allocation strategies
|
||||||
|
|
||||||
|
- **`references/governance-and-teams.md`** (13K lines)
|
||||||
|
- Platform Engineering team structure
|
||||||
|
- Onboarding processes
|
||||||
|
- Documentation templates
|
||||||
|
|
||||||
|
### Security & Connectivity
|
||||||
|
- **`references/security-and-authentication.md`** (13K lines)
|
||||||
|
- Complete auth methods comparison
|
||||||
|
- Destination configuration
|
||||||
|
- Kyma RBAC manifests
|
||||||
|
- Identity lifecycle management
|
||||||
|
|
||||||
|
### Deployment & Operations
|
||||||
|
- **`references/deployment-and-delivery.md`** (10K lines)
|
||||||
|
- MTA descriptor templates
|
||||||
|
- CI/CD pipeline configs
|
||||||
|
- Transport management setup
|
||||||
|
|
||||||
|
- **`references/operations-and-monitoring.md`** (11K lines)
|
||||||
|
- Go-live procedures
|
||||||
|
- Monitoring setup guides
|
||||||
|
- Troubleshooting checklists
|
||||||
|
|
||||||
|
### High Availability
|
||||||
|
- **`references/failover-and-resilience.md`** (12K lines)
|
||||||
|
- Multi-region architecture
|
||||||
|
- Load balancer configurations
|
||||||
|
- Failover automation scripts
|
||||||
|
|
||||||
|
### Templates & Examples
|
||||||
|
- **`references/templates-and-examples.md`** (18K lines)
|
||||||
|
- Complete code templates
|
||||||
|
- Kubernetes RBAC manifests
|
||||||
|
- MTA descriptors
|
||||||
|
- Helm charts
|
||||||
|
- CI/CD configs
|
||||||
|
|
||||||
|
### AI Development
|
||||||
|
- **`references/ai-development-best-practices.md`** (6K lines)
|
||||||
|
- Generative AI patterns
|
||||||
|
- RAG implementation
|
||||||
|
- 20+ use cases catalog
|
||||||
|
|
||||||
|
### Progress Tracking
|
||||||
|
- Implementation status
|
||||||
|
- Coverage details
|
||||||
|
- Validation checklists
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Administration Tools
|
||||||
|
|
||||||
|
| Tool | Use Case |
|
||||||
|
|------|----------|
|
||||||
|
| **SAP BTP Cockpit** | GUI for all admin tasks |
|
||||||
|
| **btp CLI** | Terminal/automation scripting |
|
||||||
|
| **REST APIs** | Programmatic administration |
|
||||||
|
| **Terraform Provider** | Infrastructure as Code |
|
||||||
|
| **SAP Automation Pilot** | Low-code/no-code automation |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Shared Responsibility Model
|
||||||
|
|
||||||
|
**SAP Manages**:
|
||||||
|
- Platform software updates/patches
|
||||||
|
- Infrastructure and OS monitoring
|
||||||
|
- BTP service monitoring
|
||||||
|
- Capacity management and incidents
|
||||||
|
- Global account provisioning
|
||||||
|
- HANA database operations
|
||||||
|
- Kyma `kyma-system` namespace
|
||||||
|
|
||||||
|
**You Manage**:
|
||||||
|
- Global account strategy and subaccount config
|
||||||
|
- Application development, deployment, security
|
||||||
|
- Role assignments and integrations
|
||||||
|
- Application monitoring and health checks
|
||||||
|
- Open source vulnerability scanning
|
||||||
|
- Triggering HANA revision updates
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: 2025-11-27
|
||||||
|
**Review Progress**: See SAP_SKILLS_REVIEW_PROGRESS.md
|
||||||
|
**Next Review**: 2026-02-27 (quarterly)
|
||||||
77
plugin.lock.json
Normal file
77
plugin.lock.json
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:secondsky/sap-skills:skills/sap-btp-best-practices",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "31dbeff5e441adef9b0ffecc6e439f8703d86d90",
|
||||||
|
"treeHash": "cddec86a3dafa31fd59a68bb4e6fedfd7dae56d9f1109f466173e48b586a1a12",
|
||||||
|
"generatedAt": "2025-11-28T10:28:11.118149Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "sap-btp-best-practices",
|
||||||
|
"description": "Comprehensive BTP best practices for enterprise cloud architecture, account management, security, deployment, and operations. Covers account hierarchies, Cloud Foundry, Kyma, governance, and CI/CD.",
|
||||||
|
"version": "1.1.2"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "7ee17acaecf1a80bf022ad1d14a94415750cb730fcbd12e8712c7c2738416970"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "SKILL.md",
|
||||||
|
"sha256": "95014da69b9fd7f280b4844c5bd4c0f851055618e692c86465991475bb62f655"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/ai-development-best-practices.md",
|
||||||
|
"sha256": "f7d8d2eda8438abcc31387fedffffdfff1d129bc5355712485d93f50659709bc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/operations-and-monitoring.md",
|
||||||
|
"sha256": "40e6ab4b80eaf578df6d8d001339c02df09e525b8e7b84bb6c250ad685c719e9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/security-and-authentication.md",
|
||||||
|
"sha256": "900cdc7ffa1d8d765e45b6979f216a80231444ff8ee5bc6c7d4342f5054bf249"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/governance-and-teams.md",
|
||||||
|
"sha256": "510e9d2c6a8ab17573a0a857650f8164c94e6ae65c60bfa02581c9cd67559f9e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/failover-and-resilience.md",
|
||||||
|
"sha256": "ddc8f84c7a7ae5bdc28242064cd2c94dcd8c754692f357c32cf290c12de2540c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/templates-and-examples.md",
|
||||||
|
"sha256": "331b6efdd8dfbc2b0dc1c6435cbfe7b3e3bdf784798720a121d414cdb33c7914"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/deployment-and-delivery.md",
|
||||||
|
"sha256": "636eb31501814ccf8da9137833f3051cedbc630625aefeb5fe6d76d6377357e9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "references/account-models.md",
|
||||||
|
"sha256": "12cffe129541e10193f9f709dadc4bfe5685f015000f7f0749ebfc9a22773673"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "02137a152ec1572f384a86e5ecc2586e809a147938668b0e90a60e0fca765351"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "cddec86a3dafa31fd59a68bb4e6fedfd7dae56d9f1109f466173e48b586a1a12"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
366
references/account-models.md
Normal file
366
references/account-models.md
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
# SAP BTP Account Models - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Hierarchy Deep Dive
|
||||||
|
|
||||||
|
### Global Accounts
|
||||||
|
|
||||||
|
Global accounts are region and runtime-independent entities representing contracts with SAP:
|
||||||
|
- Administrators manage subaccounts, members, entitlements, and quotas
|
||||||
|
- Typically one global account per commercial model
|
||||||
|
- Separate billing per global account
|
||||||
|
- Multiple global accounts may be needed for legal or commercial separation
|
||||||
|
|
||||||
|
**Commercial Contract Options**:
|
||||||
|
- **Consumption-Based**: BTPEA, CPEA, Pay-As-You-Go (cannot mix flavors)
|
||||||
|
- **Subscription-Based**: Fixed-cost for 1-3 year periods
|
||||||
|
|
||||||
|
### Directories
|
||||||
|
|
||||||
|
Directories group subaccounts for organized management and can nest up to 5 levels deep.
|
||||||
|
|
||||||
|
**Directory Use Cases**:
|
||||||
|
1. **Administrative Organization**: By subsidiary, department, or line of business
|
||||||
|
2. **Billing and Accounting**: Align with financial structure
|
||||||
|
3. **Geographical Grouping**: Regulatory compliance and performance optimization
|
||||||
|
4. **Business Scenario Alignment**: Group by project or initiative
|
||||||
|
5. **Resource Control**: Usage limitations and quota management
|
||||||
|
6. **Technical Organization**: Based on infrastructure constraints
|
||||||
|
|
||||||
|
### Subaccounts
|
||||||
|
|
||||||
|
Subaccounts are individual operational units where applications run and services are consumed:
|
||||||
|
- Deployed in exactly one region
|
||||||
|
- Can enable multiple runtime environments
|
||||||
|
- Support dedicated identity provider configuration
|
||||||
|
- Independent quota and user management
|
||||||
|
|
||||||
|
### Labels
|
||||||
|
|
||||||
|
Labels are user-defined tags for organizing directories, subaccounts, instances, and subscriptions:
|
||||||
|
- Landscape designations: Dev, Test, Prod
|
||||||
|
- Departments: HR, IT, Finance, Sales
|
||||||
|
- Cost center codes
|
||||||
|
- Custom tags: "Flagged for deletion", "Important"
|
||||||
|
|
||||||
|
**Best Practice**: Use directories as primary structure, labels for virtual grouping and reporting.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Model Templates
|
||||||
|
|
||||||
|
### Template 1: Directories Per Functional Area
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Directory: HR
|
||||||
|
│ ├── Subaccount: hr-development
|
||||||
|
│ │ └── Identity Provider: Corporate IdP
|
||||||
|
│ ├── Subaccount: hr-test
|
||||||
|
│ │ └── Identity Provider: Corporate IdP
|
||||||
|
│ └── Subaccount: hr-production
|
||||||
|
│ └── Identity Provider: Corporate IdP (hardened)
|
||||||
|
├── Directory: Sales
|
||||||
|
│ ├── Subaccount: sales-development
|
||||||
|
│ ├── Subaccount: sales-test
|
||||||
|
│ └── Subaccount: sales-production
|
||||||
|
└── Directory: IT Services
|
||||||
|
├── Subaccount: shared-services-dev
|
||||||
|
├── Subaccount: shared-services-test
|
||||||
|
└── Subaccount: shared-services-prod
|
||||||
|
```
|
||||||
|
|
||||||
|
**Benefits**:
|
||||||
|
- Clear functional separation
|
||||||
|
- Independent entitlement management per directory
|
||||||
|
- Easy cost allocation by department
|
||||||
|
|
||||||
|
### Template 2: Directories Per Location
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Directory: Europe
|
||||||
|
│ ├── Labels: Region=EU, Compliance=GDPR
|
||||||
|
│ ├── Subaccount: eu-development (Frankfurt)
|
||||||
|
│ ├── Subaccount: eu-test (Frankfurt)
|
||||||
|
│ └── Subaccount: eu-production (Frankfurt)
|
||||||
|
├── Directory: North America
|
||||||
|
│ ├── Labels: Region=NA
|
||||||
|
│ ├── Subaccount: na-development (Virginia)
|
||||||
|
│ ├── Subaccount: na-test (Virginia)
|
||||||
|
│ └── Subaccount: na-production (Virginia)
|
||||||
|
└── Directory: APAC
|
||||||
|
├── Labels: Region=APAC
|
||||||
|
├── Subaccount: apac-development (Singapore)
|
||||||
|
├── Subaccount: apac-test (Singapore)
|
||||||
|
└── Subaccount: apac-production (Singapore)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Benefits**:
|
||||||
|
- Regulatory compliance (data residency)
|
||||||
|
- Performance optimization (proximity to users)
|
||||||
|
- Regional legal requirements
|
||||||
|
|
||||||
|
### Template 3: Directories Per Subsidiary
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Directory: ACME Corp
|
||||||
|
│ ├── Labels: CostCenter=CC001, Owner=John
|
||||||
|
│ └── Subaccounts: acme-dev, acme-test, acme-prod
|
||||||
|
├── Directory: ACME Manufacturing
|
||||||
|
│ ├── Labels: CostCenter=CC002, Owner=Jane
|
||||||
|
│ └── Subaccounts: acme-mfg-dev, acme-mfg-test, acme-mfg-prod
|
||||||
|
└── Directory: ACME Services
|
||||||
|
├── Labels: CostCenter=CC003, Owner=Bob
|
||||||
|
└── Subaccounts: acme-svc-dev, acme-svc-test, acme-svc-prod
|
||||||
|
```
|
||||||
|
|
||||||
|
**Benefits**:
|
||||||
|
- Clear subsidiary boundaries
|
||||||
|
- Cost allocation to legal entities
|
||||||
|
- Independent ownership and management
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Simple Subaccount Model (Without Directories)
|
||||||
|
|
||||||
|
For initial implementations or smaller organizations:
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Subaccount: Development
|
||||||
|
│ ├── Labels: Stage=Dev, CostCenter=IT
|
||||||
|
│ └── Identity Provider: Corporate IdP
|
||||||
|
├── Subaccount: Test
|
||||||
|
│ ├── Labels: Stage=Test, CostCenter=IT
|
||||||
|
│ └── Identity Provider: Corporate IdP
|
||||||
|
└── Subaccount: Production
|
||||||
|
├── Labels: Stage=Prod, CostCenter=IT
|
||||||
|
└── Identity Provider: Corporate IdP (hardened)
|
||||||
|
```
|
||||||
|
|
||||||
|
**When to Use**:
|
||||||
|
- Less than 3 projects
|
||||||
|
- Single team
|
||||||
|
- Initial BTP adoption
|
||||||
|
|
||||||
|
**Upgrade Path**: Transition to directory model when exceeding 3 subaccounts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Specialized Subaccount Patterns
|
||||||
|
|
||||||
|
### Separate API Management Subaccounts
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Directory: Central IT Tools
|
||||||
|
│ ├── Subaccount: api-management-dev
|
||||||
|
│ ├── Subaccount: api-management-test
|
||||||
|
│ └── Subaccount: api-management-prod
|
||||||
|
├── Directory: Shared Data
|
||||||
|
│ ├── Subaccount: hana-dev-test (shared HANA Cloud)
|
||||||
|
│ └── Subaccount: hana-production
|
||||||
|
└── Directory: Projects
|
||||||
|
├── Subaccount: project-a-dev
|
||||||
|
├── Subaccount: project-a-test
|
||||||
|
├── Subaccount: project-a-prod
|
||||||
|
└── ... (consume APIs via destinations)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Benefits**:
|
||||||
|
- Centralized API governance
|
||||||
|
- Shared database costs
|
||||||
|
- Rapid scaling with API-based connections
|
||||||
|
|
||||||
|
### Large Project Separation
|
||||||
|
|
||||||
|
```
|
||||||
|
Global Account
|
||||||
|
├── Subaccount: development (standard)
|
||||||
|
├── Subaccount: test (standard)
|
||||||
|
├── Subaccount: production (standard)
|
||||||
|
└── Subaccount: project-x-all-stages
|
||||||
|
└── (Completely separated support and operations model)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Use When**:
|
||||||
|
- Project requires isolated operations
|
||||||
|
- Different SLA requirements
|
||||||
|
- Separate support processes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cloud Foundry Staging Details
|
||||||
|
|
||||||
|
### Subaccount-Org Relationship
|
||||||
|
|
||||||
|
When Cloud Foundry is enabled, the system automatically creates a corresponding CF org with a 1:1 relationship:
|
||||||
|
|
||||||
|
```
|
||||||
|
Subaccount: hr-development
|
||||||
|
└── CF Org: acme-hr-development (auto-created)
|
||||||
|
├── Space: recruiting
|
||||||
|
├── Space: payroll
|
||||||
|
└── Space: benefits
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration Capabilities Comparison
|
||||||
|
|
||||||
|
| Feature | Subaccount Level | Space Level |
|
||||||
|
|---------|------------------|-------------|
|
||||||
|
| Business user groups | Yes | No |
|
||||||
|
| Cloud Connector tunnels | Yes | No |
|
||||||
|
| Roles and trust settings | Yes | No |
|
||||||
|
| Quota assignment | Yes (mandatory) | Yes (optional) |
|
||||||
|
|
||||||
|
### Data Segregation
|
||||||
|
|
||||||
|
Data access is controlled at subaccount level, not application or space level:
|
||||||
|
- Services consume messages from ALL applications within a subaccount
|
||||||
|
- Use separate subaccounts to restrict cross-application visibility
|
||||||
|
- Spaces are for organization when dedicated user management isn't required
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma Staging Details
|
||||||
|
|
||||||
|
### Subaccount-Cluster Relationship
|
||||||
|
|
||||||
|
Each subaccount provisions exactly one Kubernetes cluster:
|
||||||
|
|
||||||
|
```
|
||||||
|
Subaccount: platform-dev-test
|
||||||
|
└── Kyma Cluster (auto-provisioned)
|
||||||
|
├── Namespace: hr-dev
|
||||||
|
├── Namespace: hr-test
|
||||||
|
├── Namespace: sales-dev
|
||||||
|
└── Namespace: sales-test
|
||||||
|
|
||||||
|
Subaccount: platform-production
|
||||||
|
└── Kyma Cluster
|
||||||
|
├── Namespace: hr
|
||||||
|
└── Namespace: sales
|
||||||
|
```
|
||||||
|
|
||||||
|
### Subaccounts vs Namespaces Decision Framework
|
||||||
|
|
||||||
|
**Use Separate Subaccounts When**:
|
||||||
|
- Data access isolation required
|
||||||
|
- Different network connectivity needs
|
||||||
|
- Dedicated user management necessary
|
||||||
|
- Separate billing/cost tracking required
|
||||||
|
- Ingress traffic isolation needed
|
||||||
|
|
||||||
|
**Use Namespaces When**:
|
||||||
|
- Structuring within cluster sufficient
|
||||||
|
- Trust exists between teams
|
||||||
|
- Cost efficiency priority
|
||||||
|
- Development/testing environments
|
||||||
|
|
||||||
|
### Configuration Comparison
|
||||||
|
|
||||||
|
| Function | Subaccount | Namespace |
|
||||||
|
|----------|-----------|-----------|
|
||||||
|
| User group configuration | Yes | Yes |
|
||||||
|
| Cloud Connector tunnel | Yes | No |
|
||||||
|
| Roles/trust setup | Yes | Yes |
|
||||||
|
| Resource quotas | Yes (mandatory) | Limited |
|
||||||
|
| Cost monitoring | Yes | No |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Model Setup Checklist
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- [ ] Review SAP Cloud Identity Services onboarding guide
|
||||||
|
- [ ] Assess organizational needs for account model selection
|
||||||
|
- [ ] Test hierarchy with pilot project managers
|
||||||
|
- [ ] Familiarize teams with administration tools
|
||||||
|
|
||||||
|
### Ownership Structure
|
||||||
|
|
||||||
|
| Level | Owner |
|
||||||
|
|-------|-------|
|
||||||
|
| Global Account | Platform Engineering Team/CoE |
|
||||||
|
| Directories | Designated owners with role collections |
|
||||||
|
| Subaccounts | Designated owners with role collections |
|
||||||
|
| Spaces/Namespaces | Development units |
|
||||||
|
|
||||||
|
### Directory Template Requirements
|
||||||
|
|
||||||
|
When creating new directories, document:
|
||||||
|
- Name (following naming guidelines)
|
||||||
|
- Minimum two owners
|
||||||
|
- Description of developer audience and applications
|
||||||
|
- Cost center allocation
|
||||||
|
- Enrollment procedures
|
||||||
|
|
||||||
|
### Rules to Define
|
||||||
|
|
||||||
|
1. Directory creation criteria
|
||||||
|
2. Naming conventions (see naming guide)
|
||||||
|
3. Labels and values for reporting
|
||||||
|
4. Quota limitations per directory/subaccount
|
||||||
|
5. Entitlement distribution rules
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Naming Convention Details
|
||||||
|
|
||||||
|
### Character Restrictions
|
||||||
|
|
||||||
|
- Use lowercase letters and hyphens
|
||||||
|
- Avoid spaces and underscores (except subaccounts)
|
||||||
|
- Maximum 63 characters for URL-related entities:
|
||||||
|
- Subdomains
|
||||||
|
- CF orgs and spaces
|
||||||
|
- Kyma clusters and namespaces
|
||||||
|
|
||||||
|
### Company Identification
|
||||||
|
|
||||||
|
| Entity | Include Company Name? |
|
||||||
|
|--------|----------------------|
|
||||||
|
| Subaccount name | No |
|
||||||
|
| Subdomain | Yes |
|
||||||
|
| CF Org | Yes |
|
||||||
|
| Directory | Depends on use case |
|
||||||
|
|
||||||
|
### Cloud Foundry Naming Example
|
||||||
|
|
||||||
|
| Entity | Dev | Test | Prod |
|
||||||
|
|--------|-----|------|------|
|
||||||
|
| Subaccount | HR Development | HR Test | HR Production |
|
||||||
|
| Subdomain | `acme-hr-dev` | `acme-hr-test` | `acme-hr-prod` |
|
||||||
|
| CF Org | `acme-hr-dev` | `acme-hr-test` | `acme-hr-prod` |
|
||||||
|
| Space | `recruiting` | `recruiting` | `recruiting` |
|
||||||
|
|
||||||
|
### Kyma Naming Example
|
||||||
|
|
||||||
|
| Entity | Dev/Test | Prod |
|
||||||
|
|--------|----------|------|
|
||||||
|
| Subaccount | Platform Dev Test | Platform Production |
|
||||||
|
| Subdomain | `acme-platform-devtest` | `acme-platform-prod` |
|
||||||
|
| Cluster | `acme-platform-devtest` | `acme-platform-prod` |
|
||||||
|
| Namespace | `hr-dev`, `hr-test` | `hr` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SaaS Application Considerations
|
||||||
|
|
||||||
|
A SaaS application can only be used once within a subaccount. This necessitates:
|
||||||
|
- Separate subaccounts per functional area using same SaaS
|
||||||
|
- Or using CF spaces with HTML5 repository for central Fiori Launchpad
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-your-account-model-2db81f4.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-your-account-model-2db81f4.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/account-model-with-directories-and-subaccounts-b5a6b58.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/account-model-with-directories-and-subaccounts-b5a6b58.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/account-model-with-subaccounts-049d331.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/account-model-with-subaccounts-049d331.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/naming-conventions-for-sap-btp-accounts-5302ea4.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/naming-conventions-for-sap-btp-accounts-5302ea4.md)
|
||||||
234
references/ai-development-best-practices.md
Normal file
234
references/ai-development-best-practices.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# AI Development Best Practices on SAP BTP
|
||||||
|
|
||||||
|
Comprehensive guide for implementing AI solutions on SAP Business Technology Platform using SAP AI Core and related services.
|
||||||
|
|
||||||
|
**Source Repository**: [SAP-samples/sap-btp-ai-best-practices](https://github.com/SAP-samples/sap-btp-ai-best-practices)
|
||||||
|
**Documentation Portal**: [https://btp-ai-bp.docs.sap/](https://btp-ai-bp.docs.sap/)
|
||||||
|
**Project Catalog**: [AI4U Project Catalog](https://ai4u-website.cfapps.eu10-004.hana.ondemand.com/project-catalog)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
SAP BTP provides AI capabilities through SAP AI Core, enabling both **Generative AI** (LLMs, chatbots, RAG) and **Narrow AI** (classical ML, predictions) implementations.
|
||||||
|
|
||||||
|
**Requirements**:
|
||||||
|
- SAP Business Technology Platform account
|
||||||
|
- Access to SAP AI Core service
|
||||||
|
- Code examples available in: TypeScript, Python, Java, CAP
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Generative AI Best Practices
|
||||||
|
|
||||||
|
### 1. Secure Access to AI Models
|
||||||
|
|
||||||
|
Access generative AI models through SAP AI Core with proper authentication:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Python example - Secure model access
|
||||||
|
from gen_ai_hub.proxy.native.openai import OpenAI
|
||||||
|
|
||||||
|
client = OpenAI()
|
||||||
|
response = client.chat.completions.create(
|
||||||
|
model="gpt-4",
|
||||||
|
messages=[{"role": "user", "content": "Hello, how can you help?"}]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// TypeScript example
|
||||||
|
import { OpenAI } from '@sap-ai-sdk/gen-ai-hub';
|
||||||
|
|
||||||
|
const client = new OpenAI();
|
||||||
|
const response = await client.chat.completions.create({
|
||||||
|
model: 'gpt-4',
|
||||||
|
messages: [{ role: 'user', content: 'Hello, how can you help?' }]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Considerations**:
|
||||||
|
- Use SAP AI Core service keys for authentication
|
||||||
|
- Configure environment variables from `.env` files
|
||||||
|
- Never hardcode credentials in application code
|
||||||
|
|
||||||
|
### 2. Prompt Template Patterns
|
||||||
|
|
||||||
|
Create effective, reusable prompts:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Prompt template pattern
|
||||||
|
SYSTEM_PROMPT = """You are a helpful assistant for {domain}.
|
||||||
|
Your task is to {task_description}.
|
||||||
|
Always respond in {language}."""
|
||||||
|
|
||||||
|
USER_PROMPT = """
|
||||||
|
Context: {context}
|
||||||
|
Question: {user_question}
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
|
||||||
|
**Best Practices**:
|
||||||
|
- Separate system and user prompts
|
||||||
|
- Use placeholders for dynamic content
|
||||||
|
- Include clear task descriptions
|
||||||
|
- Specify output format expectations
|
||||||
|
|
||||||
|
### 3. Retrieval-Augmented Generation (RAG)
|
||||||
|
|
||||||
|
Implement RAG systems for grounding LLM responses with enterprise data:
|
||||||
|
|
||||||
|
**Architecture**:
|
||||||
|
```
|
||||||
|
Documents → Chunking → Embeddings → Vector Store
|
||||||
|
↓
|
||||||
|
User Query → Embedding → Similarity Search → Context
|
||||||
|
↓
|
||||||
|
LLM ← Context + Query → Response
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Components**:
|
||||||
|
- Document chunking strategies
|
||||||
|
- Vector embeddings (SAP AI Core embedding models)
|
||||||
|
- Vector database (SAP HANA Cloud Vector Engine)
|
||||||
|
- Context window management
|
||||||
|
|
||||||
|
### 4. Content Filtering
|
||||||
|
|
||||||
|
Implement content safety for AI-generated outputs:
|
||||||
|
|
||||||
|
- Configure content filtering policies in SAP AI Core
|
||||||
|
- Implement input validation before sending to models
|
||||||
|
- Add output filtering for inappropriate content
|
||||||
|
- Log and monitor filtered content for analysis
|
||||||
|
|
||||||
|
### 5. PII Data Masking
|
||||||
|
|
||||||
|
Protect personally identifiable information:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Data masking pattern
|
||||||
|
def mask_pii(text: str) -> str:
|
||||||
|
"""Mask PII before sending to LLM"""
|
||||||
|
# Replace emails, phone numbers, SSNs
|
||||||
|
masked = re.sub(r'\b[\w.-]+@[\w.-]+\.\w+\b', '[EMAIL]', text)
|
||||||
|
masked = re.sub(r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b', '[PHONE]', masked)
|
||||||
|
return masked
|
||||||
|
```
|
||||||
|
|
||||||
|
**Best Practices**:
|
||||||
|
- Mask PII before sending to external models
|
||||||
|
- Use SAP Data Privacy Integration where available
|
||||||
|
- Implement reversible masking for response reconstruction
|
||||||
|
- Audit PII handling in AI workflows
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Narrow AI Best Practices
|
||||||
|
|
||||||
|
### Regression Models
|
||||||
|
|
||||||
|
Classical ML for predictions (sales forecasting, demand planning):
|
||||||
|
|
||||||
|
- Use SAP AI Core for model training and deployment
|
||||||
|
- Implement proper feature engineering
|
||||||
|
- Validate models with held-out test data
|
||||||
|
- Monitor model drift in production
|
||||||
|
|
||||||
|
### Anomaly Detection
|
||||||
|
|
||||||
|
Detect outliers in business data:
|
||||||
|
|
||||||
|
**Use Cases**:
|
||||||
|
- Financial transaction monitoring
|
||||||
|
- Quality control in manufacturing
|
||||||
|
- Log analysis for system health
|
||||||
|
- Document outlier detection
|
||||||
|
|
||||||
|
**Approaches**:
|
||||||
|
- Statistical methods (z-score, IQR)
|
||||||
|
- Machine learning (Isolation Forest, Autoencoders)
|
||||||
|
- Time-series anomaly detection
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AI Services Best Practices
|
||||||
|
|
||||||
|
### SAP Document AI
|
||||||
|
|
||||||
|
Extract information from documents:
|
||||||
|
|
||||||
|
- Invoice processing
|
||||||
|
- Purchase order extraction
|
||||||
|
- Contract analysis
|
||||||
|
- Form recognition
|
||||||
|
|
||||||
|
### SAP Translation Hub
|
||||||
|
|
||||||
|
Multilingual content translation:
|
||||||
|
|
||||||
|
- Configure language pairs
|
||||||
|
- Handle domain-specific terminology
|
||||||
|
- Implement async translation for large documents
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Use Cases Catalog
|
||||||
|
|
||||||
|
The repository includes 20+ end-to-end implementations:
|
||||||
|
|
||||||
|
| Category | Use Case | Description |
|
||||||
|
|----------|----------|-------------|
|
||||||
|
| **Chatbots & Agents** | agentic-chatbot | Multi-tool AI agent implementation |
|
||||||
|
| | email-agent | Automated email processing and response |
|
||||||
|
| | post-sales-chatbot | Customer support automation |
|
||||||
|
| **Document Processing** | ai-pdf-information-extraction | Extract data from PDF documents |
|
||||||
|
| | diagram-to-bpmn | Convert diagrams to BPMN format |
|
||||||
|
| | sales-order-extractor | Extract sales order information |
|
||||||
|
| | rfqx-doc-analysis-utilities | RFQ document analysis |
|
||||||
|
| **Procurement** | intelligent-procurement-assistant | AI-powered procurement workflows |
|
||||||
|
| | intelligent-negotiation-assistant | Negotiation support with AI |
|
||||||
|
| | vendor-selection-optimization | Optimize vendor selection |
|
||||||
|
| **Analytics** | anomaly-detection | Detect anomalies in business data |
|
||||||
|
| | ai-log-analyzer | Analyze system logs with AI |
|
||||||
|
| | customer-credit-check | AI-assisted credit evaluation |
|
||||||
|
| | document-outlier-detection | Find outlier documents |
|
||||||
|
| **Business Process** | ai-powered-email-cockpit | Email classification and routing |
|
||||||
|
| | utilities-tariff-mapping-cockpit | Tariff mapping automation |
|
||||||
|
| | touchless-transactions-ai-agent | Automated GR/Invoice workflows |
|
||||||
|
| | product-catalog-search | AI-enhanced product search |
|
||||||
|
| | ai-capability-matcher | Match capabilities with AI |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository
|
||||||
|
git clone [https://github.com/SAP-samples/sap-btp-ai-best-practices.git](https://github.com/SAP-samples/sap-btp-ai-best-practices.git)
|
||||||
|
cd sap-btp-ai-best-practices
|
||||||
|
|
||||||
|
# Navigate to a specific best practice
|
||||||
|
cd best-practices/generative-ai/access-to-ai-models/python
|
||||||
|
pip install -r requirements.txt
|
||||||
|
cp .env.example .env
|
||||||
|
# Edit .env with your SAP AI Core service key
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
| Resource | Link |
|
||||||
|
|----------|------|
|
||||||
|
| **Documentation Portal** | [https://btp-ai-bp.docs.sap/](https://btp-ai-bp.docs.sap/) |
|
||||||
|
| **GitHub Repository** | [https://github.com/SAP-samples/sap-btp-ai-best-practices](https://github.com/SAP-samples/sap-btp-ai-best-practices) |
|
||||||
|
| **Project Catalog** | [https://ai4u-website.cfapps.eu10-004.hana.ondemand.com/project-catalog](https://ai4u-website.cfapps.eu10-004.hana.ondemand.com/project-catalog) |
|
||||||
|
| **SAP AI Core Documentation** | [https://help.sap.com/docs/sap-ai-core](https://help.sap.com/docs/sap-ai-core) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**License**: Apache-2.0
|
||||||
|
**Last Updated**: 2025-11-22
|
||||||
|
**Repository**: [https://github.com/secondsky/sap-skills](https://github.com/secondsky/sap-skills)
|
||||||
439
references/deployment-and-delivery.md
Normal file
439
references/deployment-and-delivery.md
Normal file
@@ -0,0 +1,439 @@
|
|||||||
|
# SAP BTP Deployment and Delivery - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment Overview
|
||||||
|
|
||||||
|
After development, applications are deployed to TEST and PROD environments. The approach depends on organizational needs:
|
||||||
|
|
||||||
|
- **Simple applications**: Manual deployment acceptable
|
||||||
|
- **Enterprise settings**: Managed, automated delivery recommended
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment Methods by Runtime
|
||||||
|
|
||||||
|
### Cloud Foundry Environment
|
||||||
|
|
||||||
|
**Key Recommendation**: Archive all components into one package as a Multitarget Application (MTA) archive including a deployment descriptor.
|
||||||
|
|
||||||
|
#### Java Applications
|
||||||
|
|
||||||
|
Deploy via:
|
||||||
|
- SAP BTP cockpit
|
||||||
|
- Cloud Foundry CLI
|
||||||
|
- Multiple runtime and JVM options available
|
||||||
|
|
||||||
|
#### HTML5 Applications
|
||||||
|
|
||||||
|
Deploy via:
|
||||||
|
- SAP Business Application Studio
|
||||||
|
- Cloud Foundry CLI
|
||||||
|
- SAP BTP cockpit
|
||||||
|
|
||||||
|
#### Node.js Applications
|
||||||
|
|
||||||
|
Deploy via:
|
||||||
|
- SAP Business Application Studio
|
||||||
|
- Cloud Foundry CLI
|
||||||
|
|
||||||
|
#### SAP HANA XSA Applications
|
||||||
|
|
||||||
|
Deploy via:
|
||||||
|
- SAP HANA Deployment Infrastructure (HDI) in Business Application Studio
|
||||||
|
- Cloud Foundry CLI
|
||||||
|
|
||||||
|
#### Custom Buildpacks
|
||||||
|
|
||||||
|
Cloud Foundry supports "Bring Your Own Buildpack" for custom runtime needs.
|
||||||
|
|
||||||
|
### Neo Environment
|
||||||
|
|
||||||
|
Similar deployment options to Cloud Foundry with:
|
||||||
|
- SAP BTP cockpit
|
||||||
|
- Neo console client
|
||||||
|
|
||||||
|
### Kyma Environment
|
||||||
|
|
||||||
|
**Core Requirement**: Package applications in Linux Docker images.
|
||||||
|
|
||||||
|
**Options**:
|
||||||
|
- Standard Dockerfile
|
||||||
|
- Cloud Native Buildpacks
|
||||||
|
|
||||||
|
**Production Setup**:
|
||||||
|
- Use automation tools like SAP Continuous Integration and Delivery
|
||||||
|
- Deploy with Helm charts
|
||||||
|
- Sample GitHub repositories available for Java, Node.js, HTML5
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Delivery Options
|
||||||
|
|
||||||
|
### Enterprise Delivery Approach
|
||||||
|
|
||||||
|
A managed, automated delivery approach is recommended because it:
|
||||||
|
- Is less error-prone
|
||||||
|
- Creates repeatable outcomes
|
||||||
|
- Enables governance
|
||||||
|
- Provides central control over production propagation
|
||||||
|
|
||||||
|
### Delivery Options Matrix
|
||||||
|
|
||||||
|
| Content Type | CI/CD | Cloud Transport Mgmt | CTS+ |
|
||||||
|
|--------------|-------|---------------------|------|
|
||||||
|
| Development Content (Java, HTML5, CAP) | Recommended | Recommended | - |
|
||||||
|
| SAP Cloud Integration Content | In development | Recommended | - |
|
||||||
|
| SAP HANA Cloud Artifacts | Recommended | Recommended | - |
|
||||||
|
| SAP Build Work Zone | - | Recommended | - |
|
||||||
|
| Other App-Specific Content | - | Recommended | Recommended |
|
||||||
|
| Kyma-Based Apps | Recommended | - | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAP Continuous Integration and Delivery
|
||||||
|
|
||||||
|
### Solution Options
|
||||||
|
|
||||||
|
| Aspect | SAP CI/CD Service | Project "Piper" |
|
||||||
|
|--------|-------------------|-----------------|
|
||||||
|
| Expertise Required | Low | Medium-to-High |
|
||||||
|
| Flexibility | Medium | High |
|
||||||
|
| Infrastructure | Ready-to-use | Requires Jenkins (or Cx Server) |
|
||||||
|
| Support | Direct SAP support | Open-source community |
|
||||||
|
| Best For | Typical SAP customers | Advanced customization |
|
||||||
|
|
||||||
|
### SAP CI/CD Service Features
|
||||||
|
|
||||||
|
- Pre-configured pipelines for SAP technologies
|
||||||
|
- Built-in code quality checks
|
||||||
|
- Automated testing integration
|
||||||
|
- Direct deployment to SAP BTP
|
||||||
|
|
||||||
|
### Project "Piper"
|
||||||
|
|
||||||
|
- Open-source CI/CD library
|
||||||
|
- Extensive customization options
|
||||||
|
- Jenkins-based pipelines
|
||||||
|
- GitHub: [https://github.com/SAP/jenkins-library](https://github.com/SAP/jenkins-library)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Transport Management
|
||||||
|
|
||||||
|
### SAP Cloud Transport Management
|
||||||
|
|
||||||
|
Centralizes handling of development content archives across subaccounts and global accounts.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- MTA file transport
|
||||||
|
- Application-specific content transport
|
||||||
|
- Cross-global account transport
|
||||||
|
- Integration with change management tools
|
||||||
|
|
||||||
|
**Recommendation**: Use for all SAP BTP content regardless of format.
|
||||||
|
|
||||||
|
### CTS+ (Change and Transport System)
|
||||||
|
|
||||||
|
- Operates on-premise within ABAP systems
|
||||||
|
- Supports SAP BTP artifacts packaged as MTA archives
|
||||||
|
- Integration with SAP Solution Manager
|
||||||
|
|
||||||
|
**Direction**: SAP Cloud Transport Management is the future-proof choice.
|
||||||
|
|
||||||
|
### Combined CI/CD and Transport Approach
|
||||||
|
|
||||||
|
```
|
||||||
|
Developer Commit
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────────┐
|
||||||
|
│ CI Pipeline │ (Build, Test, Deploy to Dev)
|
||||||
|
└────────┬─────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────────────────────────┐
|
||||||
|
│ SAP Cloud Transport Management │
|
||||||
|
│ │
|
||||||
|
│ Dev ──► Test ──► Production │
|
||||||
|
│ (Governance-defined pathways) │
|
||||||
|
└──────────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Optional Integration
|
||||||
|
with SAP Cloud ALM or
|
||||||
|
SAP Solution Manager
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Change Management Integration
|
||||||
|
|
||||||
|
### SAP Cloud ALM Integration
|
||||||
|
|
||||||
|
- Change and deployment management
|
||||||
|
- Centralized landscape definition
|
||||||
|
- Access control configuration
|
||||||
|
- Synchronized transports
|
||||||
|
|
||||||
|
### SAP Solution Manager Integration
|
||||||
|
|
||||||
|
- Minimum version: 7.2 SP10
|
||||||
|
- Hybrid scenario support (on-premise + cloud)
|
||||||
|
- Parallel operation with CTS+ and Cloud Transport Management
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Manual Delivery Methods
|
||||||
|
|
||||||
|
For simpler scenarios:
|
||||||
|
|
||||||
|
1. **Direct IDE Deployment**:
|
||||||
|
- Deploy to multiple subaccounts via cockpit or CLI
|
||||||
|
|
||||||
|
2. **Solution Export Wizard** (Neo):
|
||||||
|
- Model solutions as MTA files
|
||||||
|
- Export for transport
|
||||||
|
|
||||||
|
3. **Git Repository Synchronization**:
|
||||||
|
- For HTML5 applications
|
||||||
|
- Manual deployment after sync
|
||||||
|
|
||||||
|
4. **SAP HANA XS Application Lifecycle Management**:
|
||||||
|
- Transport routes between systems
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Multitarget Application (MTA) Archives
|
||||||
|
|
||||||
|
### Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
my-app.mtar
|
||||||
|
├── mta.yaml (deployment descriptor)
|
||||||
|
├── app-module-1/
|
||||||
|
├── app-module-2/
|
||||||
|
├── db-module/
|
||||||
|
└── srv-module/
|
||||||
|
```
|
||||||
|
|
||||||
|
### mta.yaml Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
_schema-version: "3.1"
|
||||||
|
ID: my-mta-app
|
||||||
|
version: 1.0.0
|
||||||
|
|
||||||
|
modules:
|
||||||
|
- name: my-srv
|
||||||
|
type: nodejs
|
||||||
|
path: srv
|
||||||
|
provides:
|
||||||
|
- name: srv-api
|
||||||
|
properties:
|
||||||
|
url: ${default-url}
|
||||||
|
requires:
|
||||||
|
- name: my-db
|
||||||
|
- name: my-auth
|
||||||
|
|
||||||
|
- name: my-db-deployer
|
||||||
|
type: hdb
|
||||||
|
path: db
|
||||||
|
requires:
|
||||||
|
- name: my-db
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- name: my-db
|
||||||
|
type: com.sap.xs.hdi-container
|
||||||
|
- name: my-auth
|
||||||
|
type: org.cloudfoundry.managed-service
|
||||||
|
parameters:
|
||||||
|
service: xsuaa
|
||||||
|
service-plan: application
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building MTAs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install MTA Build Tool
|
||||||
|
npm install -g mbt
|
||||||
|
|
||||||
|
# Build MTA archive
|
||||||
|
mbt build
|
||||||
|
|
||||||
|
# Result: mta_archives/my-app_1.0.0.mtar
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma Deployment Details
|
||||||
|
|
||||||
|
### Docker Image Creation
|
||||||
|
|
||||||
|
**Standard Dockerfile**:
|
||||||
|
```dockerfile
|
||||||
|
FROM node:18-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm ci --only=production
|
||||||
|
COPY . .
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["npm", "start"]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cloud Native Buildpacks**:
|
||||||
|
```bash
|
||||||
|
# Using pack CLI
|
||||||
|
pack build my-app --builder paketobuildpacks/builder:base
|
||||||
|
```
|
||||||
|
|
||||||
|
### Helm Chart Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
my-app/
|
||||||
|
├── Chart.yaml
|
||||||
|
├── values.yaml
|
||||||
|
├── templates/
|
||||||
|
│ ├── deployment.yaml
|
||||||
|
│ ├── service.yaml
|
||||||
|
│ ├── ingress.yaml
|
||||||
|
│ └── configmap.yaml
|
||||||
|
└── charts/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deployment Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Deploy with Helm
|
||||||
|
helm upgrade --install my-app ./my-app \
|
||||||
|
--namespace my-namespace \
|
||||||
|
--set image.tag=1.0.0
|
||||||
|
|
||||||
|
# Or use kubectl directly
|
||||||
|
kubectl apply -f k8s/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CI/CD Pipeline Example
|
||||||
|
|
||||||
|
### SAP CI/CD Service Configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# .pipeline/config.yml
|
||||||
|
general:
|
||||||
|
buildTool: 'mta'
|
||||||
|
|
||||||
|
stages:
|
||||||
|
Build:
|
||||||
|
mtaBuild: true
|
||||||
|
|
||||||
|
Additional Unit Tests:
|
||||||
|
npmExecuteScripts:
|
||||||
|
- 'test'
|
||||||
|
|
||||||
|
Acceptance:
|
||||||
|
cloudFoundryDeploy:
|
||||||
|
deployTool: 'mtaDeployPlugin'
|
||||||
|
deployType: 'standard'
|
||||||
|
|
||||||
|
Release:
|
||||||
|
cloudFoundryDeploy:
|
||||||
|
deployTool: 'mtaDeployPlugin'
|
||||||
|
deployType: 'standard'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Jenkins Pipeline (Project Piper)
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
@Library('piper-lib-os') _
|
||||||
|
|
||||||
|
node {
|
||||||
|
stage('Init') {
|
||||||
|
checkout scm
|
||||||
|
setupCommonPipelineEnvironment script: this
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
mtaBuild script: this
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Deploy') {
|
||||||
|
cloudFoundryDeploy script: this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Transport Landscape Configuration
|
||||||
|
|
||||||
|
### Defining Transport Routes
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ SAP Cloud Transport Management │
|
||||||
|
├─────────────────────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ Node: Development │
|
||||||
|
│ ├── Import Queue │
|
||||||
|
│ └── Forward to: Test │
|
||||||
|
│ │
|
||||||
|
│ Node: Test │
|
||||||
|
│ ├── Import Queue │
|
||||||
|
│ └── Forward to: Production │
|
||||||
|
│ │
|
||||||
|
│ Node: Production │
|
||||||
|
│ └── Import Queue │
|
||||||
|
│ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Upload to Transport Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using Cloud Transport Management API
|
||||||
|
curl -X POST "[https://[ctms-url]/v2/files/upload"](https://[ctms-url]/v2/files/upload") \
|
||||||
|
-H "Authorization: Bearer $TOKEN" \
|
||||||
|
-F "file=@my-app.mtar"
|
||||||
|
|
||||||
|
# Create transport request
|
||||||
|
curl -X POST "[https://[ctms-url]/v2/nodes/[node-id]/transportRequests"](https://[ctms-url]/v2/nodes/[node-id]/transportRequests") \
|
||||||
|
-H "Authorization: Bearer $TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"fileId": "[file-id]", "description": "Deploy version 1.0.0"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Best Practices Summary
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
|
||||||
|
1. Use MTA archives for multi-component applications
|
||||||
|
2. Containerize applications for Kyma with proper Docker images
|
||||||
|
3. Implement proper health checks and probes
|
||||||
|
4. Use environment-specific configuration
|
||||||
|
|
||||||
|
### Delivery
|
||||||
|
|
||||||
|
1. Combine CI/CD with Cloud Transport Management
|
||||||
|
2. Automate testing at every stage
|
||||||
|
3. Implement proper approvals for production
|
||||||
|
4. Maintain audit trails for compliance
|
||||||
|
|
||||||
|
### Governance
|
||||||
|
|
||||||
|
1. Define clear transport routes
|
||||||
|
2. Implement approval workflows
|
||||||
|
3. Restrict who can deploy to production
|
||||||
|
4. Track all changes through transport requests
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-and-deliver-5972cdb.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-and-deliver-5972cdb.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploying-applications-866ab13.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploying-applications-866ab13.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/delivering-applications-b39bae3.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/delivering-applications-b39bae3.md)
|
||||||
392
references/failover-and-resilience.md
Normal file
392
references/failover-and-resilience.md
Normal file
@@ -0,0 +1,392 @@
|
|||||||
|
# SAP BTP Failover and Resilience - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## High Availability Overview
|
||||||
|
|
||||||
|
SAP BTP applications can achieve high availability through multi-region deployment with intelligent traffic routing. This eliminates single points of failure and addresses latency concerns for global users.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Multi-Region Architecture
|
||||||
|
|
||||||
|
### Core Concept
|
||||||
|
|
||||||
|
```
|
||||||
|
Custom Domain URL
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ Load Balancer │
|
||||||
|
│ (Health Checks)│
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
┌────────────┴────────────┐
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ Region 1 │ │ Region 2 │
|
||||||
|
│ (Active) │ │ (Passive/Active)│
|
||||||
|
│ │ │ │
|
||||||
|
│ Subaccount A │ │ Subaccount B │
|
||||||
|
│ App Instance │ │ App Instance │
|
||||||
|
└─────────────────┘ └─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Benefits
|
||||||
|
|
||||||
|
- **Geographic Redundancy**: Regional outages don't interrupt service
|
||||||
|
- **Intelligent Routing**: Health checks direct traffic to operational instances
|
||||||
|
- **Unified Access**: Custom domain remains constant during failovers
|
||||||
|
- **Load Distribution**: Traffic balances across regions
|
||||||
|
- **Latency Optimization**: Route users to nearest healthy region
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Failover Scope
|
||||||
|
|
||||||
|
### Supported Application Types
|
||||||
|
|
||||||
|
The basic failover guidance applies to:
|
||||||
|
- SAPUI5 applications
|
||||||
|
- HTML5 applications
|
||||||
|
- Applications without data persistence
|
||||||
|
- Applications without in-memory caching
|
||||||
|
- Applications with data stored in on-premise back-end systems
|
||||||
|
|
||||||
|
**Note**: Applications with cloud-based persistence require additional considerations for data synchronization.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Four Core Failover Principles
|
||||||
|
|
||||||
|
### 1. Deploy Across Two Data Centers
|
||||||
|
|
||||||
|
**Configuration**: Active/Passive
|
||||||
|
|
||||||
|
- Primary data center receives normal traffic
|
||||||
|
- Secondary data center acts as standby
|
||||||
|
- Switch to secondary only during primary downtime
|
||||||
|
|
||||||
|
**Regional Selection Best Practices**:
|
||||||
|
- Choose regions near users and backend systems
|
||||||
|
- Example: Frankfurt and Amsterdam for European users
|
||||||
|
- Consider same region for performance
|
||||||
|
- Review data processing restrictions for cross-region deployment
|
||||||
|
|
||||||
|
**Legal Consideration**: Cross-region deployment may create data processing compliance issues. Review Data Protection and Privacy documentation before proceeding.
|
||||||
|
|
||||||
|
### 2. Keep Applications Synchronized
|
||||||
|
|
||||||
|
**Synchronization Options**:
|
||||||
|
|
||||||
|
| Method | Effort | Best For |
|
||||||
|
|--------|--------|----------|
|
||||||
|
| Manual | High | Infrequent updates |
|
||||||
|
| CI/CD Pipeline | Medium | Regular deployments |
|
||||||
|
| Solution Export + Transport Management | Medium | Neo environments |
|
||||||
|
|
||||||
|
#### Manual Synchronization
|
||||||
|
|
||||||
|
- Duplicate modifications across both data centers
|
||||||
|
- Mirror Git repositories
|
||||||
|
- Allows non-identical applications (reduced functionality in backup)
|
||||||
|
- Visual differentiation between primary and backup
|
||||||
|
|
||||||
|
#### CI/CD Pipeline Synchronization
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Pipeline deploys to both regions
|
||||||
|
stages:
|
||||||
|
- name: Build
|
||||||
|
steps:
|
||||||
|
- build_mta
|
||||||
|
|
||||||
|
- name: Deploy Primary
|
||||||
|
steps:
|
||||||
|
- deploy_to_region_1
|
||||||
|
|
||||||
|
- name: Deploy Secondary
|
||||||
|
steps:
|
||||||
|
- deploy_to_region_2
|
||||||
|
```
|
||||||
|
|
||||||
|
- Use Project "Piper" pipelines adapted for multi-deployment
|
||||||
|
- Parallel deployment to subaccounts in different regions
|
||||||
|
- Automatic consistency
|
||||||
|
|
||||||
|
#### Solution Export Wizard + Cloud Transport Management
|
||||||
|
|
||||||
|
1. Export changes as MTA archive from primary (Neo)
|
||||||
|
2. Import via Transport Management Service (Cloud Foundry)
|
||||||
|
3. Deploy to secondary data center
|
||||||
|
|
||||||
|
### 3. Define Failover Detection
|
||||||
|
|
||||||
|
**Detection Mechanisms**:
|
||||||
|
|
||||||
|
- Response timeout monitoring (e.g., 25 seconds max)
|
||||||
|
- HTTP status code checking (5xx errors)
|
||||||
|
- Health endpoint monitoring
|
||||||
|
|
||||||
|
**Implementation Options**:
|
||||||
|
- Manual code implementation
|
||||||
|
- Rule-based solutions (e.g., Akamai ION)
|
||||||
|
- Load balancer health checks
|
||||||
|
|
||||||
|
**Detection Behavior**:
|
||||||
|
- Monitor first HTTP request to application URL
|
||||||
|
- Ignore subsequent requests (prevent single resource failures triggering failover)
|
||||||
|
- Present HTML down page with failover link when detected
|
||||||
|
|
||||||
|
**Note**: In basic scenarios, "the failover itself is therefore manually performed by the user" via the down page link.
|
||||||
|
|
||||||
|
### 4. Plan for Failback
|
||||||
|
|
||||||
|
**Active/Active Setup**:
|
||||||
|
- Applications identical in both data centers
|
||||||
|
- Same functionality everywhere
|
||||||
|
- Failback automatic with next failover event
|
||||||
|
- Not mandatory to explicitly return to primary
|
||||||
|
|
||||||
|
**Active/Passive Setup**:
|
||||||
|
- Applications may differ between data centers
|
||||||
|
- Reduced functionality in backup acceptable
|
||||||
|
- Failback to primary is mandatory
|
||||||
|
- Must restore full functionality
|
||||||
|
|
||||||
|
**Recommended Failback Approach**:
|
||||||
|
- User-driven failback model
|
||||||
|
- Visual differentiation reminds users to switch back
|
||||||
|
- Allow transactions to complete without interruption
|
||||||
|
- Prioritize completion over automatic recovery speed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Multi-Region Reference Use Cases
|
||||||
|
|
||||||
|
### Available Implementations
|
||||||
|
|
||||||
|
| Scenario | Components | Resources |
|
||||||
|
|----------|------------|-----------|
|
||||||
|
| **SAP Build Work Zone + Azure Traffic Manager** | Work Zone, Azure | Blog post, GitHub, Discovery Center mission |
|
||||||
|
| **SAP Build Work Zone + Amazon Route 53** | Work Zone, AWS | Blog post, GitHub |
|
||||||
|
| **CAP Applications + SAP HANA Cloud** | CAP, HANA Cloud multi-zone | GitHub repository |
|
||||||
|
| **CAP Applications + Amazon Aurora** | CAP, Aurora read replica | GitHub repository |
|
||||||
|
| **SAP Cloud Integration + Azure Traffic Manager** | CPI, Azure | GitHub, Discovery Center |
|
||||||
|
|
||||||
|
### Architecture: SAP Build Work Zone + Azure Traffic Manager
|
||||||
|
|
||||||
|
```
|
||||||
|
User Request
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Azure Traffic Manager
|
||||||
|
(Priority-based routing)
|
||||||
|
│
|
||||||
|
├──► Primary Region (Priority 1)
|
||||||
|
│ └── SAP Build Work Zone Instance
|
||||||
|
│
|
||||||
|
└──► Secondary Region (Priority 2)
|
||||||
|
└── SAP Build Work Zone Instance (standby)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Architecture: CAP + HANA Cloud Multi-Zone
|
||||||
|
|
||||||
|
```
|
||||||
|
Application Load Balancer
|
||||||
|
│
|
||||||
|
┌────────┴────────┐
|
||||||
|
▼ ▼
|
||||||
|
CAP App (AZ1) CAP App (AZ2)
|
||||||
|
│ │
|
||||||
|
└────────┬────────┘
|
||||||
|
▼
|
||||||
|
SAP HANA Cloud
|
||||||
|
(Multi-zone replication)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Backup and Resilience
|
||||||
|
|
||||||
|
### SAP-Managed Backups
|
||||||
|
|
||||||
|
| Service | Backup Type | Retention | Notes |
|
||||||
|
|---------|-------------|-----------|-------|
|
||||||
|
| **SAP HANA Cloud** | Continuous | As configured | Database recovery supported |
|
||||||
|
| **PostgreSQL (Hyperscaler)** | Point-in-time | 14 days | Restore by creating new instance |
|
||||||
|
| **Redis** | None | N/A | No persistence support |
|
||||||
|
| **Object Store** | None | N/A | Use versioning for protection |
|
||||||
|
|
||||||
|
### Object Store Protection Mechanisms
|
||||||
|
|
||||||
|
- **Object Versioning**: Recover from accidental deletion
|
||||||
|
- **Expiration Rules**: Automatic version cleanup
|
||||||
|
- **Deletion Prevention**: AWS S3 buckets, Azure containers
|
||||||
|
|
||||||
|
### Runtime-Specific Backup Strategies
|
||||||
|
|
||||||
|
| Runtime | Strategy |
|
||||||
|
|---------|----------|
|
||||||
|
| **Cloud Foundry** | Multi-AZ replication within region |
|
||||||
|
| **Kyma** | Managed K8s snapshots (excludes volumes) |
|
||||||
|
| **Neo** | Cross-region data copies |
|
||||||
|
|
||||||
|
### Customer-Managed Backups
|
||||||
|
|
||||||
|
**Critical**: SAP doesn't manage backups of service configurations. You are responsible for backing up your service-specific configurations.
|
||||||
|
|
||||||
|
**Key Responsibilities**:
|
||||||
|
|
||||||
|
| Responsibility | Details |
|
||||||
|
|----------------|---------|
|
||||||
|
| **Self-Service Backup** | You must back up service configurations yourself |
|
||||||
|
| **Service Documentation Review** | Consult each service's documentation for backup capabilities |
|
||||||
|
| **Service Limitations Awareness** | Some services don't support user-specific configuration backups |
|
||||||
|
| **Risk Mitigation** | Backup frequency varies by service; prevents accidental data loss |
|
||||||
|
|
||||||
|
**Actions Required**:
|
||||||
|
1. Identify all SAP BTP services currently in use
|
||||||
|
2. Review service-specific backup documentation
|
||||||
|
3. Understand which services lack backup capabilities
|
||||||
|
4. Implement backup strategies for supported configurations
|
||||||
|
5. Plan accordingly for services without backup features
|
||||||
|
6. Ensure business continuity plans include config recovery
|
||||||
|
|
||||||
|
**Note**: If backup information is unavailable for a service, contact SAP support channels.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma Cluster Sharing and Isolation
|
||||||
|
|
||||||
|
### When to Share Clusters
|
||||||
|
|
||||||
|
**Recommended**:
|
||||||
|
- Small teams with modest resource needs
|
||||||
|
- Development and testing environments
|
||||||
|
- Non-critical workloads
|
||||||
|
- Teams with established trust
|
||||||
|
|
||||||
|
**Not Recommended**:
|
||||||
|
- Multiple external customers
|
||||||
|
- Production workloads with strict isolation
|
||||||
|
- Untrusted tenants
|
||||||
|
|
||||||
|
### Control Plane Isolation Strategies
|
||||||
|
|
||||||
|
| Strategy | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| **Namespaces** | Isolate API resources within cluster |
|
||||||
|
| **RBAC** | Manage permissions within namespaces |
|
||||||
|
| **Global Resources** | Admin-managed CRDs and global objects |
|
||||||
|
| **Policy Engines** | Gatekeeper, Kyverno for compliance |
|
||||||
|
| **Resource Quotas** | Set limits per tenant/namespace |
|
||||||
|
|
||||||
|
### Data Plane Isolation Strategies
|
||||||
|
|
||||||
|
| Strategy | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| **Network Policies** | Restrict inter-namespace traffic |
|
||||||
|
| **Centralized Observability** | Cluster-wide metrics tracking |
|
||||||
|
| **Service Mesh (Istio)** | mTLS, dedicated ingress per tenant |
|
||||||
|
|
||||||
|
### Sample Network Policy
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: deny-cross-namespace
|
||||||
|
namespace: tenant-a
|
||||||
|
spec:
|
||||||
|
podSelector: {}
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
name: tenant-a
|
||||||
|
egress:
|
||||||
|
- to:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
name: tenant-a
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Disaster Recovery Planning
|
||||||
|
|
||||||
|
### Recovery Time Objective (RTO)
|
||||||
|
|
||||||
|
Depends on:
|
||||||
|
- Failover detection speed
|
||||||
|
- Application synchronization lag
|
||||||
|
- User-driven vs automatic failover
|
||||||
|
|
||||||
|
### Recovery Point Objective (RPO)
|
||||||
|
|
||||||
|
Depends on:
|
||||||
|
- Synchronization frequency
|
||||||
|
- Data persistence strategy
|
||||||
|
- Backup retention periods
|
||||||
|
|
||||||
|
### DR Checklist
|
||||||
|
|
||||||
|
- [ ] Define RTO and RPO requirements
|
||||||
|
- [ ] Select multi-region architecture
|
||||||
|
- [ ] Implement application synchronization
|
||||||
|
- [ ] Configure failover detection
|
||||||
|
- [ ] Test failover procedures regularly
|
||||||
|
- [ ] Document failback process
|
||||||
|
- [ ] Train operations team
|
||||||
|
- [ ] Establish communication protocols
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resilient Application Development
|
||||||
|
|
||||||
|
### Design Principles
|
||||||
|
|
||||||
|
1. **Statelessness**: Minimize in-memory state
|
||||||
|
2. **Idempotency**: Safe to retry operations
|
||||||
|
3. **Circuit Breakers**: Graceful degradation
|
||||||
|
4. **Health Endpoints**: Enable monitoring
|
||||||
|
5. **Graceful Shutdown**: Complete in-flight requests
|
||||||
|
|
||||||
|
### Health Endpoint Example
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
app.get('/health', (req, res) => {
|
||||||
|
const health = {
|
||||||
|
status: 'UP',
|
||||||
|
checks: {
|
||||||
|
database: checkDatabase(),
|
||||||
|
cache: checkCache(),
|
||||||
|
externalApi: checkExternalApi()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const allHealthy = Object.values(health.checks)
|
||||||
|
.every(check => check.status === 'UP');
|
||||||
|
|
||||||
|
res.status(allHealthy ? 200 : 503).json(health);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/planning-failover-on-sap-btp-8c46464.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/planning-failover-on-sap-btp-8c46464.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/implementing-failover-df972c5.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/implementing-failover-df972c5.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-your-application-in-two-data-centers-61d08d8.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-your-application-in-two-data-centers-61d08d8.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/keep-the-two-applications-in-sync-e6d2bdb.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/keep-the-two-applications-in-sync-e6d2bdb.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/define-how-a-failover-is-detected-88b86db.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/define-how-a-failover-is-detected-88b86db.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/decide-on-the-failback-963f962.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/decide-on-the-failback-963f962.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/multi-region-usecases.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/multi-region-usecases.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/data-backups-managed-by-sap-6c1e071.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/data-backups-managed-by-sap-6c1e071.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/sharing-clusters-in-kyma-57ec1ea.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/sharing-clusters-in-kyma-57ec1ea.md)
|
||||||
422
references/governance-and-teams.md
Normal file
422
references/governance-and-teams.md
Normal file
@@ -0,0 +1,422 @@
|
|||||||
|
# SAP BTP Governance and Teams - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Governance Model Overview
|
||||||
|
|
||||||
|
Establishing an appropriate organizational setup and governance model is one of the first and most important steps in the cloud journey.
|
||||||
|
|
||||||
|
### Benefits of Good Governance
|
||||||
|
|
||||||
|
- Easier adoption of agile processes
|
||||||
|
- Clear responsibilities and ownership
|
||||||
|
- Streamlined onboarding for new projects
|
||||||
|
- Consistent security and compliance
|
||||||
|
- Efficient resource utilization
|
||||||
|
|
||||||
|
### Preparatory Steps
|
||||||
|
|
||||||
|
Before launching development initiatives:
|
||||||
|
1. Establish an onboarding framework for new projects
|
||||||
|
2. Create a knowledge transfer system for teams
|
||||||
|
|
||||||
|
### Governance Model Implementation Areas
|
||||||
|
|
||||||
|
| Area | Key Activities |
|
||||||
|
|------|----------------|
|
||||||
|
| **Organizational Structure** | Team composition definitions, IT support positions, accountability assignments |
|
||||||
|
| **Process Development** | Integration pathways, knowledge sharing, operations documentation, tool selection |
|
||||||
|
| **Resource & Change Management** | Personnel scaling, process improvements, system tools, reference materials |
|
||||||
|
| **Support Operations** | Help desk workflows, incident management protocols, change management procedures |
|
||||||
|
|
||||||
|
**Reference**: Team Topologies (teamtopologies.com) for organizational design patterns.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Team Structure
|
||||||
|
|
||||||
|
### Required Teams
|
||||||
|
|
||||||
|
#### Platform Engineering Team (Center of Excellence)
|
||||||
|
|
||||||
|
**Purpose**: Manage cloud landscape infrastructure and reduce complexity for development teams.
|
||||||
|
|
||||||
|
**Core Responsibilities**:
|
||||||
|
- Account operations and management
|
||||||
|
- Build infrastructure setup
|
||||||
|
- Governance and compliance guidelines
|
||||||
|
- Security framework implementation
|
||||||
|
- Enable developers with reduced cognitive load
|
||||||
|
- Operate and ensure stable, secure cloud landscape
|
||||||
|
|
||||||
|
**Extended CoE Functions**:
|
||||||
|
- Drive cloud adoption and migration organization-wide
|
||||||
|
- Provide thought leadership and roadblock resolution guidance
|
||||||
|
- Identify, evaluate, and implement SAP BTP use cases
|
||||||
|
- Can include enabling teams composed of specialists
|
||||||
|
|
||||||
|
**Does NOT Handle**:
|
||||||
|
- Individual application lifecycles
|
||||||
|
- Application-specific development
|
||||||
|
- Application-specific operations
|
||||||
|
|
||||||
|
**Composition**:
|
||||||
|
- Skilled technology experts
|
||||||
|
- Cloud architects
|
||||||
|
- Security specialists
|
||||||
|
- Infrastructure engineers
|
||||||
|
- May include specialized sub-teams
|
||||||
|
|
||||||
|
#### Cloud Development Teams
|
||||||
|
|
||||||
|
**Purpose**: Develop and operate applications on SAP BTP.
|
||||||
|
|
||||||
|
**Approach**: DevOps model - same team both develops AND operates applications.
|
||||||
|
|
||||||
|
**Responsibilities**:
|
||||||
|
- Application development
|
||||||
|
- Application deployment
|
||||||
|
- Application monitoring
|
||||||
|
- Regular maintenance
|
||||||
|
- Post-launch support
|
||||||
|
- UI component compatibility verification (every 6 months)
|
||||||
|
|
||||||
|
**Key Principle**: Avoid traditional Build-Run separation where different teams handle development versus operations.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Essential Documentation
|
||||||
|
|
||||||
|
### Three Core Documents
|
||||||
|
|
||||||
|
| Document | Owner | Purpose |
|
||||||
|
|----------|-------|---------|
|
||||||
|
| **Onboarding Documentation** | Platform Engineering | Guide new projects through enrollment |
|
||||||
|
| **Security Guidelines** | Platform Engineering + Security | Define security requirements and standards |
|
||||||
|
| **Services Catalog** | Platform Engineering | Provide templated services for developers |
|
||||||
|
|
||||||
|
### Onboarding Document Contents
|
||||||
|
|
||||||
|
Every new application should document:
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| Organization/Department | Business unit owning the application |
|
||||||
|
| Application Identifier | Unique identifier for tracking |
|
||||||
|
| Business Rationale | Why this application is needed |
|
||||||
|
| Go-Live Timeline | Target production date |
|
||||||
|
| Owner | Primary responsible person |
|
||||||
|
| Access Requirements | Who needs access and what level |
|
||||||
|
| User Accessibility Scope | Internal, external, specific groups |
|
||||||
|
| System Integration Details | Connected systems and interfaces |
|
||||||
|
| Technology Stack | Languages, frameworks, services |
|
||||||
|
| Repository Location | **Keep outside SAP BTP** to prevent accidental deletion |
|
||||||
|
| Testing Approach | Testing strategy and requirements |
|
||||||
|
|
||||||
|
### Security Document Contents
|
||||||
|
|
||||||
|
**Requires security expert approval before development begins.**
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| Owner Identification | Security-responsible person |
|
||||||
|
| Business Scenario | Use case and context |
|
||||||
|
| User Classifications | Types of users and roles |
|
||||||
|
| Data Sensitivity Levels | Classification of handled data |
|
||||||
|
| Policy Compliance | Applicable policies and standards |
|
||||||
|
| Data Flow | How data moves through system |
|
||||||
|
| Data Storage | Where and how data is stored |
|
||||||
|
| Connected Systems | External integrations |
|
||||||
|
| Protocols | Communication protocols used |
|
||||||
|
| Authentication Framework | Identity and authentication approach |
|
||||||
|
| Authorization Framework | Permissions and access control |
|
||||||
|
| Audit Procedures | Logging and audit requirements |
|
||||||
|
|
||||||
|
### Services Catalog Contents
|
||||||
|
|
||||||
|
Platform Engineering Team provides templated services:
|
||||||
|
|
||||||
|
- Destination management
|
||||||
|
- Build configuration
|
||||||
|
- Application restart procedures
|
||||||
|
- Access provisioning
|
||||||
|
- Database schema creation
|
||||||
|
- CI/CD pipeline templates
|
||||||
|
- Monitoring setup
|
||||||
|
|
||||||
|
**Automation Options**:
|
||||||
|
- SAP BTP APIs
|
||||||
|
- btp CLI
|
||||||
|
- SAP BTP Setup Automator
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Knowledge Transfer Process
|
||||||
|
|
||||||
|
### Key Practices
|
||||||
|
|
||||||
|
1. **Document and Share**: Platform Engineering Team documents and shares knowledge with current and incoming staff
|
||||||
|
|
||||||
|
2. **Training Sessions**: "Set up training and enablement sessions to get everyone on board"
|
||||||
|
|
||||||
|
3. **Communication Channels**: Create dedicated channels (e.g., SAP Build Work Zone) for:
|
||||||
|
- Lessons learned
|
||||||
|
- Guidance and recommendations
|
||||||
|
- Best practice sharing
|
||||||
|
- Q&A support
|
||||||
|
|
||||||
|
### Knowledge Areas
|
||||||
|
|
||||||
|
- Platform architecture and capabilities
|
||||||
|
- Account model and structure
|
||||||
|
- Security requirements and procedures
|
||||||
|
- Development standards
|
||||||
|
- Deployment processes
|
||||||
|
- Operations procedures
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Onboarding Process for Projects
|
||||||
|
|
||||||
|
### Project Enrollment Steps
|
||||||
|
|
||||||
|
1. **Submit Onboarding Document**: Complete all required fields
|
||||||
|
2. **Security Review**: Security document approval
|
||||||
|
3. **Resource Allocation**: Assign subaccounts, quotas, entitlements
|
||||||
|
4. **Access Provisioning**: Set up team access rights
|
||||||
|
5. **Integration Setup**: Configure Cloud Connector, destinations
|
||||||
|
6. **CI/CD Setup**: Establish deployment pipelines
|
||||||
|
7. **Monitoring Setup**: Configure alerting and dashboards
|
||||||
|
|
||||||
|
### Self-Service vs. Managed
|
||||||
|
|
||||||
|
| Aspect | Self-Service | Managed |
|
||||||
|
|--------|--------------|---------|
|
||||||
|
| Speed | Faster | Slower |
|
||||||
|
| Control | Less | More |
|
||||||
|
| Suitable For | Low-risk, sandbox | Production, sensitive |
|
||||||
|
| Governance | Light | Full |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Administration Tools
|
||||||
|
|
||||||
|
### Available Options
|
||||||
|
|
||||||
|
| Tool | Use Case | Automation |
|
||||||
|
|------|----------|------------|
|
||||||
|
| **SAP BTP Cockpit** | GUI administration | No |
|
||||||
|
| **btp CLI** | Terminal, scripting | Yes |
|
||||||
|
| **REST APIs** | Programmatic | Yes |
|
||||||
|
| **Terraform Provider** | Infrastructure as Code | Yes |
|
||||||
|
| **SAP Automation Pilot** | Low-code automation | Yes |
|
||||||
|
|
||||||
|
### btp CLI Overview
|
||||||
|
|
||||||
|
Alternative to cockpit for users who:
|
||||||
|
- Prefer terminal work
|
||||||
|
- Want to automate operations using scripts
|
||||||
|
|
||||||
|
**Handles**:
|
||||||
|
- Global account management
|
||||||
|
- Directory management
|
||||||
|
- Subaccount management
|
||||||
|
|
||||||
|
**Note**: Environment-specific tools needed after environment creation:
|
||||||
|
- cf CLI (Cloud Foundry)
|
||||||
|
- Kyma CLI
|
||||||
|
- kubectl (Kubernetes)
|
||||||
|
|
||||||
|
### Terraform Provider
|
||||||
|
|
||||||
|
**Purpose**: Automate infrastructure provisioning using code (IaC).
|
||||||
|
|
||||||
|
**Current Status**: Available for non-productive environments; SAP developing for production use.
|
||||||
|
|
||||||
|
**Repository**: HashiCorp registry + SAP GitHub samples
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
```hcl
|
||||||
|
resource "btp_subaccount" "my_subaccount" {
|
||||||
|
name = "my-dev-subaccount"
|
||||||
|
subdomain = "my-company-dev"
|
||||||
|
region = "eu10"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "btp_subaccount_entitlement" "hana_cloud" {
|
||||||
|
subaccount_id = btp_subaccount.my_subaccount.id
|
||||||
|
service_name = "hana-cloud"
|
||||||
|
plan_name = "hana"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Shared Responsibility Model
|
||||||
|
|
||||||
|
### SAP Manages
|
||||||
|
|
||||||
|
| Area | Responsibility |
|
||||||
|
|------|----------------|
|
||||||
|
| **Infrastructure** | Software updates, patches, maintenance |
|
||||||
|
| **Monitoring** | Infrastructure, OS, and service monitoring |
|
||||||
|
| **Capacity** | Capacity management and troubleshooting |
|
||||||
|
| **Incidents** | Incident management and resolution |
|
||||||
|
| **Provisioning** | Global account creation, resource provisioning |
|
||||||
|
| **HANA Operations** | Hardware, backup, recovery, security |
|
||||||
|
| **Kyma System** | `kyma-system` namespace management |
|
||||||
|
|
||||||
|
### Customer Manages
|
||||||
|
|
||||||
|
| Area | Responsibility |
|
||||||
|
|------|----------------|
|
||||||
|
| **Account Strategy** | Global account and subaccount planning |
|
||||||
|
| **Configuration** | Subaccount configuration and setup |
|
||||||
|
| **Development** | Application development and security |
|
||||||
|
| **Deployment** | Application creation, deployment, management |
|
||||||
|
| **Authorization** | Role assignments for applications |
|
||||||
|
| **Integration** | System integration and connectivity |
|
||||||
|
| **Monitoring** | Application monitoring and health checks |
|
||||||
|
| **Maintenance** | Application updates and improvements |
|
||||||
|
| **Security** | OSS vulnerability scanning, updates |
|
||||||
|
| **HANA Updates** | Trigger revision updates via self-service |
|
||||||
|
|
||||||
|
### Additional Resources
|
||||||
|
|
||||||
|
- SAP BTP Security Recommendations
|
||||||
|
- Operating Model documentation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cost Management Governance
|
||||||
|
|
||||||
|
### Commercial Model Selection
|
||||||
|
|
||||||
|
| Model | Best For |
|
||||||
|
|-------|----------|
|
||||||
|
| **Consumption-Based** | Pilots, flexibility, new workloads |
|
||||||
|
| **Subscription-Based** | Established use cases, known services |
|
||||||
|
|
||||||
|
### Contract Strategies
|
||||||
|
|
||||||
|
1. **Consolidation**: Combine subscriptions into one global account (reduces TCO)
|
||||||
|
2. **Hybrid Accounts**: Mix subscription and consumption-based
|
||||||
|
3. **Separation**: Multiple consumption contracts require separate global accounts
|
||||||
|
|
||||||
|
**Note**: Consumption credits non-transferable between global accounts.
|
||||||
|
|
||||||
|
### Governance Practices
|
||||||
|
|
||||||
|
1. **Minimal Entitlements**: Provide only required set to prevent overage
|
||||||
|
2. **Quota Management**: Set appropriate limits per subaccount
|
||||||
|
3. **Monthly Monitoring**: Review costs and usage in cockpit
|
||||||
|
4. **Label Usage**: Enable filtering and cost allocation
|
||||||
|
5. **Automated Alerts**: Set up usage threshold notifications
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist: Account Model Setup
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- [ ] Review SAP Cloud Identity Services onboarding guide
|
||||||
|
- [ ] Assess organizational needs for account model selection
|
||||||
|
- [ ] Test hierarchy with pilot project managers
|
||||||
|
- [ ] Familiarize teams with administration tools
|
||||||
|
|
||||||
|
### Ownership Structure
|
||||||
|
|
||||||
|
| Level | Recommended Owner |
|
||||||
|
|-------|-------------------|
|
||||||
|
| Global Account | Platform Engineering Team/CoE |
|
||||||
|
| Directories | Designated owners with role collections |
|
||||||
|
| Subaccounts | Designated owners with role collections |
|
||||||
|
| Spaces/Namespaces | Development units |
|
||||||
|
|
||||||
|
### Standards to Define
|
||||||
|
|
||||||
|
- [ ] Directory creation template and process
|
||||||
|
- [ ] Naming conventions
|
||||||
|
- [ ] Labels and values for reporting
|
||||||
|
- [ ] Quota limitation rules
|
||||||
|
- [ ] Entitlement distribution rules
|
||||||
|
|
||||||
|
### Directory Template Required Fields
|
||||||
|
|
||||||
|
- Name (following naming guidelines)
|
||||||
|
- Minimum two owners
|
||||||
|
- Description of developer audience
|
||||||
|
- Expected applications
|
||||||
|
- Cost center allocation
|
||||||
|
- Enrollment procedures
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Staged Development Environment
|
||||||
|
|
||||||
|
### Standard Three-Subaccount Model
|
||||||
|
|
||||||
|
| Subaccount | Purpose |
|
||||||
|
|------------|---------|
|
||||||
|
| **Development** | Cloud-based development, individual testing |
|
||||||
|
| **Testing** | Integration testing, production-like conditions |
|
||||||
|
| **Production** | Live applications |
|
||||||
|
|
||||||
|
### Flexibility Options
|
||||||
|
|
||||||
|
- Combine development and testing
|
||||||
|
- Create additional subaccounts for large backends
|
||||||
|
- Maintain separate subaccounts for different projects
|
||||||
|
|
||||||
|
### Reasons for Separate Subaccounts
|
||||||
|
|
||||||
|
1. Isolate different projects or scenarios
|
||||||
|
2. Separate team workflows
|
||||||
|
3. Control application access and administration
|
||||||
|
4. Share databases across similar projects
|
||||||
|
5. Host centralized shared services
|
||||||
|
|
||||||
|
### Important Considerations
|
||||||
|
|
||||||
|
| Consideration | Guidance |
|
||||||
|
|---------------|----------|
|
||||||
|
| **On-Premises Connections** | Each subaccount needs separate integration setup |
|
||||||
|
| **Geographic Selection** | Choose regions near customers for latency |
|
||||||
|
| **Regulatory Compliance** | Segregate S/4HANA tenants when legally required |
|
||||||
|
| **Team Structure** | Separate DevOps teams warrant distinct subaccounts |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Development Lifecycle
|
||||||
|
|
||||||
|
### Phases
|
||||||
|
|
||||||
|
1. **Explore**: Identify business opportunity, set up team roles
|
||||||
|
2. **Discover**: Identify use cases, understand technology
|
||||||
|
3. **Design**: User experience design, domain-driven design
|
||||||
|
4. **Deliver**: Set up landscape, develop application
|
||||||
|
5. **Run and Scale**: Gather feedback, optimize, operate
|
||||||
|
|
||||||
|
### Programming Models
|
||||||
|
|
||||||
|
**SAP Cloud Application Programming Model (CAP)**:
|
||||||
|
- Framework for enterprise-grade services
|
||||||
|
- Supports Java, JavaScript, TypeScript
|
||||||
|
- Domain-driven design approach
|
||||||
|
|
||||||
|
**ABAP Cloud**:
|
||||||
|
- Modern ABAP for cloud
|
||||||
|
- RAP (RESTful ABAP Programming Model)
|
||||||
|
- Extensions for ABAP-based products
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-a-governance-model-bf0ce2c.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-a-governance-model-bf0ce2c.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/building-teams-fdeddf2.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/building-teams-fdeddf2.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-a-knowledge-transfer-process-630c14c.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-a-knowledge-transfer-process-630c14c.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-an-onboarding-process-for-development-projects-4bd29a8.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/creating-an-onboarding-process-for-development-projects-4bd29a8.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/tools-for-account-administration-6bdb3a7.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/tools-for-account-administration-6bdb3a7.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/shared-responsibility/shared-responsibility-model-between-you-and-sap-898509d.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/shared-responsibility/shared-responsibility-model-between-you-and-sap-898509d.md)
|
||||||
449
references/operations-and-monitoring.md
Normal file
449
references/operations-and-monitoring.md
Normal file
@@ -0,0 +1,449 @@
|
|||||||
|
# SAP BTP Operations and Monitoring - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/go-live-and-monitor](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/go-live-and-monitor)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Go-Live Process
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
1. Complete testing and compliance verification
|
||||||
|
2. Establish staging environment structure
|
||||||
|
3. Deploy application to production environment
|
||||||
|
4. Configure user provisioning and authorization
|
||||||
|
|
||||||
|
### Go-Live Timing Best Practices
|
||||||
|
|
||||||
|
- Establish specific timeframes for go-live activities
|
||||||
|
- Restrict deployments during critical periods (e.g., quarter-end)
|
||||||
|
- Allow exceptions only for emergencies
|
||||||
|
- Document change freeze windows
|
||||||
|
|
||||||
|
### User Enablement
|
||||||
|
|
||||||
|
**Recommendation**: Embed applications in SAP Fiori Launchpad via SAP BTP Portal before go-live.
|
||||||
|
|
||||||
|
Benefits:
|
||||||
|
- Improved usability
|
||||||
|
- Consistent user experience
|
||||||
|
- Central application access point
|
||||||
|
- Role-based app visibility
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Authentication and Authorization Post Go-Live
|
||||||
|
|
||||||
|
### Business User Provisioning
|
||||||
|
|
||||||
|
Users must be provisioned through:
|
||||||
|
- SAP ID Service
|
||||||
|
- External identity providers (recommended: SAP Cloud Identity Services)
|
||||||
|
|
||||||
|
### Authorization Configuration
|
||||||
|
|
||||||
|
Administrators can:
|
||||||
|
- Create roles based on application requirements
|
||||||
|
- Build role collections grouping related roles
|
||||||
|
- Assign collections to business users and user groups
|
||||||
|
|
||||||
|
### Role Collection Example
|
||||||
|
|
||||||
|
```
|
||||||
|
Role Collection: HR_MANAGER
|
||||||
|
├── Role: EmployeeViewer (from app-hr)
|
||||||
|
├── Role: TeamManager (from app-hr)
|
||||||
|
└── Role: ReportAccess (from app-reporting)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Content Delivery Network (CDN)
|
||||||
|
|
||||||
|
### Use Case
|
||||||
|
|
||||||
|
For geographically distributed users, CDN improves:
|
||||||
|
- Response times
|
||||||
|
- Load distribution
|
||||||
|
- Static content delivery
|
||||||
|
|
||||||
|
### CDN Best Practices
|
||||||
|
|
||||||
|
| Practice | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| **HTTPS Enforcement** | Use HTTPS-only connections |
|
||||||
|
| **Location-Based Access** | Implement geographic access controls |
|
||||||
|
| **Compression** | Enable gzip compression |
|
||||||
|
| **Static Content Caching** | Cache images, CSS, JS, fonts |
|
||||||
|
| **Dynamic Content Exclusion** | Don't cache dynamic responses |
|
||||||
|
| **Cache Headers** | Respect application cache directives |
|
||||||
|
| **CSRF Protection** | Never cache CSRF tokens |
|
||||||
|
|
||||||
|
### Cache-Control Header Example
|
||||||
|
|
||||||
|
```
|
||||||
|
# Static assets - long cache
|
||||||
|
Cache-Control: public, max-age=31536000
|
||||||
|
|
||||||
|
# HTML - revalidate
|
||||||
|
Cache-Control: no-cache
|
||||||
|
|
||||||
|
# API responses - no cache
|
||||||
|
Cache-Control: no-store, must-revalidate
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAP Cloud ALM
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
SAP Cloud ALM is included in SAP Cloud Service subscriptions containing Enterprise Support. It provides unified monitoring for:
|
||||||
|
- SAP BTP-based applications
|
||||||
|
- Custom applications
|
||||||
|
- Hybrid landscapes
|
||||||
|
|
||||||
|
### Monitoring Capabilities
|
||||||
|
|
||||||
|
| Capability | Description |
|
||||||
|
|------------|-------------|
|
||||||
|
| **Real User Monitoring** | Track actual user experience and performance |
|
||||||
|
| **Health Monitoring** | System availability and health status |
|
||||||
|
| **Integration Monitoring** | Monitor integration flows and interfaces |
|
||||||
|
| **Exception Monitoring** | Track and alert on application errors |
|
||||||
|
| **Job Automation Monitoring** | Monitor scheduled jobs and automations |
|
||||||
|
|
||||||
|
### Integration with SAP BTP
|
||||||
|
|
||||||
|
```
|
||||||
|
SAP BTP Applications
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Data Collection
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ SAP Cloud ALM │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────┐ │
|
||||||
|
│ │ Dashboards │ │
|
||||||
|
│ └─────────────┘ │
|
||||||
|
│ ┌─────────────┐ │
|
||||||
|
│ │ Alerts │ │
|
||||||
|
│ └─────────────┘ │
|
||||||
|
│ ┌─────────────┐ │
|
||||||
|
│ │ Analytics │ │
|
||||||
|
│ └─────────────┘ │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Local SAP BTP Monitoring Tools
|
||||||
|
|
||||||
|
### SAP Job Scheduling Service
|
||||||
|
|
||||||
|
**Purpose**: Schedule and manage recurring jobs across runtimes.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Runtime-agnostic (CF, Kyma)
|
||||||
|
- Cron-based scheduling
|
||||||
|
- Job monitoring and history
|
||||||
|
- Retry policies
|
||||||
|
|
||||||
|
**Example Job Definition**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "daily-cleanup",
|
||||||
|
"description": "Daily data cleanup job",
|
||||||
|
"action": "[https://my-app.cfapps.region.hana.ondemand.com/cleanup",](https://my-app.cfapps.region.hana.ondemand.com/cleanup",)
|
||||||
|
"active": true,
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"schedules": [
|
||||||
|
{
|
||||||
|
"cron": "0 0 2 * * *",
|
||||||
|
"description": "Run at 2 AM daily",
|
||||||
|
"active": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### SAP Cloud Logging
|
||||||
|
|
||||||
|
**Purpose**: Centralized observability for logs, metrics, and traces.
|
||||||
|
|
||||||
|
**Supported Runtimes**:
|
||||||
|
- Cloud Foundry
|
||||||
|
- Kyma
|
||||||
|
- Kubernetes
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Log aggregation
|
||||||
|
- Metrics collection
|
||||||
|
- Distributed tracing
|
||||||
|
- Alerting integration
|
||||||
|
|
||||||
|
### Neo Environment Monitoring
|
||||||
|
|
||||||
|
For Neo applications (Java, SAP HANA XS, HTML5):
|
||||||
|
- Cockpit-based monitoring
|
||||||
|
- Application metrics
|
||||||
|
- Resource utilization
|
||||||
|
- Error tracking
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Platform Availability Monitoring
|
||||||
|
|
||||||
|
### SAP Trust Center
|
||||||
|
|
||||||
|
Access platform status at: [https://www.sap.com/about/trust-center/cloud-service-status.html](https://www.sap.com/about/trust-center/cloud-service-status.html)
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Region-specific status
|
||||||
|
- Service availability
|
||||||
|
- Planned maintenance windows
|
||||||
|
- Incident history
|
||||||
|
|
||||||
|
### Cloud System Notification Subscriptions
|
||||||
|
|
||||||
|
Subscribe to notifications for:
|
||||||
|
- Planned maintenance
|
||||||
|
- Incidents
|
||||||
|
- Status updates
|
||||||
|
- Region-specific events
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alerting
|
||||||
|
|
||||||
|
### SAP Alert Notification Service
|
||||||
|
|
||||||
|
**Purpose**: Instant notifications across multiple delivery channels.
|
||||||
|
|
||||||
|
**Delivery Channels**:
|
||||||
|
- Email
|
||||||
|
- Slack/Microsoft Teams
|
||||||
|
- Ticketing systems (ServiceNow, JIRA)
|
||||||
|
- SAP Cloud ALM
|
||||||
|
- Custom webhooks
|
||||||
|
|
||||||
|
### Alert Configuration Example
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "high-error-rate",
|
||||||
|
"description": "Alert on high error rate",
|
||||||
|
"conditions": {
|
||||||
|
"eventType": "error",
|
||||||
|
"severity": "ERROR",
|
||||||
|
"threshold": 10,
|
||||||
|
"timeWindow": "5m"
|
||||||
|
},
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "EMAIL",
|
||||||
|
"recipients": ["ops-team@company.com"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SLACK",
|
||||||
|
"webhookUrl": "[https://hooks.slack.com/..."](https://hooks.slack.com/...")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Alert Best Practices
|
||||||
|
|
||||||
|
1. **Define Alert Severity Levels**: Critical, Warning, Info
|
||||||
|
2. **Set Appropriate Thresholds**: Avoid alert fatigue
|
||||||
|
3. **Implement Escalation**: Time-based escalation paths
|
||||||
|
4. **Document Runbooks**: Response procedures for each alert type
|
||||||
|
5. **Regular Review**: Tune alerts based on false positive rates
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Operations Automation
|
||||||
|
|
||||||
|
### SAP Automation Pilot
|
||||||
|
|
||||||
|
**Purpose**: Low-code/no-code automation for operational tasks.
|
||||||
|
|
||||||
|
**Capabilities**:
|
||||||
|
- Pre-built automation commands
|
||||||
|
- Custom command creation
|
||||||
|
- Manual or triggered execution
|
||||||
|
- Integration with monitoring services
|
||||||
|
|
||||||
|
**Use Cases**:
|
||||||
|
- Application restart procedures
|
||||||
|
- Scaling operations
|
||||||
|
- Backup triggers
|
||||||
|
- Incident response automation
|
||||||
|
- Resource cleanup
|
||||||
|
|
||||||
|
### Automation Example: Application Restart
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: RestartApplication
|
||||||
|
description: Restart CF application on health check failure
|
||||||
|
trigger:
|
||||||
|
type: ALERT
|
||||||
|
source: SAP_ALERT_NOTIFICATION
|
||||||
|
conditions:
|
||||||
|
eventType: HEALTH_CHECK_FAILED
|
||||||
|
steps:
|
||||||
|
- name: StopApplication
|
||||||
|
command: cf.StopApplication
|
||||||
|
parameters:
|
||||||
|
applicationName: ${event.applicationName}
|
||||||
|
orgName: ${event.orgName}
|
||||||
|
spaceName: ${event.spaceName}
|
||||||
|
- name: Wait
|
||||||
|
command: Sleep
|
||||||
|
parameters:
|
||||||
|
duration: 30s
|
||||||
|
- name: StartApplication
|
||||||
|
command: cf.StartApplication
|
||||||
|
parameters:
|
||||||
|
applicationName: ${event.applicationName}
|
||||||
|
orgName: ${event.orgName}
|
||||||
|
spaceName: ${event.spaceName}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration and Testing
|
||||||
|
|
||||||
|
### Integration Tests
|
||||||
|
|
||||||
|
**Definition**: Verify all building blocks work together, meet requirements, and fulfill business cases.
|
||||||
|
|
||||||
|
**Timing**: After landscape integration, part of CI/CD pipelines
|
||||||
|
|
||||||
|
**Distinction from Unit Tests**: Integration tests verify complete system interplay across multiple components.
|
||||||
|
|
||||||
|
### SAPUI5 Integration Testing
|
||||||
|
|
||||||
|
**OPA5 (One Page Acceptance Tests)**:
|
||||||
|
- API for SAPUI5 controls
|
||||||
|
- Test user interactions
|
||||||
|
- Test navigation
|
||||||
|
- Test data binding
|
||||||
|
- Manages asynchronicity
|
||||||
|
|
||||||
|
**Example OPA5 Test**:
|
||||||
|
```javascript
|
||||||
|
opaTest("Should navigate to detail page", function(Given, When, Then) {
|
||||||
|
Given.iStartMyApp();
|
||||||
|
When.onTheMainPage.iPressOnTheFirstItem();
|
||||||
|
Then.onTheDetailPage.iShouldSeeTheDetailPage();
|
||||||
|
Then.iTeardownMyApp();
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Application Integration Options
|
||||||
|
|
||||||
|
| Option | Use Case |
|
||||||
|
|--------|----------|
|
||||||
|
| **Cloud Connector** | Point-to-point, on-premise connectivity |
|
||||||
|
| **SAP Cloud Integration** | Complex multi-system, mediation needs |
|
||||||
|
| **Cloud Integration Automation** | Guided workflows, reusable configs |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cost Management
|
||||||
|
|
||||||
|
### Monitoring Costs
|
||||||
|
|
||||||
|
1. **Monthly Review**: Check *Costs and Usage* in BTP cockpit
|
||||||
|
2. **Service Analysis**: Identify top cost contributors
|
||||||
|
3. **Trend Analysis**: Track usage patterns
|
||||||
|
4. **Label Filtering**: Use labels for custom cost views
|
||||||
|
|
||||||
|
### Billing Validation
|
||||||
|
|
||||||
|
- Access *Billing* section in cockpit
|
||||||
|
- Current month shows estimations
|
||||||
|
- Drill into costs by subaccount and service
|
||||||
|
- Export data for internal accounting
|
||||||
|
|
||||||
|
### Cost Distribution Methods
|
||||||
|
|
||||||
|
| Method | Description |
|
||||||
|
|--------|-------------|
|
||||||
|
| **Data Exports** | Export usage data for processing |
|
||||||
|
| **APIs** | Programmatic access to usage data |
|
||||||
|
| **Fixed-Rate** | Allocate based on agreed percentages |
|
||||||
|
|
||||||
|
### Automated Cost Alerting
|
||||||
|
|
||||||
|
Combine:
|
||||||
|
- Usage Data Management service
|
||||||
|
- Alert Notification service
|
||||||
|
|
||||||
|
To receive alerts when:
|
||||||
|
- Approaching quota limits
|
||||||
|
- Unusual consumption patterns
|
||||||
|
- Budget thresholds exceeded
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Maintenance and Improvement
|
||||||
|
|
||||||
|
### Ongoing Maintenance Tasks
|
||||||
|
|
||||||
|
1. **Regular Testing**: Prevent issues from library/platform updates
|
||||||
|
2. **Compliance Verification**: Ongoing security and policy checks
|
||||||
|
3. **Bug Fixes**: Focus on user experience quality
|
||||||
|
4. **User Feedback**: Incorporate improvement suggestions
|
||||||
|
5. **Automated Alerting**: Via SAP Alert Notification Service
|
||||||
|
6. **Task Automation**: Using SAP Automation Pilot
|
||||||
|
|
||||||
|
### Update Strategies
|
||||||
|
|
||||||
|
| Strategy | Description | Use Case |
|
||||||
|
|----------|-------------|----------|
|
||||||
|
| **Blue-Green Deployment** | Two production environments, switch traffic | Zero-downtime updates |
|
||||||
|
| **Feature Flags** | Toggle features without deployment | Gradual rollouts |
|
||||||
|
| **Canary Releases** | Route percentage of traffic to new version | Risk mitigation |
|
||||||
|
|
||||||
|
### Staying Current
|
||||||
|
|
||||||
|
- Review SAP Release Notes regularly
|
||||||
|
- Monitor SAP Community for updates
|
||||||
|
- Subscribe to product notifications
|
||||||
|
- Plan for major version upgrades
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Application Retirement
|
||||||
|
|
||||||
|
### Decommissioning Checklist
|
||||||
|
|
||||||
|
1. [ ] Notify users of retirement timeline
|
||||||
|
2. [ ] Export required data
|
||||||
|
3. [ ] Undeploy the application
|
||||||
|
4. [ ] Delete related service instances
|
||||||
|
5. [ ] Remove destinations
|
||||||
|
6. [ ] Remove role collections
|
||||||
|
7. [ ] Clean up platform content
|
||||||
|
8. [ ] Meet data retention obligations
|
||||||
|
9. [ ] Document decommissioning
|
||||||
|
10. [ ] Archive configuration for reference
|
||||||
|
|
||||||
|
### Neo to Multi-Cloud Migration
|
||||||
|
|
||||||
|
SAP recommends migrating from Neo to multi-cloud foundation:
|
||||||
|
- Closer integration with AWS, GCP, Azure
|
||||||
|
- Modern runtime options
|
||||||
|
- Future-proof architecture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/go-live-and-monitor/go-live-and-operate-b0ab4fb.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/go-live-and-monitor/go-live-and-operate-b0ab4fb.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/integrate-and-test/integrate-and-test-84ddc25.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/integrate-and-test/integrate-and-test-84ddc25.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/improve-and-retire/improve-and-retire-89ffeab.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/improve-and-retire/improve-and-retire-89ffeab.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/managing-cost-c615301.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/managing-cost-c615301.md)
|
||||||
420
references/security-and-authentication.md
Normal file
420
references/security-and-authentication.md
Normal file
@@ -0,0 +1,420 @@
|
|||||||
|
# SAP BTP Security and Authentication - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/set-up-and-plan)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security Fundamentals
|
||||||
|
|
||||||
|
Applications on SAP BTP are exposed to the Internet and must fulfill the highest security requirements to prevent unauthorized access.
|
||||||
|
|
||||||
|
### Network Security
|
||||||
|
|
||||||
|
The SAP BTP landscape runs in an isolated network protected by:
|
||||||
|
- Firewalls
|
||||||
|
- DMZ (Demilitarized Zone)
|
||||||
|
- Communication proxies for all inbound/outbound traffic
|
||||||
|
- Transport Layer Security (TLS) encryption for all user connections
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## User Types
|
||||||
|
|
||||||
|
### Platform Users
|
||||||
|
|
||||||
|
Developers, administrators, and operators who:
|
||||||
|
- Deploy applications
|
||||||
|
- Administer accounts and environments
|
||||||
|
- Troubleshoot platform issues
|
||||||
|
|
||||||
|
**Permissions managed through**: Membership assignments at global account, directory, subaccount, and environment levels.
|
||||||
|
|
||||||
|
### Business Users
|
||||||
|
|
||||||
|
End users of deployed applications and SaaS services who require:
|
||||||
|
- Authentication configuration
|
||||||
|
- Authorization controls
|
||||||
|
- Role assignments
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Identity Provider Architecture
|
||||||
|
|
||||||
|
### Recommended Setup
|
||||||
|
|
||||||
|
**Always use SAP Cloud Identity Services - Identity Authentication for SAP BTP.**
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────┐
|
||||||
|
│ Corporate IdP │ ──── │ Identity │ ──── │ SAP BTP │
|
||||||
|
│ (ADFS, Okta, │ │ Authentication │ │ │
|
||||||
|
│ Azure AD) │ │ (Proxy Mode) │ │ │
|
||||||
|
└─────────────────┘ └──────────────────────┘ └─────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Benefits of Proxy Mode**:
|
||||||
|
- Single integration point for multiple corporate IdPs
|
||||||
|
- Centralized security policies
|
||||||
|
- Required for certain user types and applications
|
||||||
|
- Consistent authentication experience
|
||||||
|
|
||||||
|
### Default Identity Providers
|
||||||
|
|
||||||
|
| Provider | Purpose |
|
||||||
|
|----------|---------|
|
||||||
|
| **SAP ID Service** | Preconfigured for starter scenarios and testing |
|
||||||
|
| **SAP Universal ID** | Manages official SAP community users |
|
||||||
|
|
||||||
|
### Trust Configuration Levels
|
||||||
|
|
||||||
|
| User Type | Configuration Level |
|
||||||
|
|-----------|---------------------|
|
||||||
|
| Platform Users | Global account level (applies across directories, subaccounts, environments) |
|
||||||
|
| Business Users | Individual subaccount level |
|
||||||
|
|
||||||
|
**Critical**: Maintain backup administrators in default provider OR alternative custom provider for recovery scenarios.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAP Cloud Identity Services Onboarding
|
||||||
|
|
||||||
|
### Why Onboard?
|
||||||
|
|
||||||
|
The default identity provider doesn't support:
|
||||||
|
- Custom security policies
|
||||||
|
- Multifactor authentication
|
||||||
|
- SCIM APIs for user provisioning
|
||||||
|
|
||||||
|
### Tenant Options
|
||||||
|
|
||||||
|
Organizations receive both productive and test tenants:
|
||||||
|
|
||||||
|
**Option 1**: Test tenant for dev/test, productive for all
|
||||||
|
**Option 2**: Test tenant for dev/test only, productive for production
|
||||||
|
|
||||||
|
### Onboarding Procedure
|
||||||
|
|
||||||
|
**Step 1: Administrator Setup**
|
||||||
|
- Add multiple administrators (coverage across time zones)
|
||||||
|
- Ensure backup during absences
|
||||||
|
|
||||||
|
**Step 2: Security Hardening**
|
||||||
|
- Implement MFA for administrator accounts
|
||||||
|
- "Administrators have critical access to the system. Set a higher security standard."
|
||||||
|
|
||||||
|
**Step 3: Monitoring Configuration**
|
||||||
|
- Establish system notifications
|
||||||
|
- Configure security alerts
|
||||||
|
|
||||||
|
**Step 4: Corporate Integration**
|
||||||
|
- Configure Identity Authentication as proxy
|
||||||
|
- Connect to corporate identity provider(s)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Authorization Methods
|
||||||
|
|
||||||
|
### Comparison Table
|
||||||
|
|
||||||
|
| Aspect | Provisioning | Federation |
|
||||||
|
|--------|-------------|------------|
|
||||||
|
| **Mechanism** | Synchronizes users/groups between systems | Maps authorizations to user attributes in tokens |
|
||||||
|
| **Tools** | Identity Provisioning, Cloud Identity Access Governance | btp CLI, SAP BTP cockpit |
|
||||||
|
| **Advantages** | Centrally defined roles, approval workflows, automated offboarding | Simpler implementation, real-time authorization |
|
||||||
|
| **Disadvantages** | Users wait for provisioning jobs | Doesn't scale, manual role grouping, orphaned data |
|
||||||
|
| **Restrictions** | Partial for platform users (subaccount level only) | ABAP environment doesn't support |
|
||||||
|
|
||||||
|
### Recommendations
|
||||||
|
|
||||||
|
- **Production with many users**: Use provisioning or federation
|
||||||
|
- **Feasible scenarios**: Prefer provisioning
|
||||||
|
- **Simple setups**: Federation acceptable
|
||||||
|
- **Testing only**: Manual assignment okay
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Identity Lifecycle Management
|
||||||
|
|
||||||
|
### Central Identity Management
|
||||||
|
|
||||||
|
The persistency layer of SAP Cloud Identity Services is the **Identity Directory**.
|
||||||
|
|
||||||
|
**Process**:
|
||||||
|
1. Corporate identity system → Identity Provisioning → SAP Cloud Identity Services
|
||||||
|
2. Identity Directory stores user data
|
||||||
|
3. Identity Provisioning synchronizes to SAP BTP applications
|
||||||
|
|
||||||
|
### Global User ID
|
||||||
|
|
||||||
|
Use universally unique identifiers rather than changeable attributes:
|
||||||
|
|
||||||
|
**Avoid**: Email addresses (can change)
|
||||||
|
**Use**: Generated UUID or corporate employee ID
|
||||||
|
|
||||||
|
### Authentication Requirements
|
||||||
|
|
||||||
|
| Environment | Requirements |
|
||||||
|
|-------------|--------------|
|
||||||
|
| ABAP | Unique email address required |
|
||||||
|
| Kyma | Unique email address required |
|
||||||
|
| Cloud Foundry | Email + IdP information |
|
||||||
|
|
||||||
|
### Implementation Options
|
||||||
|
|
||||||
|
1. **Manual**: Create users via BTP cockpit, CLI, or APIs
|
||||||
|
2. **Automatic**: Create after successful IdP authentication
|
||||||
|
3. **Centralized**: Manage through SAP Cloud Identity Services
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Platform User Access Rights
|
||||||
|
|
||||||
|
### Team-Based Access Distribution
|
||||||
|
|
||||||
|
| Team | Development | Test | Production |
|
||||||
|
|------|-------------|------|------------|
|
||||||
|
| Cloud Development Team | Full access | No access | No access |
|
||||||
|
| Platform Engineering Team | No access | Full access | Full access |
|
||||||
|
|
||||||
|
### Environment-Specific Roles
|
||||||
|
|
||||||
|
#### Cloud Foundry
|
||||||
|
|
||||||
|
| Role | Capability | Recommended For |
|
||||||
|
|------|------------|-----------------|
|
||||||
|
| Space Developer | Deploy apps, access service credentials, sensitive data | Dev team (dev only), Platform Engineering (test/prod) |
|
||||||
|
| Org Manager | Manage org settings | Platform Engineering |
|
||||||
|
| Space Manager | Manage space settings | Platform Engineering |
|
||||||
|
|
||||||
|
**Security Note**: Space Developer provides broad access; restrict in production.
|
||||||
|
|
||||||
|
#### ABAP Environment
|
||||||
|
|
||||||
|
Requires both:
|
||||||
|
- CF roles: Org Manager, Space Manager, Space Developer
|
||||||
|
- ABAP business roles: SAP_BR_ADMINISTRATOR, SAP_BR_DEVELOPER
|
||||||
|
|
||||||
|
#### Kyma
|
||||||
|
|
||||||
|
Uses Kubernetes RBAC:
|
||||||
|
- Start with simple role concept separating developers and operators
|
||||||
|
- Refine as needed
|
||||||
|
- See Kyma RBAC reference for details
|
||||||
|
|
||||||
|
#### Neo
|
||||||
|
|
||||||
|
- Administrators assign predefined platform roles
|
||||||
|
- Custom roles can be configured
|
||||||
|
|
||||||
|
### Sensitive Production Access
|
||||||
|
|
||||||
|
For scenarios where even Platform Engineering cannot access data:
|
||||||
|
|
||||||
|
1. **Automate tasks** requiring developer access
|
||||||
|
2. **Integrate into CI/CD pipelines** using technical users
|
||||||
|
3. **Temporary role assignment** for firefighter situations
|
||||||
|
4. **Special user accounts** with controlled credential distribution
|
||||||
|
5. **Maintain audit trails** of all access usage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Destination Authentication Methods
|
||||||
|
|
||||||
|
### Complete Method Reference
|
||||||
|
|
||||||
|
| Method | Description | CF | Neo | Internet | On-Premise |
|
||||||
|
|--------|-------------|----|----|----------|------------|
|
||||||
|
| **NoAuthentication** | No authentication required | Yes | Yes | Yes | Yes |
|
||||||
|
| **BasicAuthentication** | Username/password (testing only) | Yes | Yes | Yes | Yes |
|
||||||
|
| **ClientCertificateAuthentication** | Mutual TLS with technical user | Yes | Yes | Yes | No |
|
||||||
|
| **PrincipalPropagation** | Forward user identity via Cloud Connector | Yes | Yes | No | Yes |
|
||||||
|
| **OAuth2SAMLBearerAssertion** | SAML to OAuth for third-party | Yes | Yes | Yes | Yes |
|
||||||
|
| **OAuth2ClientCredentials** | Client credentials grant (cached) | Yes | Yes | Yes | Yes |
|
||||||
|
| **OAuth2UserTokenExchange** | Token exchange in same tenant | Yes | No | Yes | Yes |
|
||||||
|
| **OAuth2Password** | Password grant (testing only) | Yes | No | Yes | Yes |
|
||||||
|
| **OAuth2JWTBearer** | JWT bearer for user context | Yes | No | Yes | Yes |
|
||||||
|
| **SAMLAssertion** | Generated SAML assertion | Yes | No | Yes | Yes |
|
||||||
|
| **AppToAppSSO** | Application-to-application SSO | No | Yes | Yes | No |
|
||||||
|
|
||||||
|
### Recommendations
|
||||||
|
|
||||||
|
**For SAP Systems**: `PrincipalPropagation`
|
||||||
|
**For Third-Party**: `OAuth2SAMLBearerAssertion`
|
||||||
|
**For Token Exchange**: `OAuth2JWTBearer` (preferred over OAuth2UserTokenExchange)
|
||||||
|
|
||||||
|
**Avoid in Production**: `BasicAuthentication`, `OAuth2Password`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Identity Propagation
|
||||||
|
|
||||||
|
### Cloud Foundry Environment
|
||||||
|
|
||||||
|
**Decision Tree**:
|
||||||
|
1. SAP system on-premise? → Use `PrincipalPropagation`
|
||||||
|
2. Third-party system? → Use `OAuth2SAMLBearerAssertion`
|
||||||
|
3. Same tenant token exchange? → Use `OAuth2JWTBearer`
|
||||||
|
|
||||||
|
### Neo Environment
|
||||||
|
|
||||||
|
Follow similar principles:
|
||||||
|
- `PrincipalPropagation` for SAP systems
|
||||||
|
- `OAuth2SAMLBearerAssertion` for third-party
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma RBAC Details
|
||||||
|
|
||||||
|
### Recommended Setup Goals
|
||||||
|
|
||||||
|
1. Separate operators from development teams
|
||||||
|
2. Isolate day-to-day accounts from administrative accounts
|
||||||
|
3. Use dedicated namespaces per service, project, or team
|
||||||
|
4. Leverage `common-resource-viewer` ClusterRole for read access
|
||||||
|
|
||||||
|
### Kubernetes Impersonation Strategy
|
||||||
|
|
||||||
|
Rather than granting powerful roles directly, use Kubernetes User Impersonation:
|
||||||
|
- Subjects (users, groups, service accounts) assume temporary identities
|
||||||
|
- "Virtual users" (vUsers) needn't exist in the system
|
||||||
|
- Provides just-in-time privilege escalation
|
||||||
|
|
||||||
|
### Role Configurations
|
||||||
|
|
||||||
|
**Operators (All Environments)**:
|
||||||
|
- Default: View-only access
|
||||||
|
- Administrative tasks: Impersonate `cluster-admin` virtual user
|
||||||
|
|
||||||
|
**Developers (Dev/Test Clusters)**:
|
||||||
|
- Full namespace access via `admin` ClusterRole binding
|
||||||
|
|
||||||
|
**Developers (Production Clusters)**:
|
||||||
|
- Read-only namespace access via `cluster-viewer` ClusterRole
|
||||||
|
- Administrative tasks: Impersonate application-specific virtual users
|
||||||
|
|
||||||
|
### Sample Manifest: Operator Impersonation
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: cluster-admin-impersonator
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["users"]
|
||||||
|
verbs: ["impersonate"]
|
||||||
|
resourceNames: ["cluster-admin"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: operators-can-impersonate-admin
|
||||||
|
subjects:
|
||||||
|
- kind: Group
|
||||||
|
name: operators
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-admin-impersonator
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Connectivity and Remote Systems
|
||||||
|
|
||||||
|
### Destination Benefits
|
||||||
|
|
||||||
|
Using destinations provides:
|
||||||
|
- Separation of application code from configuration
|
||||||
|
- Easier updates without code changes
|
||||||
|
- Secure credential and certificate storage
|
||||||
|
- Runtime resolution of connection details
|
||||||
|
|
||||||
|
### Destination Creation Levels
|
||||||
|
|
||||||
|
| Level | Use Case |
|
||||||
|
|-------|----------|
|
||||||
|
| Subaccount | Organization-wide availability |
|
||||||
|
| Service Instance | Specific scenario use |
|
||||||
|
|
||||||
|
**Security**: Limit access authorizations to minimum necessary.
|
||||||
|
|
||||||
|
### Cloud Connector
|
||||||
|
|
||||||
|
Lightweight on-premise agent establishing secure tunnel:
|
||||||
|
|
||||||
|
**Capabilities**:
|
||||||
|
- No inbound firewall ports required
|
||||||
|
- Fine-grained access control per exposed system
|
||||||
|
- RFC and HTTP protocol support
|
||||||
|
- Principal propagation for user identity forwarding
|
||||||
|
- Configuration via SAP BTP cockpit
|
||||||
|
|
||||||
|
**Note**: Each subaccount requires separate Cloud Connector integration setup.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## mTLS Certificate Extraction
|
||||||
|
|
||||||
|
### Steps to Extract X.509 Certificates
|
||||||
|
|
||||||
|
1. **Locate Service Key**: Navigate to service instance in BTP cockpit
|
||||||
|
2. **Find Attributes**: Look for `certificate` and `key` attributes (verify `credential-type: x509`)
|
||||||
|
3. **Extract Values**: Copy to separate text files (avoid `\n` characters)
|
||||||
|
4. **Save as PEM**:
|
||||||
|
- `my-private-key.pem`
|
||||||
|
- `my-certificate.pem`
|
||||||
|
5. **Combine**: Create `my-keypair.pem` with private key first, then certificate
|
||||||
|
|
||||||
|
### PEM File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
[Base64 encoded private key]
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
[Base64 encoded certificate]
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: Converting to `.cer`, `.jks`, `.p12` requires third-party tools.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Protection and Privacy
|
||||||
|
|
||||||
|
### Key Principles
|
||||||
|
|
||||||
|
- Compliance should be integrated early in development, not as an afterthought
|
||||||
|
- Simply using SAP BTP doesn't make applications compliant
|
||||||
|
- SAP provides security features; you must implement them properly
|
||||||
|
- Consult legal experts for specific requirements
|
||||||
|
|
||||||
|
**Important Disclaimer**: "SAP does not provide legal advice in any form." Compliance requires case-by-case decisions based on your specific system landscape and applicable laws.
|
||||||
|
|
||||||
|
### Important Considerations
|
||||||
|
|
||||||
|
- Compliance involves multiple systems and products
|
||||||
|
- User deletion requests may require coordinated removal across platforms
|
||||||
|
- Tailor decisions to your system environment and legal framework
|
||||||
|
- SAP Discovery Center provides EU Access service information
|
||||||
|
|
||||||
|
### SAP's Role vs Your Responsibility
|
||||||
|
|
||||||
|
| SAP Provides | You Must |
|
||||||
|
|--------------|----------|
|
||||||
|
| Security features | Implement them properly |
|
||||||
|
| Data protection-relevant functions | Configure for your requirements |
|
||||||
|
| Identity lifecycle management | Coordinate across all integrated systems |
|
||||||
|
| Documentation and guidance | Consult legal experts for your jurisdiction |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/security-concepts-951d36c.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/security-concepts-951d36c.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-authentication-1dbce9c.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-authentication-1dbce9c.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-authorization-cb9f0ac.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-authorization-cb9f0ac.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-identity-lifecycle-2c30208.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/setting-up-identity-lifecycle-2c30208.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/role-based-access-control-rbac-in-kyma-bb31080.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/role-based-access-control-rbac-in-kyma-bb31080.md)
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/destination-authentication-methods-765423d.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/set-up-and-plan/destination-authentication-methods-765423d.md)
|
||||||
674
references/templates-and-examples.md
Normal file
674
references/templates-and-examples.md
Normal file
@@ -0,0 +1,674 @@
|
|||||||
|
# SAP BTP Templates and Code Examples - Detailed Reference
|
||||||
|
|
||||||
|
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide](https://github.com/SAP-docs/btp-best-practices-guide)
|
||||||
|
|
||||||
|
This reference contains complete templates, manifests, and configuration examples from the official documentation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Getting Started Checklist - Complete Steps
|
||||||
|
|
||||||
|
### Phase 1: Fulfill Prerequisites (9 Steps)
|
||||||
|
|
||||||
|
| Step | Action | Resources |
|
||||||
|
|------|--------|-----------|
|
||||||
|
| 1 | **Platform Familiarization** | SAP BTP Guidance Framework, Learning Journey: Discover SAP BTP, Basic Platform Concepts, Shared Responsibility Model |
|
||||||
|
| 2 | **Discovery Center Exploration** | Explore services, missions, reference architectures at [https://discovery-center.cloud.sap/](https://discovery-center.cloud.sap/) |
|
||||||
|
| 3 | **Project Identification** | Identify pilot projects using SAP BTP Use Cases page |
|
||||||
|
| 4 | **Free Tier Consideration** | Note: "Only community support is available for free tier service plans and they are not subject to SLAs" |
|
||||||
|
| 5 | **Commercial Model Selection** | Choose subscription or consumption-based; review SAP BTP and Integration Suite pricing |
|
||||||
|
| 6 | **SLA Review** | Review SAP BTP Service Description Guide and SAP Trust Center |
|
||||||
|
| 7 | **Onboarding Confirmation** | Receive onboarding email with cockpit access; existing users contact global account admin |
|
||||||
|
| 8 | **Customer Number Acquisition** | Obtain customer number for support purposes |
|
||||||
|
| 9 | **Team Building** | Establish Platform Engineering Team (CoE) and Cloud Development Team |
|
||||||
|
|
||||||
|
### Phase 2: Get Started (4 Steps)
|
||||||
|
|
||||||
|
1. **Onboard to SAP Cloud Identity Services** - Configure identity provider
|
||||||
|
2. **Set Up Account Model** - Choose runtime (Kyma vs Cloud Foundry)
|
||||||
|
3. **Configure Security Model** - Establish security and compliance framework
|
||||||
|
4. **Create Enrollment Process** - Define onboarding workflow for development projects
|
||||||
|
|
||||||
|
### Phase 3: Implement (4 Steps)
|
||||||
|
|
||||||
|
1. **Develop and Deploy** - Use SAP Cloud Application Programming Model
|
||||||
|
2. **Test and Evaluate** - Thorough testing before production
|
||||||
|
3. **Go Live** - Launch to production
|
||||||
|
4. **Improve or Retire** - Continuous enhancement or decommission
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Account Administration Responsibilities
|
||||||
|
|
||||||
|
| Level | Key Responsibilities |
|
||||||
|
|-------|---------------------|
|
||||||
|
| **Global Account** | Appoint administrators; manage entitlements and quotas for distribution |
|
||||||
|
| **Directory** | Manage member access; oversee entitlements (if enabled) |
|
||||||
|
| **Subaccount** | Assign business roles; manage member access |
|
||||||
|
|
||||||
|
**Recommendation**: Appoint substitute administrators at each level to ensure continuity.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment Methods by Runtime - Complete Reference
|
||||||
|
|
||||||
|
### Cloud Foundry and Neo Environments
|
||||||
|
|
||||||
|
| Application Type | Deployment Tools |
|
||||||
|
|------------------|------------------|
|
||||||
|
| **Java Applications** | SAP BTP cockpit, Cloud Foundry CLI, Console client (Neo) |
|
||||||
|
| **HTML5 Applications** | SAP Business Application Studio, Cloud Foundry CLI, SAP BTP cockpit |
|
||||||
|
| **Node.js Applications** | SAP Business Application Studio, Cloud Foundry CLI |
|
||||||
|
| **SAP HANA XSA Applications** | SAP HANA Deployment Infrastructure (HDI) from Business Application Studio, Cloud Foundry CLI |
|
||||||
|
| **Custom Buildpacks** | Deployment dependent on buildpack specifications |
|
||||||
|
|
||||||
|
**Key Recommendation**: Archive all components into a Multitarget Application (MTA) with deployment descriptor.
|
||||||
|
|
||||||
|
### Kyma Environment
|
||||||
|
|
||||||
|
| Approach | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| **Standard Dockerfile** | Package application in Linux Docker image |
|
||||||
|
| **Cloud Native Buildpacks** | Alternative to Dockerfile for containerization |
|
||||||
|
| **Kubernetes Jobs** | Use HTML5 application deployer |
|
||||||
|
| **Automation (Production)** | SAP Continuous Integration and Delivery with Helm charts |
|
||||||
|
|
||||||
|
**Supported Technologies**: Java, Node.js, Python, Scala, .Net, and others when packaged as Linux Docker images.
|
||||||
|
|
||||||
|
**Production Recommendation**: Use automation tools rather than manual deployment processes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Directory Template
|
||||||
|
|
||||||
|
When creating new directories, document the following:
|
||||||
|
|
||||||
|
| Field | Requirement | Example |
|
||||||
|
|-------|-------------|---------|
|
||||||
|
| **Name** | Follow naming guidelines | `hr-applications` |
|
||||||
|
| **Owners** | Minimum two owners recommended | Platform Engineering Team leads |
|
||||||
|
| **Description** | Developer audience, department, application types, runtimes, subscriptions | "HR department applications using Cloud Foundry, CAP framework" |
|
||||||
|
| **Cost Center** | Define accounting requirements | `CC-HR-001` |
|
||||||
|
| **Enrollment** | Describe project enrollment process | "Submit via ServiceNow, approval within 5 days" |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma RBAC Complete Manifest Examples
|
||||||
|
|
||||||
|
### ClusterRole: cluster-viewer
|
||||||
|
|
||||||
|
Provides view permissions across all resources:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: cluster-viewer
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['*']
|
||||||
|
verbs: ['get', 'list', 'watch']
|
||||||
|
resources: ['*']
|
||||||
|
```
|
||||||
|
|
||||||
|
### ClusterRole: common-resource-viewer
|
||||||
|
|
||||||
|
Enables viewing Kyma-specific objects (applications, gateways):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: common-resource-viewer
|
||||||
|
rules:
|
||||||
|
- verbs: [get, list, watch]
|
||||||
|
apiGroups:
|
||||||
|
- applicationconnector.kyma-project.io
|
||||||
|
- networking.istio.io
|
||||||
|
resources:
|
||||||
|
- applications
|
||||||
|
- gateways
|
||||||
|
```
|
||||||
|
|
||||||
|
### Operator View Access
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: cluster-admin-view-crb
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-viewer
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Group
|
||||||
|
name: <operators-group-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Operator Impersonation Setup (3 Manifests)
|
||||||
|
|
||||||
|
**Step 1 - Bind virtual user to cluster-admin role:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: cluster-admin-crb
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-admin
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: User
|
||||||
|
name: cluster-admin
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2 - Create impersonation ClusterRole:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: cluster-admin-impersonator
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['']
|
||||||
|
resources: ['users']
|
||||||
|
verbs: ['impersonate']
|
||||||
|
resourceNames: ['cluster-admin']
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3 - Bind impersonation to operators group:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: cluster-admin-impersonate-crb
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-admin-impersonator
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Group
|
||||||
|
name: <operators-group-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Developer Namespace Admin (Dev/Test)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: dev-team-admin-rb
|
||||||
|
namespace: <namespace>
|
||||||
|
subjects:
|
||||||
|
- kind: Group
|
||||||
|
name: <dev-team-group-name>
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: admin
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
```
|
||||||
|
|
||||||
|
### Developer Production Impersonation (4 Manifests)
|
||||||
|
|
||||||
|
**Step 1 - Create app-specific impersonation ClusterRole:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: app-admin-impersonator
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['']
|
||||||
|
resources: ['users']
|
||||||
|
verbs: ['impersonate']
|
||||||
|
resourceNames: ['app-admin-vuser']
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2 - Bind impersonation to team:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: app-team-impersonation-crb
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: app-admin-impersonator
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Group
|
||||||
|
name: <app-team-group-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3 - Bind virtual user to admin in namespace:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: app-admin-rb
|
||||||
|
namespace: <namespace>
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: admin
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: User
|
||||||
|
name: app-admin-vuser
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 4 - Provide read access to namespace:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: namespace-viewer-rb
|
||||||
|
namespace: <namespace>
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-viewer
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Group
|
||||||
|
name: <app-team-group-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common Resource Viewer Binding
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: developers-common-resources-crb
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: common-resource-viewer
|
||||||
|
subjects:
|
||||||
|
- apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Group
|
||||||
|
name: <developers-group-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Multi-Region Reference Use Cases - Complete Links
|
||||||
|
|
||||||
|
**Note**: Repository structures may change. Always verify current paths at the repository root.
|
||||||
|
|
||||||
|
### Use Case 1: SAP Build Work Zone + Azure Traffic Manager
|
||||||
|
|
||||||
|
| Resource Type | Link |
|
||||||
|
|---------------|------|
|
||||||
|
| **Blog Post** | "Multi-region High Availability architecture for SAP BTP Launchpad Service using Azure Traffic Manager" (SAP Community) |
|
||||||
|
| **GitHub** | [https://github.com/SAP-samples/btp-services-intelligent-routing](https://github.com/SAP-samples/btp-services-intelligent-routing) |
|
||||||
|
| **Discovery Center** | Mission: "Route Multi-Region Traffic to SAP BTP Services Intelligently" |
|
||||||
|
|
||||||
|
### Use Case 2: SAP Build Work Zone + Amazon Route 53
|
||||||
|
|
||||||
|
| Resource Type | Link |
|
||||||
|
|---------------|------|
|
||||||
|
| **Blog Post** | "High Availability of SAP Build Work Zone with Amazon Route 53" (SAP Community) |
|
||||||
|
| **GitHub** | [https://github.com/SAP-samples/btp-services-intelligent-routing](https://github.com/SAP-samples/btp-services-intelligent-routing) |
|
||||||
|
|
||||||
|
### Use Case 3: CAP Applications + SAP HANA Cloud Multi-Zone
|
||||||
|
|
||||||
|
| Resource Type | Link |
|
||||||
|
|---------------|------|
|
||||||
|
| **GitHub** | [https://github.com/SAP-samples/cap-distributed-resiliency](https://github.com/SAP-samples/cap-distributed-resiliency) |
|
||||||
|
|
||||||
|
### Use Case 4: CAP Applications + Amazon Aurora Read Replica
|
||||||
|
|
||||||
|
| Resource Type | Link |
|
||||||
|
|---------------|------|
|
||||||
|
| **GitHub** | [https://github.com/SAP-samples/cap-distributed-resiliency](https://github.com/SAP-samples/cap-distributed-resiliency) |
|
||||||
|
|
||||||
|
### Use Case 5: SAP Cloud Integration + Azure Traffic Manager
|
||||||
|
|
||||||
|
| Resource Type | Link |
|
||||||
|
|---------------|------|
|
||||||
|
| **GitHub** | [https://github.com/SAP-samples/btp-services-intelligent-routing](https://github.com/SAP-samples/btp-services-intelligent-routing) |
|
||||||
|
| **Discovery Center** | Mission: "Route Multi-Region Traffic to SAP BTP Services Intelligently" |
|
||||||
|
|
||||||
|
**Discovery Center URL**: [https://discovery-center.cloud.sap/](https://discovery-center.cloud.sap/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Neo Environment Monitoring Table
|
||||||
|
|
||||||
|
| Application Type | Monitoring Options | Resources |
|
||||||
|
|------------------|-------------------|-----------|
|
||||||
|
| **Java Applications** | Application monitoring, custom thresholds, availability checks, heap/thread dumps, email alerts, logging APIs | Monitoring Java Applications; Using Logs in Cockpit for Java Applications |
|
||||||
|
| **SAP HANA XS Applications** | Application monitoring, availability checks, HTTP checks, email alerts, database health statistics | Monitoring Database Systems |
|
||||||
|
| **HTML5 Applications** | Application monitoring, custom checks, email alerts, application logging | Monitoring HTML5 Applications; Using Logs in Cockpit |
|
||||||
|
|
||||||
|
**Additional**: Dynatrace SaaS monitoring integration available for Java applications.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cluster Sharing Isolation Strategies
|
||||||
|
|
||||||
|
### Control Plane Isolation
|
||||||
|
|
||||||
|
| Strategy | Description | Implementation |
|
||||||
|
|----------|-------------|----------------|
|
||||||
|
| **Namespaces** | Logical grouping isolating API resources | Each team/project gets dedicated namespace |
|
||||||
|
| **RBAC** | Control user access and permissions | Scope activities to respective namespaces |
|
||||||
|
| **Global Resources** | Admin-managed cluster-wide resources | Centrally manage CRDs affecting all tenants |
|
||||||
|
| **Policy Engines** | Enforce tenant policies | Gatekeeper or Kyverno for compliance |
|
||||||
|
| **Resource Controls** | Fair consumption management | Resource quotas, limit ranges, Pod priorities |
|
||||||
|
|
||||||
|
### Data Plane Isolation
|
||||||
|
|
||||||
|
| Strategy | Description | Implementation |
|
||||||
|
|----------|-------------|----------------|
|
||||||
|
| **Network Policies** | Control traffic flow | Restrict inter-namespace communication |
|
||||||
|
| **Centralized Observability** | Cluster-wide metrics | Tenant-restricted data access |
|
||||||
|
| **Istio Service Mesh** | Advanced traffic control | mTLS between Pods, dedicated ingress per tenant |
|
||||||
|
|
||||||
|
### Sample Network Policy (Deny Cross-Namespace)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: deny-cross-namespace
|
||||||
|
namespace: tenant-a
|
||||||
|
spec:
|
||||||
|
podSelector: {}
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: tenant-a
|
||||||
|
egress:
|
||||||
|
- to:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: tenant-a
|
||||||
|
- to:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: kube-system
|
||||||
|
ports:
|
||||||
|
- protocol: UDP
|
||||||
|
port: 53
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CI/CD Configuration Templates
|
||||||
|
|
||||||
|
### SAP Continuous Integration and Delivery Pipeline Config
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# .pipeline/config.yml
|
||||||
|
general:
|
||||||
|
buildTool: 'mta'
|
||||||
|
productiveBranch: 'main'
|
||||||
|
|
||||||
|
service:
|
||||||
|
buildToolVersion: 'MBTJ11N14'
|
||||||
|
|
||||||
|
stages:
|
||||||
|
Build:
|
||||||
|
mtaBuild: true
|
||||||
|
|
||||||
|
Additional Unit Tests:
|
||||||
|
npmExecuteScripts:
|
||||||
|
runScripts:
|
||||||
|
- 'test'
|
||||||
|
|
||||||
|
Acceptance:
|
||||||
|
cloudFoundryDeploy:
|
||||||
|
deployTool: 'mtaDeployPlugin'
|
||||||
|
deployType: 'standard'
|
||||||
|
cfOrg: 'my-org'
|
||||||
|
cfSpace: 'dev'
|
||||||
|
cfCredentialsId: 'cf-credentials'
|
||||||
|
|
||||||
|
Release:
|
||||||
|
cloudFoundryDeploy:
|
||||||
|
deployTool: 'mtaDeployPlugin'
|
||||||
|
deployType: 'standard'
|
||||||
|
cfOrg: 'my-org'
|
||||||
|
cfSpace: 'prod'
|
||||||
|
cfCredentialsId: 'cf-credentials'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Project "Piper" Jenkinsfile Example
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
@Library('piper-lib-os') _
|
||||||
|
|
||||||
|
node {
|
||||||
|
stage('Prepare') {
|
||||||
|
checkout scm
|
||||||
|
setupCommonPipelineEnvironment script: this
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
mtaBuild script: this
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Unit Tests') {
|
||||||
|
npmExecuteScripts script: this, runScripts: ['test']
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Deploy to Dev') {
|
||||||
|
cloudFoundryDeploy script: this,
|
||||||
|
deployTool: 'mtaDeployPlugin',
|
||||||
|
cfOrg: 'my-org',
|
||||||
|
cfSpace: 'dev'
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Integration Tests') {
|
||||||
|
// Add integration test execution
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Deploy to Prod') {
|
||||||
|
cloudFoundryDeploy script: this,
|
||||||
|
deployTool: 'mtaDeployPlugin',
|
||||||
|
cfOrg: 'my-org',
|
||||||
|
cfSpace: 'prod'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MTA Deployment Descriptor Template
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
_schema-version: "3.1"
|
||||||
|
ID: my-application
|
||||||
|
version: 1.0.0
|
||||||
|
description: "SAP BTP Application"
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
enable-parallel-deployments: true
|
||||||
|
|
||||||
|
build-parameters:
|
||||||
|
before-all:
|
||||||
|
- builder: custom
|
||||||
|
commands:
|
||||||
|
- npm ci
|
||||||
|
- npm run build
|
||||||
|
|
||||||
|
modules:
|
||||||
|
- name: my-app-srv
|
||||||
|
type: nodejs
|
||||||
|
path: gen/srv
|
||||||
|
parameters:
|
||||||
|
buildpack: nodejs_buildpack
|
||||||
|
memory: 256M
|
||||||
|
provides:
|
||||||
|
- name: srv-api
|
||||||
|
properties:
|
||||||
|
srv-url: ${default-url}
|
||||||
|
requires:
|
||||||
|
- name: my-app-db
|
||||||
|
- name: my-app-auth
|
||||||
|
|
||||||
|
- name: my-app-db-deployer
|
||||||
|
type: hdb
|
||||||
|
path: gen/db
|
||||||
|
parameters:
|
||||||
|
buildpack: nodejs_buildpack
|
||||||
|
requires:
|
||||||
|
- name: my-app-db
|
||||||
|
|
||||||
|
- name: my-app-ui
|
||||||
|
type: approuter.nodejs
|
||||||
|
path: app/
|
||||||
|
parameters:
|
||||||
|
keep-existing-routes: true
|
||||||
|
disk-quota: 256M
|
||||||
|
memory: 256M
|
||||||
|
requires:
|
||||||
|
- name: srv-api
|
||||||
|
group: destinations
|
||||||
|
properties:
|
||||||
|
name: srv-api
|
||||||
|
url: ~{srv-url}
|
||||||
|
forwardAuthToken: true
|
||||||
|
- name: my-app-auth
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- name: my-app-db
|
||||||
|
type: com.sap.xs.hdi-container
|
||||||
|
parameters:
|
||||||
|
service: hana
|
||||||
|
service-plan: hdi-shared
|
||||||
|
|
||||||
|
- name: my-app-auth
|
||||||
|
type: org.cloudfoundry.managed-service
|
||||||
|
parameters:
|
||||||
|
service: xsuaa
|
||||||
|
service-plan: application
|
||||||
|
path: ./xs-security.json
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kyma Helm Chart Template
|
||||||
|
|
||||||
|
### Chart.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v2
|
||||||
|
name: my-kyma-app
|
||||||
|
description: A Helm chart for SAP BTP Kyma deployment
|
||||||
|
type: application
|
||||||
|
version: 1.0.0
|
||||||
|
appVersion: "1.0.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
### values.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
replicaCount: 2
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: my-registry/my-app
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: ""
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: istio
|
||||||
|
hosts:
|
||||||
|
- host: my-app.kyma.example.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 256Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
|
||||||
|
autoscaling:
|
||||||
|
enabled: true
|
||||||
|
minReplicas: 2
|
||||||
|
maxReplicas: 10
|
||||||
|
targetCPUUtilizationPercentage: 80
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
tolerations: []
|
||||||
|
affinity: {}
|
||||||
|
```
|
||||||
|
|
||||||
|
### templates/deployment.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "my-kyma-app.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "my-kyma-app.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if not .Values.autoscaling.enabled }}
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "my-kyma-app.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "my-kyma-app.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8080
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 5
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Source Documentation**:
|
||||||
|
- [https://github.com/SAP-docs/btp-best-practices-guide](https://github.com/SAP-docs/btp-best-practices-guide)
|
||||||
|
- [https://github.com/SAP-samples/btp-services-intelligent-routing](https://github.com/SAP-samples/btp-services-intelligent-routing)
|
||||||
|
- [https://github.com/SAP-samples/cap-distributed-resiliency](https://github.com/SAP-samples/cap-distributed-resiliency)
|
||||||
Reference in New Issue
Block a user