日本語版
最新ニュース
世界

Bicep 言語を使用した Azure App Service 環境のエンタープライズ デプロイメントの簡素化 | Dave R – Microsoft Azure & AI MVP☁️ | 2024 年 8 月

エンタープライズ デプロイメントに Azure Bicep を使用する方法を学習します。この記事では、Bicep 言語を使用して、App Service Environment バージョン 3 向けに最適化されたエンタープライズ ワークロードをデプロイする方法について説明します。*注: このデプロイメントのv1を参照できます ここ。Azure Bicep は、宣言型構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。Bicep は、Azure Resource Manager (ARM) テンプレートの上に抽象化したものであり、宣言型の Infrastructure as Code を使用して Azure リソースを定義します。このソリューションのコードは次の URL にありますので、ぜひご協力ください。👉https://github.com/daveRendon/azinsider/tree/main/application-workloads/enterprise-deployment-using-azure-app-service-environment下の図に示すリソースを作成するために、Bicepテンプレートを使用します。このアーキテクチャのその他の使用例については、 ここ。Bicep を使用して Azure にエンタープライズ ワークロードを展開するための簡易ガイドソリューションには次のファイルが含まれています。📄main.bicep:…

Bicep 言語を使用した Azure App Service 環境のエンタープライズ デプロイメントの簡素化 | Dave R – Microsoft Azure & AI MVP☁️ | 2024 年 8 月

1723250294
2024-08-10 00:34:09

エンタープライズ デプロイメントに Azure Bicep を使用する方法を学習します。

この記事では、Bicep 言語を使用して、App Service Environment バージョン 3 向けに最適化されたエンタープライズ ワークロードをデプロイする方法について説明します。

*注: このデプロイメントのv1を参照できます ここ

Azure Bicep は、宣言型構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。

Bicep は、Azure Resource Manager (ARM) テンプレートの上に抽象化したものであり、宣言型の Infrastructure as Code を使用して Azure リソースを定義します。

このソリューションのコードは次の URL にありますので、ぜひご協力ください。

👉https://github.com/daveRendon/azinsider/tree/main/application-workloads/enterprise-deployment-using-azure-app-service-environment

下の図に示すリソースを作成するために、Bicepテンプレートを使用します。このアーキテクチャのその他の使用例については、 ここ

Bicep を使用して Azure にエンタープライズ ワークロードを展開するための簡易ガイド

ソリューションには次のファイルが含まれています。

  • 📄main.bicep: メインの上腕二頭筋テンプレート。
  • 📄azuredeploy.parameters.json: Bicep テンプレートをデプロイするための値を含むパラメーター ファイル。
  • 📁modules/: ソリューションを展開するための Bicep モジュールを含むフォルダー。
  • 📁modules/appgw.bicep
  • 📁modules/ase.bicep
  • 📁modules/dns.bicep
  • 📁modules/firewall.bicep
  • 📁modules/jumpbox.bicep
  • 📁modules/network.bicep
  • 📁modules/privateendpoints.bicep
  • 📁modules/rbac.bicep
  • 📁modules/services.bicep
  • 📁modules/sites.bicep

App Service Environment (ASE) バージョン 3

ASE は次の 2 つの方法で設定できます。

  • 外部ASE: パブリック IP アドレス経由でアクセス可能。
  • 内部 ASE (ILB): 内部ロードバランサー (ILB) にリンクされた内部 IP アドレス経由でアクセスできます。

ILB アプリ サービス環境の利点

  • 安全なイントラネットアプリケーション: クラウドで安全なイントラネット アプリをホストし、サイト間 VPN または Azure ExpressRoute 経由でアクセスします。
  • ウェブ アプリケーション ファイアウォール (WAF): アプリの保護層をさらに強化します。
  • インターネットから隔離されたアプリ: フロントエンド アプリとの統合のために、インターネットから分離された、非常に安全なバックエンド アプリを作成します。
  1. パラメータを定義する

という名前のファイルを作成します main.bicep 必要なパラメータを定義します。

// Parameters
param rgname string = 'azinsider_demo'
param location string = 'eastus'
param vnetAddressPrefix string = '10.0.0.0/16'
param existentVnetName string = ''
param aseSubnet string = '10.0.100.0/24'
param fwSubnet string = '10.0.200.0/24'
param jumpboxSubnet string = '10.0.250.0/24'
param servicesSubnet string = '10.0.50.0/24'
param redisSubnet string = '10.0.2.0/24'
param appGtwySubnet string = '10.0.1.0/24'
param subnet1Name string = 'ase-subnet'
param subnet2Name string = 'AzureFirewallSubnet'
param subnet3Name string = 'jumpbox-subnet'
param subnet4Name string = 'redis-subnet'
param subnet5Name string = 'services-subnet'

