你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

部署控制平面

SAP 部署自动化框架的控制平面部署包括:

  • 部署程序
  • SAP 库

Diagram that shows the control plane.

准备部署凭据

SAP 部署自动化框架使用服务主体进行部署。 若要为控制平面部署创建服务主体,请使用有权创建服务主体的帐户:

az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscriptionID>" --name="<environment>-Deployment-Account"
  

重要

服务主体的名称必须唯一。

记录命令中的输出值:

  • appId
  • password
  • tenant

(可选)将以下权限分配给服务主体:

az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>

如果要仅提供限定为资源组的用户访问管理员istrator 角色,请使用以下命令:


az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>

部署控制平面

部署控制平面所需的所有项目都位于 GitHub 存储库中。

使用以下命令克隆存储库来准备控制平面部署:

mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

git clone https://github.com/Azure/sap-automation.git sap-automation

git clone https://github.com/Azure/sap-automation-samples.git samples

示例部署程序配置文件 MGMT-WEEU-DEP00-INFRASTRUCTURE.tfvars 位于 ~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/DEPLOYER/MGMT-WEEU-DEP00-INFRASTRUCTURE 文件夹中。

示例 SAP 库配置文件 MGMT-WEEU-SAP_LIBRARY.tfvars 位于 ~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/LIBRARY/MGMT-WEEU-SAP_LIBRARY 文件夹中。

可以复制示例配置文件以开始测试部署自动化框架。

示例的最小 Terraform 文件 DEPLOYER 如下所示:

# The environment value is a mandatory field, it is used for partitioning the environments.
environment = "MGMT"
# The location/region value is a mandatory field, it is used to control where the resources are deployed
location = "westeurope"

# management_network_address_space is the address space for management virtual network
management_network_address_space = "10.10.20.0/25"
# management_subnet_address_prefix is the address prefix for the management subnet
management_subnet_address_prefix = "10.10.20.64/28"

# management_firewall_subnet_address_prefix is the address prefix for the firewall subnet
management_firewall_subnet_address_prefix = "10.10.20.0/26"
firewall_deployment = false

# management_bastion_subnet_address_prefix is the address prefix for the bastion subnet
management_bastion_subnet_address_prefix = "10.10.20.128/26"
bastion_deployment = true

# deployer_enable_public_ip controls if the deployer Virtual machines will have Public IPs
deployer_enable_public_ip = false

# deployer_count defines how many deployer VMs will be deployed
deployer_count = 1

# use_service_endpoint defines that the management subnets have service endpoints enabled
use_service_endpoint = true

# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = false

# enable_firewall_for_keyvaults_and_storage defines that the storage accounts and key vaults have firewall enabled
enable_firewall_for_keyvaults_and_storage = false

# public_network_access_enabled controls if storage account and key vaults have public network access enabled
public_network_access_enabled = true

请注意 Terraform 变量文件位置,以便将来在部署期间进行编辑。

示例的最小 Terraform 文件 LIBRARY 如下所示:

# The environment value is a mandatory field, it is used for partitioning the environments, for example, PROD and NP.
environment = "MGMT"
# The location/region value is a mandatory field, it is used to control where the resources are deployed
location = "westeurope"

#Defines the DNS suffix for the resources
dns_label = "azure.contoso.net"

# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = false

请注意 Terraform 变量文件位置,以便将来在部署期间进行编辑。

运行以下命令以创建部署器和 SAP 库。 该命令将服务主体详细信息添加到部署密钥保管库。

设置服务主体的环境变量:


export ARM_SUBSCRIPTION_ID="<subscriptionId>"
export       ARM_CLIENT_ID="<appId>"
export   ARM_CLIENT_SECRET="<password>"
export       ARM_TENANT_ID="<tenantId>"

运行以下命令来部署控制平面:


export            env_code="MGMT"
export         region_code="WEEU"
export           vnet_code="DEP00"

export DEPLOYMENT_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export CONFIG_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/WORKSPACES"
export SAP_AUTOMATION_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"

az logout
az login --service-principal -u "${ARM_CLIENT_ID}" -p="${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}"

cd ~/Azure_SAP_Automated_Deployment/WORKSPACES


deployer_parameter_file="${CONFIG_REPO_PATH}/DEPLOYER/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE.tfvars"
library_parameter_file="${CONFIG_REPO_PATH}/LIBRARY/${env_code}-${region_code}-SAP_LIBRARY/${env_code}-${region_code}-SAP_LIBRARY.tfvars"

${SAP_AUTOMATION_REPO_PATH}/deploy/scripts/deploy_controlplane.sh  \
    --deployer_parameter_file "${deployer_parameter_file}"         \
    --library_parameter_file "${library_parameter_file}"            \
    --subscription "${ARM_SUBSCRIPTION_ID}"                        \
    --spn_id "${ARM_CLIENT_ID}"                                    \
    --spn_secret "${ARM_CLIENT_SECRET}"                            \
    --tenant_id "${ARM_TENANT_ID}"

使用 Azure Bastion 手动将虚拟机配置为 SDAF 部署程序

连接到 Deployer:

  1. 登录 Azure 门户

  2. 转到包含部署器虚拟机(VM)的资源组。

  3. 使用 Azure Bastion 连接 VM。

  4. 默认用户名为 azureadm。

  5. 选择“来自 Azure Key Vault 的 SSH 私钥”。

  6. 选择包含控制平面的订阅。

  7. 选择部署程序密钥保管库。

  8. 从机密列表中,选择以 -sshkey 结尾的机密。

  9. 连接到 VM。

