diff --git a/README.md b/README.md index c93ad13..4bd66c6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This repository provides a playground to safely experiment with and learn Azure _If you are interested in APIM & Azure OpenAI integrations, please check out the excellent [AI Gateway](https://github.com/Azure-Samples/AI-Gateway) GitHub repository._ -## Objectives +## ๐ŸŽฏ Objectives 1. Educate you on common APIM architectures we see across industries and customers. 1. Empower you to safely experiment with APIM policies. @@ -16,9 +16,9 @@ _Try it out, learn from it, apply it in your setups._ --- -## Getting Started +## ๐Ÿš€ Getting Started -### Prerequisites +### ๐Ÿ“‹ Prerequisites These prerequisites apply broadly across all infrastructure and samples. If there are specific deviations, expect them to be noted there. @@ -29,7 +29,7 @@ These prerequisites apply broadly across all infrastructure and samples. If ther - [An Azure Subscription](https://azure.microsoft.com/free/) with Owner or Contributor+UserAccessAdministrator permissions. Execute [shared/jupyter/verify-az-account.ipynb](shared/jupyter/verify-az-account.ipynb) to verify. - [Sign in to Azure with Azure CLI](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively) -### Initialization +### ๐Ÿ› ๏ธ Initialization Run through the following steps to create a Python virtual environment before doing anything else: @@ -43,7 +43,7 @@ Run through the following steps to create a Python virtual environment before do The first time you run a Jupyter notebook, you'll be asked to install the Jupyter kernel package (ipykernel). -### List of Samples +### ๐Ÿ“ List of Samples | Sample Name | Description | Supported Infrastructure(s) | |:-----------------|:----------------------------------------------------------------------------|:-------------------------------------------| @@ -51,7 +51,7 @@ The first time you run a Jupyter notebook, you'll be asked to install the Jupyte | [Load Balancing](./samples/load-balancing/create.ipynb) | Priority and weighted load balancing across backends. | apim-aca, afd-apim (with ACA) | | [AuthX](./samples/authx/create.ipynb) | Authentication and role-based authorization in a mock HR API. | All infrastructures | -### Running a Sample +### โ–ถ๏ธ Running a Sample 1. Locate the specific sample's `create.ipynb` file and adjust the parameters under the `User-defined Parameters` header as you see fit. 1. Ensure that the specified infrastructure already exists in your subscription. If not, proceed to the desired infrastructure folder and execute its `create.ipynb` file. Wait until this completes before continuing. @@ -61,9 +61,9 @@ Now that infrastructure and sample have been stood up, you can experiment with t --- -## Repo Structure +## ๐Ÿ“‚ Repo Structure -### High-level +### ๐Ÿฆ… High-level - All _samples_ can be found in the `samples` folder. Samples showcase functionality and provide a baseline for your experimentation. - All _infrastructures_ can be found in the `infrastructure` folder. They provide the architectural underpinnings. @@ -73,14 +73,14 @@ Now that infrastructure and sample have been stood up, you can experiment with t - Reusable _APIM policies_ are found in the `apim-policies` folder. - Reusable Jupyter notebooks are found in the `jupyter` folder. -### Sample Setup +### โš™๏ธ Sample Setup - Each sample uses an architecture infrastructure. This keeps the samples free of almost all setup. - Each infrastructure and sample features a `create.ipynb` for creation (and running) of the sample setup and a `main.bicep` file for IaC configuration. - Each infrastructure contains a `clean-up.ipynb` file to tear down everything in the infrastructure and its resource group. This reduces your Azure cost. - Samples (and infrastructures) may contain additional files specific to their use cases. -### Infrastructure Architectures +### ๐Ÿ›๏ธ Infrastructure Architectures We provide several common architectural approaches to integrating APIM into your Azure ecosystem. While these are high-fidelity setups, they are not production-ready. Please refer to the [Azure API Management landing zone accelerator](https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/landing-zone-accelerator) for up-to-date production setups. @@ -95,7 +95,7 @@ We provide several common architectural approaches to integrating APIM into your --- -## Development +## ๐Ÿ› ๏ธ Development As you work with this repo, you will likely want to make your own customizations. There's little you need to know to be successful. @@ -103,7 +103,7 @@ The repo uses the bicep linter and has rules defined in `bicepconfig.json`. See **We welcome contributions!** Please consider forking the repo and creating issues and pull requests to share your samples. Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details. Thank you! -### Adding a Sample +### โž• Adding a Sample Adding a new sample is relatively straight-forward. @@ -115,11 +115,11 @@ Adding a new sample is relatively straight-forward. 1. Test the sample with all supported infrastructures. 1. Create a pull request for merge. -### Testing & Code Coverage +### ๐Ÿงช Testing & Code Coverage Python modules in `shared/python` are covered by comprehensive unit tests located in `tests/python`. All tests use [pytest](https://docs.pytest.org/) and leverage modern pytest features, including custom markers for unit and HTTP tests. -#### Running Tests Locally +#### ๐Ÿš€ Running Tests Locally - **PowerShell (Windows):** - Run all tests with coverage: `./tests/python/run_tests.ps1` @@ -136,18 +136,18 @@ You can also run tests manually and see details in the console: pytest -v --cov=shared/python --cov-report=html:tests/python/htmlcov --cov-report=term tests/python ``` -#### Viewing Coverage Reports +#### ๐Ÿ“Š Viewing Coverage Reports After running tests, open `tests/python/htmlcov/index.html` in your browser to view detailed coverage information. -#### Pytest Markers +#### ๐Ÿท๏ธ Pytest Markers - `@pytest.mark.unit` โ€” marks a unit test - `@pytest.mark.http` โ€” marks a test involving HTTP/mocking Markers are registered in `pytest.ini` to avoid warnings. -#### Continuous Integration (CI) +#### โšก Continuous Integration (CI) On every push or pull request, GitHub Actions will: - Install dependencies @@ -155,7 +155,7 @@ On every push or pull request, GitHub Actions will: - Store the `.coverage` file in `tests/python` - Upload the HTML coverage report as a workflow artifact for download -#### Additional Notes +#### ๐Ÿ“ Additional Notes - The `.gitignore` is configured to exclude coverage output and artifacts. - All test and coverage features work both locally and in CI. @@ -164,13 +164,13 @@ For more details on pytest usage, see the [pytest documentation](https://docs.py --- -## Supporting Resources +## ๐Ÿ“š Supporting Resources The APIM team maintains an [APIM policy snippets repo](https://github.com/Azure/api-management-policy-snippets) with use cases we have seen. They are not immediately executable samples and require integrations such as in this repo. --- -## Acknowledgements +## ๐Ÿ™ Acknowledgements This project has its roots in work done by [Alex Vieira](https://github.com/vieiraae) on the excellent Azure API Management [AI Gateway](https://github.com/Azure-Samples/AI-Gateway) GitHub repository. Much of the structure is similar and its reuse resulted in significant time savings. Thank you, Alex! diff --git a/assets/APIM-Samples-199x163.png b/assets/APIM-Samples-199x163.png new file mode 100644 index 0000000..f1d0688 Binary files /dev/null and b/assets/APIM-Samples-199x163.png differ diff --git a/assets/APIM-Samples.pdn b/assets/APIM-Samples.pdn new file mode 100644 index 0000000..63af466 Binary files /dev/null and b/assets/APIM-Samples.pdn differ diff --git a/assets/APIM-Samples.png b/assets/APIM-Samples.png new file mode 100644 index 0000000..eebc715 Binary files /dev/null and b/assets/APIM-Samples.png differ diff --git a/infrastructure/afd-apim/README.md b/infrastructure/afd-apim/README.md index 547f67c..95a27b6 100644 --- a/infrastructure/afd-apim/README.md +++ b/infrastructure/afd-apim/README.md @@ -4,17 +4,17 @@ Secure architecture that takes all traffic off the public Internet once Azure Fr Diagram showing Azure Front Door, API Management, and Container Apps architecture. Azure Front Door routes traffic to API Management, which then routes to Container Apps. Telemetry is sent to Azure Monitor. -## Objectives +## ๐ŸŽฏ Objectives 1. Provide a secure pathway to API Management via a private link from Front Door 1. Maintain private networking by integrating API Management with a VNet to communicate with Azure Container Apps. (This can also be achieved via a private link there) 1. Empower users to use Azure Container Apps, if desired 1. Enable observability by sending telemetry to Azure Monitor -## Configuration +## โš™๏ธ Configuration Adjust the `user-defined parameters` in this lab's Jupyter Notebook's [Initialize notebook variables](./create.ipynb#initialize-notebook-variables) section. -## Execution +## โ–ถ๏ธ Execution 1. Execute this lab's [Jupyter Notebook](./create.ipynb) step-by-step or via _Run All_. \ No newline at end of file diff --git a/infrastructure/afd-apim/create.ipynb b/infrastructure/afd-apim/create.ipynb index 4675edf..1030b70 100644 --- a/infrastructure/afd-apim/create.ipynb +++ b/infrastructure/afd-apim/create.ipynb @@ -15,7 +15,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", @@ -83,7 +83,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -124,7 +124,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Approve Front Door private link connection to APIM\n", + "### ๐Ÿ”— 3. Approve Front Door private link connection to APIM\n", "\n", "In the deployed Bicep template, Azure Front Door will establish a private link connection to the API Management service. This connection should be approved. Run the following command to approve the connection." ] @@ -170,7 +170,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success via API Management\n", + "### โœ… 4. Verify API Request Success via API Management\n", "\n", "As we have not yet disabled public access to APIM, this request should succeed with a **200**." ] @@ -196,7 +196,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Disabling API Management public network access\n", + "### ๐Ÿ”’ 5. Disabling API Management public network access\n", "\n", "The initial `APIM` service deployment above cannot disable public network access. It must be disabled subsequently below." ] @@ -231,7 +231,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success via Azure Front Door & Failure with API Management\n", + "### โœ… 6. Verify API Request Success via Azure Front Door & Failure with API Management\n", "\n", "At this time only requests through Front Door should be successful and return a **200**. Requests to APIM that worked previously should result in a **403**." ] @@ -269,8 +269,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "### Clean up resources\n", + "### ๐Ÿ—‘๏ธ Clean up resources\n", "\n", "When you're finished experimenting, it's advisable to remove all associated resources from Azure to avoid unnecessary cost.\n", "Use the [clean-up notebook](clean-up.ipynb) for that." diff --git a/infrastructure/apim-aca/README.md b/infrastructure/apim-aca/README.md index 862b705..4f2b92a 100644 --- a/infrastructure/apim-aca/README.md +++ b/infrastructure/apim-aca/README.md @@ -4,16 +4,16 @@ This architecture secures API traffic by routing requests through Azure API Mana Diagram showing Azure API Management and Container Apps architecture. API Management routes traffic to Container Apps. Telemetry is sent to Azure Monitor. -## Objectives +## ๐ŸŽฏ Objectives 1. Provide a secure API gateway using Azure API Management 1. Integrate API Management with Azure Container Apps for backend services 1. Enable observability by sending telemetry to Azure Monitor -## Configuration +## โš™๏ธ Configuration Adjust the `user-defined parameters` in this lab's Jupyter Notebook's [Initialize notebook variables](./create.ipynb#initialize-notebook-variables) section. -## Execution +## โ–ถ๏ธ Execution 1. Execute this lab's [Jupyter Notebook](./create.ipynb) step-by-step or via _Run All_. \ No newline at end of file diff --git a/infrastructure/apim-aca/create.ipynb b/infrastructure/apim-aca/create.ipynb index 21f8216..6ee828a 100644 --- a/infrastructure/apim-aca/create.ipynb +++ b/infrastructure/apim-aca/create.ipynb @@ -17,7 +17,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", @@ -76,7 +76,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -114,7 +114,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success\n", + "### โœ… 3. Verify API Request Success\n", "\n", "Assert that the deployment was successful by making simple calls to APIM. " ] @@ -141,8 +141,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "### Clean up resources\n", + "### ๐Ÿ—‘๏ธ Clean up resources\n", "\n", "When you're finished experimenting, it's advisable to remove all associated resources from Azure to avoid unnecessary cost.\n", "Use the [clean-up notebook](clean-up.ipynb) for that." diff --git a/infrastructure/simple-apim/README.md b/infrastructure/simple-apim/README.md index e21dbd0..09419c4 100644 --- a/infrastructure/simple-apim/README.md +++ b/infrastructure/simple-apim/README.md @@ -4,15 +4,15 @@ This architecture provides a basic API gateway using Azure API Management, suita Diagram showing a simple Azure API Management architecture. API Management acts as a gateway for API consumers. Telemetry is sent to Azure Monitor. -## Objectives +## ๐ŸŽฏ Objectives 1. Provide the simplest Azure API Management infrastructure with a public ingress to allow for easy testing 1. Enable observability by sending telemetry to Azure Monitor -## Configuration +## โš™๏ธ Configuration Adjust the `user-defined parameters` in this lab's Jupyter Notebook's [Initialize notebook variables](./create.ipynb#initialize-notebook-variables) section. -## Execution +## โ–ถ๏ธ Execution 1. Execute this lab's [Jupyter Notebook](./create.ipynb) step-by-step or via _Run All_. \ No newline at end of file diff --git a/infrastructure/simple-apim/create.ipynb b/infrastructure/simple-apim/create.ipynb index 80acba0..d1e7c42 100644 --- a/infrastructure/simple-apim/create.ipynb +++ b/infrastructure/simple-apim/create.ipynb @@ -15,7 +15,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", @@ -59,7 +59,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -95,7 +95,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success\n", + "### โœ… 3. Verify API Request Success\n", "\n", "Assert that the deployment was successful by making simple calls to APIM. " ] @@ -119,8 +119,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "### Clean up resources\n", + "### ๐Ÿ—‘๏ธ Clean up resources\n", "\n", "When you're finished experimenting, it's advisable to remove all associated resources from Azure to avoid unnecessary cost.\n", "Use the [clean-up notebook](clean-up.ipynb) for that." diff --git a/samples/_TEMPLATE/create.ipynb b/samples/_TEMPLATE/create.ipynb index 83057be..2d3d601 100644 --- a/samples/_TEMPLATE/create.ipynb +++ b/samples/_TEMPLATE/create.ipynb @@ -12,21 +12,21 @@ "\n", "โŒš **Expected *Run All* runtime (excl. infrastructure prerequisite): ~[NOTEBOOK RUNTIME] minute**\n", "\n", - "## Objectives\n", + "## ๐ŸŽฏ Objectives\n", "\n", "1. [LEARNING / EXPERIMENTATION OBJECTIVE 1]\n", "1. [LEARNING / EXPERIMENTATION OBJECTIVE 2]\n", "1. ...\n", "\n", - "## Scenario\n", + "## ๐Ÿ“ Scenario\n", "\n", "[IF THE SAMPLE IS DEMONSTRATED THROUGH A USE CASE OR SCENARIO, PLEASE DETAIL IT HERE. OTHERWISE, DELETE THIS SECTION]\n", "\n", - "## Lab Components\n", + "## ๐Ÿงฉ Lab Components\n", "\n", "[DESCRIBE IN MORE DETAIL WHAT THIS LAB SETS UP AND HOW THIS BENEFITS THE LEARNER/USER.]\n", "\n", - "## Configuration\n", + "## โš™๏ธ Configuration\n", "\n", "1. Decide which of the [Infrastructure Architectures](../../README.md#infrastructure-architectures) you wish to use.\n", " 1. If the infrastructure _does not_ yet exist, navigate to the desired [infrastructure](../../infrastructure/) folder and follow its README.md.\n", @@ -37,7 +37,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", @@ -88,7 +88,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -128,7 +128,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success\n", + "### โœ… 3. Verify API Request Success\n", "\n", "Assert that the deployment was successful by making simple calls to APIM. \n", "\n", diff --git a/samples/authX/create.ipynb b/samples/authX/create.ipynb index 33d3158..1f342a9 100644 --- a/samples/authX/create.ipynb +++ b/samples/authX/create.ipynb @@ -6,20 +6,20 @@ "source": [ "# Samples: AuthX - Authentication & Authorization\n", "\n", - "[BRIEF SAMPLE DESCRIPTION]\n", + "Sets up a simple authentication (authN) and authorization (authZ) combination for role-based access control (RBAC) to a mock _Employees_ API and its operations.\n", "\n", "โš™๏ธ **Supported infrastructures**: All infrastructures\n", "\n", "โŒš **Expected *Run All* runtime (excl. infrastructure prerequisite): ~2-3 minutes**\n", "\n", - "## Objectives\n", + "## ๐ŸŽฏ Objectives\n", "\n", "1. Understand how API Management supports OAuth 2.0 authentication (authN) with JSON Web Tokens (JWT).\n", "1. Learn how authorization (authZ) can be accomplished based on JWT claims.\n", "1. Configure authN and authZ at various levels in the API Management hierarchy.\n", "1. Use external secrets in policies.\n", "\n", - "## Scenario\n", + "## ๐Ÿ“ Scenario\n", "\n", "This sample combines _authentication (authN)_ and _authorization (authZ)_ into _authX_. This scenario focuses on a Human Resources API that requires privileged role-based access to GET and to POST data. This is simplistic but shows the combination of authN and authZ.\n", "\n", @@ -30,11 +30,11 @@ "\n", "Both personas are part of an HR_Members group and may access the HR API Management Product. Subsequent access to the APIs and their operations must be granular.\n", "\n", - "### Notes\n", + "### ๐Ÿ’ก Notes\n", "\n", "Many organizations require 100% authentication for their APIs. While that is prudent and typically done at the global _All APIs_ level, we refrain from doing so here as to not impact other samples. Instead, we focus on authentication at the API Management API and API operation levels.\n", "\n", - "## Lab Components\n", + "## ๐Ÿงฉ Lab Components\n", "\n", "While OAuth 2.0 includes an identity provider (IDP), for sake of the sample, we can remove the complexity of including real identities. It is sufficient to use mock JWTs that we can \"authenticate\" by way of a signing key. This is a valid, albeit not the default method for authentication. \n", "\n", @@ -42,9 +42,11 @@ "\n", "Furthermore, secrets would ideally be kept in a secret store such as Azure Key Vault and be accessed via API Management's managed identity. Adding a Key Vault to our architecture is a stretch goal that provides value but is not immediately necessary to showcase the authX sample.\n", "\n", - "JSON Web Tokens are defined in [RFC 7519](https://www.rfc-editor.org/rfc/rfc7519). Two websites to use with JWTs are [Okta's](https://jwt.io/) and [Microsoft's](https://jwt.ms/). Okta's may be preferential due to its features.\n", + "JSON Web Tokens (JWTs) are defined in RFC 7519. Several tools exist to explore JWTs:\n", "\n", - "## Configuration\n", + "๐Ÿ”— [RFC 7519 - JWT](https://www.rfc-editor.org/rfc/rfc7519) | [jwt.io](https://jwt.io/) | [jwt.ms](https://jwt.ms/)\n", + "\n", + "## โš™๏ธ Configuration\n", "\n", "1. Decide which of the [Infrastructure Architectures](../../README.md#infrastructure-architectures) you wish to use.\n", " 1. If the infrastructure _does not_ yet exist, navigate to the desired [infrastructure](../../infrastructure/) folder and follow its README.md.\n", @@ -55,13 +57,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", - "[ADD ANY SPECIAL INSTRUCTIONS]\n", - "\n", - "**Modify entries under _1) User-defined parameters_ and _3) Define the APIs and their operations and policies_**." + "๐Ÿ‘‰ **Modify entries under _1) User-defined parameters_ and _3) Define the APIs and their operations and policies_**." ] }, { @@ -131,7 +131,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -172,7 +172,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success\n", + "### โœ… 3. Verify API Request Success\n", "\n", "Assert that the deployment was successful by making simple calls to APIM. \n", "\n", diff --git a/samples/general/create.ipynb b/samples/general/create.ipynb index cd9b3af..d5fdf03 100644 --- a/samples/general/create.ipynb +++ b/samples/general/create.ipynb @@ -12,13 +12,13 @@ "\n", "โŒš **Expected *Run All* runtime (excl. infrastructure prerequisite): ~1 minute**\n", "\n", - "## Objectives\n", + "## ๐ŸŽฏ Objectives\n", "\n", "1. Experience a variety of policies in any of the infrastructure architectures. You may see several examples from our [APIM policy snippets repo](https://github.com/Azure/api-management-policy-snippets).\n", "1. Become proficient with how policies operate.\n", "1. Gain confidence in setting up and configuring policies appropriately.\n", "\n", - "## Configuration\n", + "## โš™๏ธ Configuration\n", "\n", "1. Decide which of the [Infrastructure Architectures](../../README.md#infrastructure-architectures) you wish to use.\n", " 1. If the infrastructure _does not_ yet exist, navigate to the desired [infrastructure](../../infrastructure/) folder and follow its README.md.\n", diff --git a/samples/load-balancing/create.ipynb b/samples/load-balancing/create.ipynb index d0f98eb..0757d7c 100644 --- a/samples/load-balancing/create.ipynb +++ b/samples/load-balancing/create.ipynb @@ -12,13 +12,13 @@ "\n", "โŒš **Expected *Run All* runtime (excl. infrastructure prerequisite): ~3 minutes**\n", "\n", - "## Objectives\n", + "## ๐ŸŽฏ Objectives\n", "\n", "1. Understand how backends can be configured to balance load in a prioritized, weighted manner.\n", "1. Learn how circuit breakers aid with load balancing.\n", "1. Configure how retries in API Management policies can result in more successful requests.\n", "\n", - "## Lab Components\n", + "## ๐Ÿงฉ Lab Components\n", "\n", "This lab integrates into an existing Azure Container Apps architecture and sets up the following:\n", "\n", @@ -26,7 +26,7 @@ "- Three separate backends are set up in APIM that each point to a different endpoint on this container app (e.g. /api/0, /api/1, etc.).\n", "- Four separate backend pool with varying load balancer setups are configured using these three backends.\n", "\n", - "## Configuration\n", + "## โš™๏ธ Configuration\n", "\n", "1. Decide which of the [Infrastructure Architectures](../../README.md#infrastructure-architectures) you wish to use.\n", " 1. If the infrastructure _does not_ yet exist, navigate to the desired [infrastructure](../../infrastructure/) folder and follow its README.md.\n", @@ -37,7 +37,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Initialize notebook variables\n", + "### ๐Ÿ› ๏ธ 1. Initialize notebook variables\n", "\n", "Configures everything that's needed for deployment. \n", "\n", @@ -94,7 +94,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create deployment using Bicep\n", + "### ๐Ÿš€ 2. Create deployment using Bicep\n", "\n", "Creates the bicep deployment into the previously-specified resource group. A bicep parameters file will be created prior to execution." ] @@ -135,7 +135,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Verify API Request Success\n", + "### โœ… 3. Verify API Request Success\n", "\n", "Assert that the deployment was successful by making simple calls to Azure Front Door or API Management." ]