param redisSubnetAddressPrefix string
param aseName string
param aseDnsSuffix string
param keyVaultName string
param servicesSubnetAddressPrefix string
param sbName string
param sqlServerName string
param sqlDatabaseName string
param sqlAdminUserName string
param appGwSubnetAddressWithPrefix string
param subId string
param adminPassword string
param cosmosDbName string
param sqlName string
param sqlAdminPassword string
param allowedSubnetNames string

@description('Required. Dedicated host count of ASEv3.')
param dedicatedHostCount int = 0

@description('Required. Zone redundant of ASEv3.')
param zoneRedundant bool = false

//App url
param appGtwyApp1Url string = 'votingapp-std.contoso.com'
param appGtwyApp2Url string = 'testapp-std.contoso.com'

param jumpboxUsername string = 'azureuser'

param sqlAdminuser string = 'azureuser'
@secure()
param sqlPassword string

// get this value from the Azure AD user object or using the following command: az ad signed-in-user show --query id -o tsv
param sqlAadAdminSid string = 'xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx'

2. 変数を定義する

同じファイル内の main.bicep 必要な変数を定義します。

var subscriptionId = subscription().subscriptionId
var mustCreateVNet = empty(existentVnetName)
var vnetName = (empty(existentVnetName) ? 'ase-vnet' : existentVnetName)
var vnetRouteName = 'ase-vnet-route'

3. リソースと出力を定義する

同じファイル内の main.bicep 必要なリソースと出力を定義する

resource vnet 'Microsoft.Network/virtualNetworks@2022-01-01' = if (mustCreateVNet) {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
subnets: [
{
name: subnet1Name
properties: {
addressPrefix: aseSubnet
}
}
{
name: subnet2Name
properties: {
addressPrefix: fwSubnet
}
}
{
name: subnet3Name
properties: {
addressPrefix: jumpboxSubnet
}
}
{
name: subnet4Name
properties: {
addressPrefix: redisSubnet
}
}
{
name: subnet5Name
properties: {
addressPrefix: servicesSubnet
}
}
]
}
}

resource vnetRoute 'Microsoft.Network/routeTables@2022-01-01' = {
name: vnetRouteName
location: location
tags: {
displayName: 'UDR - Subnet'
}
properties: {
routes: [
{
name: '${vnetRouteName}-route'
properties: {
addressPrefix: '0.0.0.0/0'
nextHopType: 'Internet'
}
}
]
}
}

module ase 'modules/ase.bicep' = {
name: 'ase'
dependsOn: [
jumpbox
]
scope: resourceGroup(rgname)
params:{
location: location
aseSubnetAddressPrefix: aseSubnet
vnetName: vnet.name
vnetRouteName: vnetRoute.name
}
}

module firewall 'modules/firewall.bicep' = {
name: 'firewall'
dependsOn: [
ase
]
scope: resourceGroup(rgname)
params: {
location: location
vnetName: vnetName
firewallSubnetPrefix: fwSubnet
}
}

module dns 'modules/dns.bicep' = {
name: 'dns'
dependsOn: [
ase
]
scope: resourceGroup(rgname)
params: {
vnetName: vnetName
ipAddress: ase.outputs.aseIlbIp
zoneName: ase.outputs.dnsSuffix
}
}

module jumpbox 'modules/jumpbox.bicep' = {
name: 'jumpbox'
dependsOn: [
vnet
]
params: {
location: location
adminPassword: adminPassword
adminUsername: jumpboxUsername
jumpboxSubnetAddressPrefix: jumpboxSubnet
vnetName: vnet.name
}
}

module services 'modules/services.bicep' = {
name: 'services'
dependsOn: [
ase
]
params: {
location: location
allowedSubnetNames: ase.outputs.aseSubnetName
sqlAadAdminSid: sqlAadAdminSid
sqlAdminPassword: sqlPassword
sqlAdminUserName: sqlAdminuser
vnetName: vnet.name
}
}

module sites 'modules/sites.bicep' = {
name: 'sites'
dependsOn: [
services
]
params: {
location: location
aseDnsSuffix: ase.outputs.dnsSuffix
aseName: ase.name
cosmosDbName: services.outputs.cosmosDbName
keyVaultName: services.outputs.keyVaultName
redisSubnetAddressPrefix: redisSubnet
sqlDatabaseName: services.outputs.sqlDatabaseName
sqlServerName: services.outputs.sqlServerName
vnetName: vnetName
}
}

