Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Steuerungsebene ist die Bereitstellungsinfrastruktur für SAP Deployment Automation Framework (SDAF). Es stellt die Bereitstellungs-Agents, zustandsspeicherung und Anmeldeinformationsverwaltung bereit, die das Framework zum Bereitstellen und Konfigurieren von SAP-Umgebungen in Azure benötigt.
Ohne Steuerungsebene können Sie die Terraform- und Ansible-Workflows nicht ausführen, die SAP-Workloadzonen und -Systeme bereitstellen. Das Einrichten der Steuerungsebene ist der erste Bereitstellungsschritt im Framework.
In diesem Artikel bereiten Sie Die Bereitstellungsanmeldeinformationen vor, konfigurieren die Komponenten der Bereitstellungs- und SAP-Bibliothek und führen die Skripts aus, die die Steuerungsebenenressourcen in Ihrem Azure-Abonnement erstellen.
Voraussetzungen
- Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen.
- Berechtigungen zum Erstellen von Dienstprinzipalen oder verwalteten Identitäten für das Abonnement.
- Azure CLI auf einer Linux-Arbeitsstation oder Zugriff auf Azure DevOps installiert.
Vorbereiten der Bereitstellungsanmeldeinformationen
SDAF verwendet entweder verwaltete Identitäten (empfohlen) oder Dienstprinzipale für Bereitstellungen.
Erstellen Sie Authentifizierungsanmeldeinformationen für die Bereitstellung der Steuerungsebene. Verwenden Sie ein Konto, das über Berechtigungen zum Erstellen von Dienstprinzipalen verfügt.
So erstellen Sie einen Dienstprinzipal:
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscriptionID>" --name="<environment>-Deployment-Account"So erstellen Sie eine verwaltete Identität:
az identity create --name "<environment>-Deployment-Identity" --resource-group $ResourceGroupName --location $Location --query "{id:id, principalId:principalId, clientId:clientId}" az role assignment create --assignee-object-id <principalId> --role "Contributor" --scope /subscriptions/<subscriptionID>Von Bedeutung
Der Name des Dienstprinzipals muss eindeutig sein.
Notieren Sie die Ausgabewerte aus dem Befehl:
- Anwendungs-ID
- Passwort
- Mieter
Weisen Sie optional der Dienstprinzipal- oder verwalteten Identität die Rolle des Benutzerzugriffsadministrators zu:
az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>Um die Rolle auf eine bestimmte Ressourcengruppe zu beschränken, verwenden Sie stattdessen den folgenden Befehl:
az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>
Ausführen der Steuerungsebene-Bereitstellung
Alle Artefakte, die zum Bereitstellen der Steuerebene erforderlich sind, befinden sich in GitHub-Repositorys. Klonen Sie die Repositorys, um sich auf die Bereitstellung der Steuerungsebene vorzubereiten:
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
Die Konfigurationsdatei
MGMT-WEEU-DEP00-INFRASTRUCTURE.tfvarsfür den Beispiel-Deployment befindet sich im Ordner~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/DEPLOYER/MGMT-WEEU-DEP00-INFRASTRUCTURE.Die SAP-Beispielbibliothekskonfigurationsdatei
MGMT-WEEU-SAP_LIBRARY.tfvarsbefindet sich im~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/LIBRARY/MGMT-WEEU-SAP_LIBRARYOrdner.
Sie können die Beispielkonfigurationsdateien kopieren, um mit dem Testen des Frameworks zu beginnen.
Eine minimale Terraform-Datei für das DEPLOYER Beispiel könnte wie folgt aussehen:
# 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 = true
# 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 = true
# 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 = false
Beachten Sie die Speicherorte der Terraform-Variablendateien für zukünftige Bearbeitungen während der Bereitstellung.
Eine minimale Terraform-Datei für das LIBRARY Beispiel könnte wie folgt aussehen:
# 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 = true
Beachten Sie die Speicherorte der Terraform-Variablendateien für zukünftige Bearbeitungen während der Bereitstellung.
Führen Sie den folgenden Befehl aus, um den Deployer und die SAP-Bibliothek zu erstellen. Der Befehl fügt dem Bereitstellungsschlüsseltresor die Dienstprinzipaldetails hinzu.
Legen Sie die Umgebungsvariablen für verwaltete Identität fest:
export ARM_SUBSCRIPTION_ID="<subscriptionId>"
export ARM_CLIENT_ID="<managedIdentityAppId>"
export ARM_TENANT_ID="<tenantId>"
Legen Sie die Umgebungsvariablen für den Dienstprinzipal fest:
export ARM_SUBSCRIPTION_ID="<subscriptionId>"
export ARM_CLIENT_ID="<appId>"
export ARM_CLIENT_SECRET="<password>"
export ARM_TENANT_ID="<tenantId>"
Führen Sie den folgenden Befehl aus, um die Steuerebene bereitzustellen:
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 --identity --client-id "${ARM_CLIENT_ID}"
# Uncomment next line for service principal based login
# 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"
#When using managed identity use:
${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}" \
--msi
#When using a service principal use:
${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}"
Manuelles Konfigurieren eines virtuellen Computers
So stellen Sie eine Verbindung mit dem Deployer her:
Melden Sie sich im Azure-Portal an.
Wechseln Sie zu der Ressourcengruppe, die den virtuellen Bereitstellungscomputer (VM) enthält.
Stellen Sie mithilfe von Azure Bastion eine Verbindung mit dem virtuellen Computer her. Der Standardbenutzername ist azureadm.
Wählen Sie den privaten SSH-Schlüssel aus Dem Azure Key Vault aus.
Wählen Sie das Abonnement aus, das die Steuerebene enthält.
Wählen Sie den Schlüsseltresor des Bereitstellers aus.
Wählen Sie in der Liste der geheimen Schlüssel den geheimen Schlüssel aus, der mit -sshkey endet.
Stellen Sie eine Verbindung mit der VM her.
Führen Sie zum Konfigurieren des Deployers das folgende Skript aus:
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
Das Skript installiert Terraform und Ansible und konfiguriert den Deployer.
Steuerungsebene sichern
Die Steuerebene ist der wichtigste Teil von SDAF. Wenn Sie Ihre Steuerebene mithilfe einer externen VM oder Cloud Shell erstellt haben, sichern Sie sie durch Implementierung privater Endpunkte für die Speicherkonten und Schlüsselverwaltungen.
Melden Sie sich bei der Bereitstellungs-VM an, und kopieren Sie die Konfigurationsdateien der Steuerungsebene mithilfe des
sync_deployer.shSkripts:cd ~/Azure_SAP_Automated_Deployment/WORKSPACES ../sap-automation/deploy/scripts/sync_deployer.sh --storageaccountname mgtneweeutfstate### --state_subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxLegen Sie die Variable
use_private_endpointauftruein den KonfigurationsdateienDEPLOYERundLIBRARYfest. Legen Sie auch in den Konfigurationsdateienpublic_network_access_enabledfalseDEPLOYERfest:# Defines that the storage accounts and key vaults have private endpoints enabled use_private_endpoint = true # Controls if storage account and key vaults have public network access enabled public_network_access_enabled = falseFühren Sie die Bereitstellung der Steuerebene erneut aus, um private Endpunkte für die Speicherkonten und Schlüsseltresore zu aktivieren.
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
Vorbereiten der Web-App
Dieser Schritt ist optional. Wenn Sie eine browserbasierte Benutzeroberfläche zum Konfigurieren von SAP-Workloadzonen und -Systemen benötigen, führen Sie die folgenden Befehle aus, bevor Sie die Steuerungsebene bereitstellen.
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