Generated sample from henglu examples

This commit is contained in:
Tom Archer 2024-02-06 06:00:35 -08:00 committed by lonegunmanb
parent 482e26632b
commit 4958b3bdff
5 changed files with 243 additions and 0 deletions

View File

@ -0,0 +1,28 @@
# Azure API Management
This template deploys an Azure API Management service, containing an API based on a provided Open API spec, a Group, and a Product that is associated with both.
## Terraform resource types
- [random_pet](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet)
- [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group)
- [random_string](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string)
- [azurerm_api_management](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management)
- [azurerm_api_management_api](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_api)
- [azurerm_api_management_product](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_product)
- [azurerm_api_management_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_group)
- [azurerm_api_management_product_api](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_product_api)
- [azurerm_api_management_product_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management_product_group)
## Variables
| Name | Description | Default |
|-|-|-|
| `resource_group_name_prefix` | Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription. | rg |
| `resource_group_location` | Location of the resource group. | eastus |
| `open_api_spec_content_format` | The format of the content from which the API Definition should be imported. Possible values are: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link. | "" |
| `open_api_spec_content_value` | The Content from which the API Definition should be imported. When a content_format of *-link-* is specified this must be a URL, otherwise this must be defined inline. | "" |
## Example
[Quickstart: Deploy an Azure API Management service](https://learn.microsoft.com/azure/api-management/deploy-api-management-service-terraform)

View File

@ -0,0 +1,110 @@
resource "random_pet" "rg_name" {
prefix = var.resource_group_name_prefix
}
resource "azurerm_resource_group" "rg" {
location = var.resource_group_location
name = random_pet.rg_name.id
}
resource "random_string" "apim_service_name" {
length = 8
lower = true
numeric = false
special = false
upper = false
}
resource "azurerm_api_management" "apim_service" {
name = "${random_string.apim_service_name.result}-apim-service"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
publisher_name = "Example Publisher"
publisher_email = "publisher@example.com"
sku_name = "Developer_1"
tags = {
Environment = "Example"
}
policy {
xml_content = <<XML
<policies>
<inbound />
<backend />
<outbound />
<on-error />
</policies>
XML
}
}
resource "random_string" "api_name" {
length = 8
lower = true
numeric = false
special = false
upper = false
}
resource "azurerm_api_management_api" "api" {
name = "${random_string.api_name.result}-api"
resource_group_name = azurerm_resource_group.rg.name
api_management_name = azurerm_api_management.apim_service.name
revision = "1"
display_name = "${random_string.api_name.result}-api"
path = "example"
protocols = ["https", "http"]
description = "An example API"
import {
content_format = var.open_api_spec_content_format
content_value = var.open_api_spec_content_value
}
}
resource "random_string" "product_name" {
length = 8
lower = true
numeric = false
special = false
upper = false
}
resource "azurerm_api_management_product" "product" {
product_id = "${random_string.product_name.result}-product"
resource_group_name = azurerm_resource_group.rg.name
api_management_name = azurerm_api_management.apim_service.name
display_name = "${random_string.product_name.result}-product"
subscription_required = true
approval_required = false
published = true
description = "An example Product"
}
resource "random_string" "group_name" {
length = 8
lower = true
numeric = false
special = false
upper = false
}
resource "azurerm_api_management_group" "group" {
name = "${random_string.group_name.result}-group"
resource_group_name = azurerm_resource_group.rg.name
api_management_name = azurerm_api_management.apim_service.name
display_name = "${random_string.group_name.result}-group"
description = "An example group"
}
resource "azurerm_api_management_product_api" "product_api" {
resource_group_name = azurerm_resource_group.rg.name
api_management_name = azurerm_api_management.apim_service.name
product_id = azurerm_api_management_product.product.product_id
api_name = azurerm_api_management_api.api.name
}
resource "azurerm_api_management_product_group" "product_group" {
resource_group_name = azurerm_resource_group.rg.name
api_management_name = azurerm_api_management.apim_service.name
product_id = azurerm_api_management_product.product.product_id
group_name = azurerm_api_management_group.group.name
}

View File

@ -0,0 +1,60 @@
output "resource_group_name" {
value = azurerm_resource_group.rg.name
}
output "apim_service_name" {
value = azurerm_api_management.apim_service.name
}
output "api_name" {
value = azurerm_api_management_api.api.name
}
output "product_name" {
value = azurerm_api_management_product.product.product_id
}
output "group_name" {
value = azurerm_api_management_group.group.name
}
output "service_id" {
description = "The ID of the API Management Service created"
value = azurerm_api_management.apim_service.id
}
output "gateway_url" {
description = "The URL of the Gateway for the API Management Service"
value = azurerm_api_management.apim_service.gateway_url
}
output "service_public_ip_addresses" {
description = "The Public IP addresses of the API Management Service"
value = azurerm_api_management.apim_service.public_ip_addresses
}
output "api_outputs" {
description = "The IDs, state, and version outputs of the APIs created"
value = {
id = azurerm_api_management_api.api.id
is_current = azurerm_api_management_api.api.is_current
is_online = azurerm_api_management_api.api.is_online
version = azurerm_api_management_api.api.version
version_set_id = azurerm_api_management_api.api.version_set_id
}
}
output "product_ids" {
description = "The ID of the Product created"
value = azurerm_api_management_product.product.id
}
output "product_api_ids" {
description = "The ID of the Product/API association created"
value = azurerm_api_management_product_api.product_api.id
}
output "product_group_ids" {
description = "The ID of the Product/Group association created"
value = azurerm_api_management_product_group.product_group.id
}

View File

@ -0,0 +1,18 @@
terraform {
required_version = ">=1.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
random = {
source = "hashicorp/random"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
}

View File

@ -0,0 +1,27 @@
variable "resource_group_name_prefix" {
type = string
default = "rg"
description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
}
variable "resource_group_location" {
type = string
default = "eastus"
description = "Location of the resource group."
}
variable "open_api_spec_content_format" {
type = string
default = ""
description = "The format of the content from which the API Definition should be imported. Possible values are: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link."
validation {
condition = contains(["openapi", "openapi+json", "openapi+json-link", "openapi-link", "swagger-json", "swagger-link-json", "wadl-link-json", "wadl-xml", "wsdl", "wsdl-link"], var.open_api_spec_content_format)
error_message = "open_api_spec_content_format must be one of the following: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link."
}
}
variable "open_api_spec_content_value" {
type = string
default = ""
description = "The Content from which the API Definition should be imported. When a content_format of *-link-* is specified this must be a URL, otherwise this must be defined inline."
}