module appGtwy 'modules/appgw.bicep' = {
name: 'appGtwy'
dependsOn: [
sites
]
params: {
location: location
appgwApplications: [
{
name: 'votingapp'
routingPriority: 100
hostName: appGtwyApp1Url
backendAddresses: [
{
fqdn: 'votingapp-std.contoso.com'
}
]

//certificate: {
// data: ''
// password: ''
// }
probePath: '/health'
}
{
name: 'testapp'
routingPriority: 101
hostName: appGtwyApp2Url
backendAddresses: [
{
fqdn: 'testapp-std.contoso.com'
}
]
//certificate: {
// data: ''
// password: ''
// }
probePath: '/'
}
]
appGwSubnetAddressWithPrefix: appGtwySubnet
vnetName: vnetName
}
}

module endpoints 'modules/privateendpoints.bicep' = {
name: 'endpoints'
dependsOn: [
appGtwy
]
params: {
location: location
keyVaultName: services.outputs.keyVaultName
cosmosDBName: services.outputs.cosmosDbName
sbName: services.outputs.serviceBusName
sqlName: services.outputs.sqlServerName
SubId: subscriptionId
servicesSubnetAddressPrefix: servicesSubnet
vnetName: vnetName
}
}

output vnetName string = vnet.name
output vnetRouteName string = vnetRoute.name
output asename string = ase.name
output aseSubnetName string = ase.outputs.aseSubnetName
output firewallname string = firewall.name
output aseDnsSuffix string = ase.outputs.dnsSuffix
output aseDnsIlbIpAddress string = ase.outputs.aseIlbIp
output jumpboxPublicIpAddress string = jumpbox.outputs.jumpboxPublicIpAddress
output jumpboxSubnetName string = jumpbox.outputs.jumpboxSubnetName
output cosmosDbName string = services.outputs.cosmosDbName
output sqlServerName string = services.outputs.sqlServerName
output sqlDatabaseName string = services.outputs.sqlDatabaseName
output keyVaultName string = services.outputs.keyVaultName
output storageAccountName string = services.outputs.resourcesStorageAccountName
output cotainerRegistryName string = services.outputs.resourcesContainerName
output serviceBusName string = services.outputs.serviceBusName
output internalApp1URL string = sites.outputs.votingAppUrl
output internalApp2URL string = sites.outputs.testAppUrl
output votingWebaAppPrincipalId string = sites.outputs.votingWebAppIdentityPrincipalId
output votingCounterFunctionName string = sites.outputs.votingFunctionName
output votingCounterFunctionPrincipalId string = sites.outputs.votingCounterFunctionIdentityPrincipalId
output votingAPIName string = sites.outputs.votingApiName
output votingAPIPrincipalId string = sites.outputs.votingApiIdentityPrincipalId
output appGtwyName string = appGtwy.name
output appGtwyPublicIpAddress string = appGtwy.outputs.appGwPublicIpAddress

4. パラメータファイルを定義する

という名前の新しいファイルを作成します main.bicepparam以下のコードは、パラメータ ファイルの定義を示しています。

**KeyVault、SubscriptionID、およびマネージド ID の名前を変更します。

using 'main.bicep'

param sqlPassword = 'Azuretest01!!'

param adminPassword = 'Azuretest01!!'

param sqlAdminUserName = 'azureuser'

param sqlAdminPassword = 'Azuretest01!!'

param sqlAadAdminSid = 'xxxxxxx-xxxxx-xxxxx-xxxxx-xxxxx'

param allowedSubnetNames = 'ase-subnet'

param vnetName = 'vnet-azinsider'

param redisSubnetAddressPrefix = '10.0.2.0/24'

param aseName = 'ase-azinsider'

param aseDnsSuffix = 'ase-azinsider'

param keyVaultName = 'kvazinsider122'

param cosmosDbName = 'votingcosmos-azinsider'

param sqlServerName = 'sqlserver-azinsider'

param sqlDatabaseName = 'voting'

param appGwSubnetAddressWithPrefix = '10.0.1.0/24'

param SubId = ''

param sbName = 'votingservicebusazinsider'

param sqlName = 'sqlserver-azinsider'

param servicesSubnetAddressPrefix = '10.0.50.0/24'

5. 展開する

Bicep テンプレートをデプロイするには、以下のコマンドを使用します。

Azure Portal でデプロイを確認できます。完了するまでに最大 2 時間かかる場合があります。

このガイドでは、Azure Bicep を使用して、App Service Environment バージョン 3 と Bicep モジュールを使用してエンタープライズ ワークロードを展開する方法を説明しました。詳細と貢献については、 GitHub リポジトリ

#Bicep #言語を使用した #Azure #App #Service #環境のエンタープライズ #デプロイメントの簡素化 #Dave #Microsoft #Azure #MVP #年 #月

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。