diff --git a/docu/1-discover/2-learn-basics-btp-cf-kyma/README.md b/docu/1-discover/2-learn-basics-btp-cf-kyma/README.md index 7eb7c4c..24c368a 100644 --- a/docu/1-discover/2-learn-basics-btp-cf-kyma/README.md +++ b/docu/1-discover/2-learn-basics-btp-cf-kyma/README.md @@ -29,11 +29,11 @@ The central point of entry to the platform is the SAP BTP Cockpit, where you can > **Hint** - You can use any of those links to access any of your SAP BTP accounts. The regional availability serves the performance of the Cockpit application, so we suggest to use the closest regional URL when working with the Cockpit. -- EMEA: https://emea.cockpit.btp.cloud.sap -- Restricted EU-Access: https://eu-access.cockpit.btp.cloud.sap -- Americas: https://amer.cockpit.btp.cloud.sap -- Asia-Pacific, Oceania: https://apac.cockpit.btp.cloud.sap -- Trial: https://cockpit.hanatrial.ondemand.com/trial +- EMEA: [https://emea.cockpit.btp.cloud.sap](https://emea.cockpit.btp.cloud.sap) +- Restricted EU-Access: [https://eu-access.cockpit.btp.cloud.sap](https://eu-access.cockpit.btp.cloud.sap) +- Americas: [https://amer.cockpit.btp.cloud.sap](https://amer.cockpit.btp.cloud.sap) +- Asia-Pacific, Oceania: [https://apac.cockpit.btp.cloud.sap](https://apac.cockpit.btp.cloud.sap) +- Trial: [https://cockpit.hanatrial.ondemand.com/trial](https://cockpit.hanatrial.ondemand.com/trial) As this tutorial is not about an extensive SAP BTP introduction, we would like to refer you to the official [SAP Help](https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/73beb06e127f4e47b849aa95344aabe1.html?locale=en-US) documentation for further information. @@ -60,11 +60,11 @@ The key pillars of developing business applications on SAP BTP are the runtimes To learn more about SAP BTP in general, feel free to check out and bookmark the following links for your convenience. SAP BTP Best Practices
-https://help.sap.com/docs/btp/best-practices/best-practices-for-sap-btp +[https://help.sap.com/docs/btp/best-practices/best-practices-for-sap-btp](https://help.sap.com/docs/btp/best-practices/best-practices-for-sap-btp) SAP BTP Tools and APIs
-https://help.sap.com/docs/btp/best-practices/tools
-https://help.sap.com/docs/btp/best-practices/apis +[https://help.sap.com/docs/btp/best-practices/tools](https://help.sap.com/docs/btp/best-practices/tools)
+[https://help.sap.com/docs/btp/best-practices/apis](https://help.sap.com/docs/btp/best-practices/apis) ## 2. SAP BTP, Cloud Foundry Runtime @@ -147,11 +147,11 @@ If you're to CAP, please acquaint yourself with the basics of CAP right now, bef Feel free to explore the following resources to learn more about CAP and check out the latest community discussions ([click here](https://blogs.sap.com/tags/9f13aee1-834c-4105-8e43-ee442775e5ce/)): -- CAP Documentation - https://cap.cloud.sap/docs/ +- CAP Documentation - [https://cap.cloud.sap/docs/](https://cap.cloud.sap/docs/) - CAP Tutorials - [https://developers.sap.com/](https://developers.sap.com/tutorial-navigator.html?tag=software-product-function%3Asap-cloud-application-programming-model&tag=tutorial%3Atype%2Fmission) - Build an Application End-to-End Using CAP, Node.js and VS Code - [click here](https://developers.sap.com/group.btp-app-cap-create.html) - Create an SAP Cloud Application Programming Model Project for SAP HANA Cloud - [click here](https://developers.sap.com/tutorials/hana-cloud-cap-create-project.html) - ... -- Node.js CAP Samples - https://github.com/sap-samples/cloud-cap-samples -- Java CAP Samples - https://github.com/SAP-samples/cloud-cap-samples-java -- CAP and Fiori Elements - https://github.com/SAP-samples/cap-sflight \ No newline at end of file +- Node.js CAP Samples - [https://github.com/sap-samples/cloud-cap-samples](https://github.com/sap-samples/cloud-cap-samples) +- Java CAP Samples - [https://github.com/SAP-samples/cloud-cap-samples-java](https://github.com/SAP-samples/cloud-cap-samples-java) +- CAP and Fiori Elements - [https://github.com/SAP-samples/cap-sflight](https://github.com/SAP-samples/cap-sflight) \ No newline at end of file diff --git a/docu/1-discover/4-get-idea-saas-applications/README.md b/docu/1-discover/4-get-idea-saas-applications/README.md index 02039ec..35d1b73 100644 --- a/docu/1-discover/4-get-idea-saas-applications/README.md +++ b/docu/1-discover/4-get-idea-saas-applications/README.md @@ -30,13 +30,13 @@ For sure there are a lot of examples in which it makes sense to provide a Softwa [](./images/SaaS_SingleTenant.png?raw=true) -> The single consumer in this scenario pays 500\$ per year for the SaaS subscription. The SaaS provider is charged 300\$ for the dedicated SAP HANA Cloud instance and some GBs of runtime. All in all, the provider is left with a profit of 200\$. +> The single consumer in this scenario pays 500 $ per year for the SaaS subscription. The SaaS provider is charged 300 $ for the dedicated SAP HANA Cloud instance and some GBs of runtime. All in all, the provider is left with a profit of 200 $. While such a setup might be required for certain scenarios (e.g. high-risk customers) in most scenarios it makes sense to share resources (like an SAP HANA Cloud database) between multiple consumer tenants. If you design your SaaS application to support multitenancy, this means a great advantage for your TCO as a SaaS provider. While the SaaS consumer doesn't even notice that resources are shared in the background, you can for example safely store the data of 1000 consumer Tenants on the same database. In case of an SAP HANA Cloud database, this will reduce the costs of a powerful in-memory system to a minimum for each of the 1000 consumers making the concept very profitable for both sides. [](./images/SaaS_MultiTenant.png?raw=true) -> In this scenario, 100 consumers pay 100$ per year for the SaaS subscription (= 10.000\$). The SaaS provider is charged 3.000\$ for a large SAP HANA Cloud instance and the necessary runtime memory. All in all, the provider is left with a profit of 7.000\$. +> In this scenario, 100 consumers pay 100$ per year for the SaaS subscription (= 10.000 $). The SaaS provider is charged 3.000 $ for a large SAP HANA Cloud instance and the necessary runtime memory. All in all, the provider is left with a profit of 7.000 $. This is why as a SaaS provider (especially if you're relying on powerful and expensive services) on SAP BTP, you should always make sure to design your SaaS application multitenant enabled. A lot of services and frameworks on SAP BTP are usable in multitenant scenarios like SAP HANA Cloud, XSUAA, SAP Event Mesh, Destination Service, or the SAP CAP framework. This allows you to develop powerful applications on the SAP BTP platform by leveraging the integration capabilities with your consumer's On-Premise or Cloud SAP landscape. diff --git a/docu/2-basic/2-prepare-provider-subaccount/README.md b/docu/2-basic/2-prepare-provider-subaccount/README.md index bd285ca..ae651e3 100644 --- a/docu/2-basic/2-prepare-provider-subaccount/README.md +++ b/docu/2-basic/2-prepare-provider-subaccount/README.md @@ -39,7 +39,7 @@ Please make sure to cater the following prerequisites: * Set up a SAP HANA Cloud instance (**hana-free** service plan) using the **SAP HANA Cloud Tools** (**tools** service plan). > **Hint** - In Trial environments, you have to assign the **hana** service plan to your subaccount.
- > **Hint** - Check the following blog post to find more details about how to setup your SAP HANA Cloud instance using the HANA Tools ([click here](https://blogs.sap.com/2022/09/21/sap-hana-cloud-goes-multi-environment-part-2-getting-started/). + > **Hint** - Check the following blog post to find more details about how to setup your SAP HANA Cloud instance using the HANA Tools ([click here](https://blogs.sap.com/2022/09/21/sap-hana-cloud-goes-multi-environment-part-2-getting-started/)). > **Important** - Please make sure to select the correct free service plans in PAYG or CPEA scenarios, as paid service plans will generate costs in your account! @@ -92,7 +92,7 @@ If you need assistance assigning entitlements to your Provider Subaccount, you m ## 3. SAP HANA Cloud prerequisite -> **Hint** - To learn more about SAP HANA Cloud in general, please check the following Learning Journey (https://learning.sap.com/learning-journey/provision-and-administer-databases-in-sap-hana-cloud). +> **Hint** - To learn more about SAP HANA Cloud in general, please check the following Learning Journey ([click here](https://learning.sap.com/learning-journey/provision-and-administer-databases-in-sap-hana-cloud)). If not available yet, please create a SAP HANA Cloud instance in your Provider subaccount or share an existing SAP HANA Cloud from any other subaccount within the same SAP BTP region (e.g., eu10). Any SAP HANA Cloud instance in the same region as your Cloud Foundry environment or Kyma Cluster, can be enabled for usage within your Provider subaccount. @@ -100,7 +100,7 @@ Once you created the SAP HANA Cloud instance, please map it with your Cloud Foun **Kyma** (only) -More information on how to share your SAP HANA Cloud instance with your Kyma Cluster can be found in the following blog post [(click here)](https://blogs.sap.com/2022/12/15/consuming-sap-hana-cloud-from-the-kyma-environment/). +More information on how to share your SAP HANA Cloud instance with your Kyma Cluster can be found in the following blog post ([click here](https://blogs.sap.com/2022/12/15/consuming-sap-hana-cloud-from-the-kyma-environment/)). > **Important** - Please make sure to use the new **SAP HANA Cloud Tools** service (service plan **tools**) for this purpose! The instance mapping feature for Kyma is not available in the SAP HANA Cloud Central UI. @@ -108,7 +108,7 @@ More information on how to share your SAP HANA Cloud instance with your Kyma Clu **Cloud Foundry** (only) -More information on how to share your SAP HANA Cloud instance with your Cloud Foundry environment can be found in the following SAP Help document [(click here)](https://help.sap.com/docs/hana-cloud/sap-hana-cloud-administration-guide/map-sap-hana-database-to-another-environment-context?locale=en-US). Similar features are also offered by the **SAP HANA Cloud Tools**, which can also be used to map an existing SAP HANA Cloud instance to your Cloud Foundry landscape. +More information on how to share your SAP HANA Cloud instance with your Cloud Foundry environment can be found in the following SAP Help document ([click here](https://help.sap.com/docs/hana-cloud/sap-hana-cloud-administration-guide/map-sap-hana-database-to-another-environment-context?locale=en-US)). Similar features are also offered by the **SAP HANA Cloud Tools**, which can also be used to map an existing SAP HANA Cloud instance to your Cloud Foundry landscape. [](./images/HanaCloudCf.png?raw=true) diff --git a/docu/2-basic/3-kyma-build-docker-images/README.md b/docu/2-basic/3-kyma-build-docker-images/README.md index c17c0cb..da737e7 100644 --- a/docu/2-basic/3-kyma-build-docker-images/README.md +++ b/docu/2-basic/3-kyma-build-docker-images/README.md @@ -31,8 +31,8 @@ If you are facing any issues during the following steps of our tutorial, please First of all, you will need Node.js installed on your device. You can find the latest LTS (long-term support) version ([here](https://nodejs.org/en/download/)). To conduct the upcoming steps, you also need the following tools installed on your device. Follow the linked instructions based on your system environment. -- Docker (https://docs.docker.com/get-docker/) - To follow this tutorial on Kyma, you will require an application that allows you to handle container images on your computer, including functions like building, pushing, pulling, and running them. -- Pack CLI (https://buildpacks.io/docs/install-pack/) - By utilizing Pack, you can construct container images based on collectively maintained base images, resulting in a more straightforward process for maintaining and updating them. +- Docker ([https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/)) - To follow this tutorial on Kyma, you will require an application that allows you to handle container images on your computer, including functions like building, pushing, pulling, and running them. +- Pack CLI ([https://buildpacks.io/docs/install-pack/](https://buildpacks.io/docs/install-pack/)) - By utilizing Pack, you can construct container images based on collectively maintained base images, resulting in a more straightforward process for maintaining and updating them. > **Installation Shortcuts**
> **MacOS** - brew install buildpacks/tap/pack
> **Windows** - choco install pack diff --git a/docu/2-basic/3-kyma-deploy-application/README.md b/docu/2-basic/3-kyma-deploy-application/README.md index 09daa9c..60c327f 100644 --- a/docu/2-basic/3-kyma-deploy-application/README.md +++ b/docu/2-basic/3-kyma-deploy-application/README.md @@ -228,10 +228,8 @@ Let's get started with the preparation of our **Helm deployment** or **Helm inst > This will return the required result like *a1b2c3.kyma.ondemand.com*. *a1b2c3* is a placeholder for a string of characters that’s unique for your cluster (the so-called **shootName** which we need in the next step). * shootName - The unique shoot name of your Kyma Cluster. - > **Hint** - As Kyma is based on [Gardener](https://gardener.cloud/), the managed Clusters are also called **Shoot**-Clusters (flower analogy). In our sample the **shootName** parameter, ensures the uniqueness of application registered in the SAP BTP SaaS Registry. As the SaaS application names registered in the SaaS registry need to be unique across a SAP BTP region (e.g. eu10), the shootName of your Kyma cluster will be part of that SaaS application names. This ensures you are not colliding with any other developer deploying the sample application. To get the **shootName** of your Kyma Cluster, run the following kubectl command: - > - > **kubectl get configMaps/shoot-info -n kube-system -o jsonpath='{.data.shootName}'** - > + > **Hint** - As Kyma is based on [Gardener](https://gardener.cloud/), the managed Clusters are also called **Shoot**-Clusters (flower analogy). In our sample the **shootName** parameter, ensures the uniqueness of application registered in the SAP BTP SaaS Registry. As the SaaS application names registered in the SaaS registry need to be unique across a SAP BTP region (e.g. eu10), the shootName of your Kyma cluster will be part of that SaaS application names. This ensures you are not colliding with any other developer deploying the sample application. To get the **shootName** of your Kyma Cluster, run the following kubectl command:

+ > **kubectl get configMaps/shoot-info -n kube-system -o jsonpath='{.data.shootName}'**

> In a productive SAP BTP landscape, your **shootName** will always starts with a letter like *a1b2c3* or with the prefix **c-** like c-1b2c3d4*. @@ -257,14 +255,11 @@ Let's get started with the preparation of our **Helm deployment** or **Helm inst * image.tag - Provide the tag of your container image if you do not want to use the latest image. * config.serviceId & planId(s) - Generate and provide unique GUIDs for your service plans and the broker itself. - > **Important** - We recommend to generate custom GUIDs using your command line or available online generators. You can run the following script from the *code/broker* directory, which will generate new GUIDs as part of a new */code/broker/catalog-private.json* file which can be used for this requirement. This file can remain in your directory for your reference and will not be committed to GitHub.
- - ```sh - ## Run in ./code/broker** # - cp catalog.json catalog-private.json - npx --yes -p @sap/sbf gen-catalog-ids catalog-private.json - cat catalog-private.json - ``` + > **Important** - We recommend to generate custom GUIDs using your command line or available online generators. You can run the following script from the *code/broker* directory, which will generate new GUIDs as part of a new */code/broker/catalog-private.json* file which can be used for this requirement. This file can remain in your directory for your reference and will not be committed to GitHub.

+ > \#\# Run in ./code/broker \#\#
+ > cp catalog.json catalog-private.json
+ > npx --yes -p @sap/sbf gen-catalog-ids catalog-private.json
+ > cat catalog-private.json **hana_deployer** diff --git a/docu/4-expert/-Kyma-/custom-domain-usage/README.md b/docu/4-expert/-Kyma-/custom-domain-usage/README.md index 1b5a677..5f813ea 100644 --- a/docu/4-expert/-Kyma-/custom-domain-usage/README.md +++ b/docu/4-expert/-Kyma-/custom-domain-usage/README.md @@ -129,7 +129,7 @@ customDomain: istioGatewayServiceIP: "" issuer: - email: a.dedeoglu@sap.com + email: john.doe@example.org ``` Let us take a look at the parameters one-by-one. diff --git a/docu/4-expert/0-introduction-expert-features/README.md b/docu/4-expert/0-introduction-expert-features/README.md index 069b5df..81d81ae 100644 --- a/docu/4-expert/0-introduction-expert-features/README.md +++ b/docu/4-expert/0-introduction-expert-features/README.md @@ -28,7 +28,8 @@ The **Expert Features** will cover topics from backups of Tenant database contai ### Kyma & Cloud Foundry * Local and hybrid development - ([click here](../local-hybrid-development/README.md)) -* Tenant onboarding with Terraform - ([click here](../btp-terraform-setup/README.md)) +* Terraform automation setup - ([click here](../btp-terraform-setup/README.md)) +* Self-Onboarding of SaaS tenants - ([click here](../saas-self-onboarding/README.md)) * Custom domain for SAP IAS - ([click here](../custom-domain-for-ias/README.md)) * Send emails using Microsoft Graph - ([click here](../send-emails-graph-api/README.md)) * Feature Toggles - ([click here](../feature-toggles/README.md)) diff --git a/docu/4-expert/send-emails-graph-api/README.md b/docu/4-expert/send-emails-graph-api/README.md index 0dc4825..41e46b9 100644 --- a/docu/4-expert/send-emails-graph-api/README.md +++ b/docu/4-expert/send-emails-graph-api/README.md @@ -1,17 +1,18 @@ -d# Send e-mails using Microsoft Graph +# Send e-mails using Microsoft Graph - **Kyma** ✅ - **Cloud Foundry** ✅ In this tutorial, you will learn how to send e-mails from your SaaS application using the Microsoft Graph API and Exchange Online. This can be useful in scenarios requiring automated messages sent to users from within your application. This is just one approach how to programmatically send e-mails using popular Microsoft services. Alternatively, you might think about configuring a destination to your SMTP server or using similar services offered by other providers like AWS Simple Email Service (SES) or SendGrid. -- [1. Introduction](#1-introduction) -- [2. Prerequisites](#2-prerequisites) -- [3. Create a Shared Mailbox](#3-create-a-shared-mailbox) -- [4. Create an Application Registration](#4-create-an-application-registration) -- [5. Test the sample application](#5-test-the-sample-application) -- [6. Resource Owner Password Flow](#6-resource-owner-password-flow) -- [7. Further Information](#7-further-information) +- [Send e-mails using Microsoft Graph](#send-e-mails-using-microsoft-graph) + - [1. Introduction](#1-introduction) + - [2. Prerequisites](#2-prerequisites) + - [3. Create a Shared Mailbox](#3-create-a-shared-mailbox) + - [4. Create an Application Registration](#4-create-an-application-registration) + - [5. Test the sample application](#5-test-the-sample-application) + - [6. Resource Owner Password Flow](#6-resource-owner-password-flow) + - [7. Further Information](#7-further-information) > **Important** - The below sample approach works with a very powerful Graph API permission on Application-level. In a productive environment, this permission should be immediately restricted after setup, to prevent misuse by application developers. Otherwise, this setup allows anyone in possession of the respective credentials to send e-mails on behalf of any Active Directory user! Please follow the official Microsoft documentation ([click here](https://learn.microsoft.com/en-us/graph/auth-limit-mailbox-access)) to set up a corresponding restriction.