运行以下脚本来配置部署程序:


mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

wget https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/configure_deployer.sh -O configure_deployer.sh	
chmod +x ./configure_deployer.sh
./configure_deployer.sh

# Source the new variables

. /etc/profile.d/deploy_server.sh

此脚本将安装 Terraform 和 Ansible 并配置 deployer。

将虚拟机手动配置为 SDAF 部署程序

从可以访问 Azure 虚拟网络的计算机连接到部署程序 VM。

连接到 Deployer:

  1. 登录 Azure 门户

  2. 选择或搜索“密钥保管库”。

  3. 在“密钥保管库”页上,找到 Deployer 密钥保管库。 该名称以 MGMT[REGION]DEP00user 开头。 如有必要,按 资源组位置进行筛选。

  4. 在左窗格的“设置”部分,选择“机密”。

  5. 查找并选择包含“sshkey”的机密。 它可能类似于 MGMT-[REGION]-DEP00-sshkey

  6. 在机密页上,选择当前版本。 然后复制 机密值

  7. 打开纯文本编辑器。 复制机密值。

  8. 保存在其中保存 SSH 密钥的文件。 示例为 C:\Users\<your-username>\.ssh

  9. 保存文件。 如果系统提示“另存为类型”,在无法选择“SSH”时,请选择“全部文件” 。 例如,使用 deployer.ssh

  10. 通过任何 SSH 客户端(如 Visual Studio Code)连接到 Deployer VM。 使用部署者的专用 IP 地址和下载的 SSH 密钥。 有关如何使用 Visual Studio Code 连接到 deployer 的说明,请参阅使用 Visual Studio Code 连接到 deployer。 如果使用的是 PuTTY,请首先使用 PuTTYGen 转换 SSH 密钥文件。

注意

默认用户名为 azureadm。

使用以下脚本配置部署程序:

mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

wget https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/configure_deployer.sh -O configure_deployer.sh	
chmod +x ./configure_deployer.sh
./configure_deployer.sh

# Source the new variables

. /etc/profile.d/deploy_server.sh

此脚本将安装 Terraform 和 Ansible 并配置 deployer。

保护控制平面

控制平面是 SAP 自动化框架中最重要的部分。 保护控制平面非常重要。 以下步骤有助于保护控制平面。 如果已使用外部虚拟机或使用 cloud shell 创建控制平面,则应通过为存储帐户和密钥保管库实现专用终结点来保护控制平面。

可以使用 sync_deployer.sh 脚本将控制平面配置文件复制到部署器 VM。 登录到部署程序 VM 并运行以下命令:


cd ~/Azure_SAP_Automated_Deployment/WORKSPACES

../sap-automation/deploy/scripts/sync_deployer.sh --storageaccountname mgtneweeutfstate### --state_subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

确保变量use_private_endpoint已设置为true配置文件。DEPLOYER LIBRARY 此外,请确保在public_network_access_enabled配置文件中DEPLOYER设置为false


# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = true

# public_network_access_enabled controls if storage account and key vaults have public network access enabled
public_network_access_enabled = false

重新运行控制平面部署,为存储帐户和密钥保管库启用专用终结点。



export            env_code="MGMT"
export         region_code="WEEU"
export           vnet_code="DEP00"
export  storageaccountname=<storageaccountname>

export DEPLOYMENT_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export CONFIG_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/WORKSPACES"
export SAP_AUTOMATION_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"

az logout
az login --service-principal -u "${ARM_CLIENT_ID}" -p="${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}"

cd ~/Azure_SAP_Automated_Deployment/WORKSPACES

deployer_parameter_file="${CONFIG_REPO_PATH}/DEPLOYER/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE.tfvars"
library_parameter_file="${CONFIG_REPO_PATH}/LIBRARY/${env_code}-${region_code}-SAP_LIBRARY/${env_code}-${region_code}-SAP_LIBRARY.tfvars"

${SAP_AUTOMATION_REPO_PATH}/deploy/scripts/deploy_controlplane.sh  \
    --deployer_parameter_file "${deployer_parameter_file}"         \
    --library_parameter_file "${library_parameter_file}"            \
    --subscription "${ARM_SUBSCRIPTION_ID}"                        \
    --spn_id "${ARM_CLIENT_ID}"                                    \
    --spn_secret "${ARM_CLIENT_SECRET}"                            \
    --tenant_id "${ARM_TENANT_ID}"                                 \
    --storageaccountname "${storageaccountname}"                   \
    --recover

准备 Web 应用

此步骤是可选的。 如果希望基于浏览器的 UX 帮助配置 SAP 工作负荷区域和系统,请在部署控制平面之前运行以下命令。

echo '[{"resourceAppId":"00000003-0000-0000-c000-000000000000","resourceAccess":[{"id":"e1fe6dd8-ba31-4d61-89e7-88639da4683d","type":"Scope"}]}]' >> manifest.json

region_code=WEEU

export TF_VAR_app_registration_app_id=$(az ad app create \
    --display-name ${region_code}-webapp-registration \
    --enable-id-token-issuance true \
    --sign-in-audience AzureADMyOrg \
    --required-resource-access @manifest.json \
    --query "appId" | tr -d '"')

export TF_VAR_webapp_client_secret=$(az ad app credential reset \
    --id $TF_VAR_app_registration_app_id --append               \
    --query "password" | tr -d '"')

export TF_VAR_use_webapp=true
rm manifest.json

后续步骤