using System.Threading.Tasks;
using Pulumi;
using Pulumi.AzureNative.Resources;
using Pulumi.AzureNative.Storage;
using Pulumi.AzureNative.Storage.Inputs;
using Pulumi.AzureNative.Web.Inputs;
using Pulumi.AzureNative.Sql;
using Pulumi.AzureNative.Web;
class MyStack : Stack
{
public MyStack()
{
var config = new Pulumi.Config("azure-shared");
// Create an Azure Resource Group
// Set Provider and Subscription with variables
var _provider = new Pulumi.AzureNative.Provider("Provider", new Pulumi.AzureNative.ProviderArgs()
{
SubscriptionId = config.Require("subscription")
});
var resourceGroup = new ResourceGroup(config.Require("resourceGroupName"),
new ResourceGroupArgs
{
ResourceGroupName = config.Require("resourceGroupName"),
Location = config.Require("location")
},
new CustomResourceOptions
{
Provider = _provider
//Protect = false,
// ImportId = "/subscriptions/" + subscription + "/resourceGroups/" + resourceGroupName
}
);
var appPlanId = CreateAppServicePlan(config, resourceGroup);
CreateDatabase(config);
}
private Output<string> CreateAppServicePlan(Pulumi.Config config, ResourceGroup resourceGroup)
{
var appServicePlan = new AppServicePlan(config.Require("appPlanName"), new AppServicePlanArgs
{
ResourceGroupName = resourceGroup.GetResourceName(),
Kind = "App",
Sku = new SkuDescriptionArgs
{
Tier = "Premium",
Name = "P1V3",
},
Location = config.Require("location"),
Name = config.Require("appPlanName")
},
new CustomResourceOptions { DependsOn = { resourceGroup } }
);
return appServicePlan.Id;
}
private void CreateDatabase(Pulumi.Config config)
{
var resourceGroup = new ResourceGroup(config.Require("databaseResourceGroupName"),
new ResourceGroupArgs
{
ResourceGroupName = config.Require("databaseResourceGroupName")
},
new CustomResourceOptions
{
//ImportId = "/subscriptions/" + subscription + "/resourceGroups/" + databaseResourceGroupName
}
);
var sqlServer = new Server(config.Require("sqlServerName"), new ServerArgs
{
ServerName = config.Require("sqlServerName"),
ResourceGroupName = resourceGroup.GetResourceName(),
AdministratorLogin = config.Require("databaseUsername"),
AdministratorLoginPassword = config.Require("databasePassword"),
Version = "12.0",
MinimalTlsVersion = "1.2",
PublicNetworkAccess = "Enabled",
Location = config.Require("location")
},
new CustomResourceOptions { DependsOn = { resourceGroup } }
);
new ElasticPool(config.Require("elasticPoolName"), new ElasticPoolArgs
{
ElasticPoolName = config.Require("elasticPoolName"),
ResourceGroupName = resourceGroup.GetResourceName(),
ServerName = sqlServer.Name,
LicenseType = "LicenseIncluded",
MaintenanceConfigurationId = "/subscriptions/" + config.Require("subscription") + "/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/SQL_Default",
MaxSizeBytes = 69793218560,
PerDatabaseSettings = new Pulumi.AzureNative.Sql.Inputs.ElasticPoolPerDatabaseSettingsArgs
{
MaxCapacity = 2,
MinCapacity = 0.25,
},
Location = config.Require("location"),
Sku = new Pulumi.AzureNative.Sql.Inputs.SkuArgs
{
Name = "GP_Gen5",
Tier = "GeneralPurpose",
Family = "Gen5",
Capacity = 2
},
ZoneRedundant = false,
},
new CustomResourceOptions { DependsOn = { sqlServer } }
);
}
}