-
Notifications
You must be signed in to change notification settings - Fork 77
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Configure and deploy an Azure App Service (#74)
* Add App Service to Azure using Terraform Templates * Add App Service under App Service Plan module * Remove additional files for app-service created * Add public Ip and load balancer to app service * Resolve merge issues with master * Remove Optional and Required from variables.tf * Update variables.tf * App service acts as load balancer * Add App Service as an independent module * Fix Merge conflicts * Add multiple App Service Deployment Changes * Add type for every variable in variables.tf * Update to documentation for usage * Integrate review comments for Docker credentials * Create app service map with image tags
- Loading branch information
1 parent
0de406e
commit 2c993ab
Showing
7 changed files
with
168 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
## Azure App Service | ||
|
||
Build, deploy, and scale enterprise-grade web, mobile, and API apps running on any platform. Meet rigorous performance, scalability, security and compliance requirements while using a fully managed platform to perform infrastructure maintenance. | ||
|
||
More information for Azure App Services can be found [here](https://azure.microsoft.com/en-us/services/app-service/) | ||
|
||
Cobalt gives ability to specify following settings for App Service based on the requirements: | ||
- name : The name of the App Services to be created. This is a map of app service name and the linux_fx_version/container image to be loaded for that app service. DOCKER|<user/image:tag> | ||
- service_plan_resource_group_name : The Name of the Resource Group where the Service Plan exists. | ||
- app_service_plan_id : The ID of the App Service Plan within which the App Service exists is populated automatically based on service plan. | ||
- tags : A mapping of tags to assign to the resource. | ||
- app_settings : A key-value pair of App Settings. Settings for private Container Registries | ||
- DOCKER_REGISTRY_SERVER_URL : The docker registry server URL for app service to be created | ||
- DOCKER_REGISTRY_SERVER_USERNAME : The docker registry server usernames for app services to be created | ||
- DOCKER_REGISTRY_SERVER_PASSWORD : The docker registry server passwords for app services to be created | ||
- site_config : | ||
- always_on : Should the app be loaded at all times? Defaults to false. | ||
- virtual_network_name : The name of the Virtual Network which this App Service should be attached to. | ||
|
||
Please click the [link](https://www.terraform.io/docs/providers/azurerm/d/app_service.html) to get additional details on settings in Terraform for Azure App Service. | ||
|
||
## Usage | ||
|
||
### Module Definitions | ||
|
||
The App Service is dependent on deployment of Service Plan. Make sure to deploy Service Plan before starting to deploy App Services. | ||
|
||
- Service Plan Module : infra/modules/providers/azure/service-plan | ||
- App Service Module : infra/modules/providers/azure/app-service | ||
|
||
``` | ||
variable "resource_group_name" { | ||
value = "test-rg" | ||
} | ||
variable "service_plan_name" { | ||
value = "test-svcplan" | ||
} | ||
variable "app_service_name" { | ||
value = { | ||
appservice1="DOCKER|<user1/image1:tag1>" | ||
appservice2="DOCKER|<user2/image2:tag2>" | ||
} | ||
} | ||
module "service_plan" { | ||
resource_group_name = "${var.resource_group_name}" | ||
resource_group_location = "${var.resource_group_location}" | ||
service_plan_name = "${var.service_plan_name}" | ||
} | ||
module "app_service" { | ||
service_plan_resource_group_name = "${var.resource_group_name}" | ||
service_plan_name = "${var.service_plan_name}" | ||
``` | ||
|
||
## Outputs | ||
|
||
Once the deployments are completed successfully, the output for the current module will be in the format mentioned below: | ||
|
||
``` | ||
Outputs: | ||
app_service_uri = [ | ||
appservice1.azurewebsites.net, | ||
appservice2.azurewebsites.net | ||
] | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
data "azurerm_resource_group" "appsvc" { | ||
name = "${var.service_plan_resource_group_name}" | ||
} | ||
|
||
data "azurerm_app_service_plan" "appsvc" { | ||
name = "${var.service_plan_name}" | ||
resource_group_name = "${data.azurerm_resource_group.appsvc.name}" | ||
} | ||
|
||
resource "azurerm_app_service" "appsvc" { | ||
name = "${element(keys(var.app_service_name), count.index)}" | ||
resource_group_name = "${data.azurerm_resource_group.appsvc.name}" | ||
location = "${data.azurerm_resource_group.appsvc.location}" | ||
app_service_plan_id = "${data.azurerm_app_service_plan.appsvc.id}" | ||
tags = "${var.resource_tags}" | ||
count = "${length(keys(var.app_service_name))}" | ||
|
||
app_settings { | ||
DOCKER_REGISTRY_SERVER_URL = "${var.docker_registry_server_url}" | ||
DOCKER_REGISTRY_SERVER_USERNAME = "${var.docker_registry_server_username}" | ||
DOCKER_REGISTRY_SERVER_PASSWORD = "${var.docker_registry_server_password}" | ||
} | ||
|
||
site_config { | ||
linux_fx_version = "${element(values(var.app_service_name), count.index)}" | ||
always_on = "${var.site_config_always_on}" | ||
virtual_network_name = "${var.site_config_vnet_name}" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
output "app_service_uri" { | ||
description = "The URL of the app service created" | ||
value = "${azurerm_app_service.appsvc.*.default_site_hostname}" | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
variable "service_plan_resource_group_name" { | ||
description = "The name of the resource group in which the service plan was created." | ||
type = "string" | ||
} | ||
|
||
variable "service_plan_name" { | ||
description = "The name of the service plan" | ||
type = "string" | ||
} | ||
|
||
variable "resource_tags" { | ||
description = "Map of tags to apply to taggable resources in this module. By default the taggable resources are tagged with the name defined above and this map is merged in" | ||
type = "map" | ||
default = {} | ||
} | ||
|
||
variable "app_service_name" { | ||
description = "The name of the app service to be created" | ||
type = "map" | ||
default = {} | ||
} | ||
|
||
variable "docker_registry_server_url" { | ||
description = "The docker registry server URL for app service to be created" | ||
type = "string" | ||
default = "index.docker.io" | ||
} | ||
|
||
variable "docker_registry_server_username" { | ||
description = "The docker registry server username for app service to be created" | ||
type = "string" | ||
default = "" | ||
} | ||
|
||
variable "docker_registry_server_password" { | ||
description = "The docker registry server password for app service to be created" | ||
type = "string" | ||
default = "" | ||
} | ||
|
||
variable "site_config_always_on" { | ||
description = "Should the app be loaded at all times? Defaults to false." | ||
type = "string" | ||
default = "false" | ||
} | ||
|
||
variable "site_config_vnet_name" { | ||
description = "Should the app be loaded at all times? Defaults to false." | ||
type = "string" | ||
default = "" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65,4 +65,4 @@ resource "null_resource" "example" { | |
command = "execute shell script" | ||
} | ||
} | ||
``` | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,4 +12,4 @@ provider "null" { | |
|
||
provider "azuread" { | ||
version = "~>0.1" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters