Implantar o plano de controle
A implantação do plano de controle para o SAP Deployment Automation Framework consiste em:
- Implantador
- Biblioteca SAP
Preparar as credenciais de implantação
O SAP Deployment Automation Framework usa entidades de serviço para implantações. Para criar uma entidade de serviço para a implantação do plano de controle, use uma conta que tenha permissões para criar entidades de serviço:
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscriptionID>" --name="<environment>-Deployment-Account"
Importante
O nome da entidade de serviço deve ser exclusivo.
Registre os valores de saída do comando:
- appId
- password
- locatário
Opcionalmente, atribua as seguintes permissões à entidade de serviço:
az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>
Se você quiser fornecer a função de Administrador de Acesso de Usuário com escopo somente para o grupo de recursos, use o seguinte comando:
az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>
Implantar o plano de controle
Todos os artefatos necessários para implantar o plano de controle estão localizados em repositórios do GitHub.
Prepare-se para a implantação do plano de controle clonando os repositórios usando os seguintes comandos:
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
O arquivo MGMT-WEEU-DEP00-INFRASTRUCTURE.tfvars
de configuração do implementador de exemplo está localizado na ~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/DEPLOYER/MGMT-WEEU-DEP00-INFRASTRUCTURE
pasta.
O arquivo MGMT-WEEU-SAP_LIBRARY.tfvars
de configuração da ~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/LIBRARY/MGMT-WEEU-SAP_LIBRARY
biblioteca SAP de exemplo está localizado na pasta.
Você pode copiar os arquivos de configuração de exemplo para começar a testar a estrutura de automação da implantação.
Um arquivo Terraform mínimo para o DEPLOYER
pode se parecer com este exemplo:
# 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
Observe os locais de arquivo de variáveis da Terraform para edições futuras durante a implantação.
Um arquivo Terraform mínimo para o LIBRARY
pode se parecer com este exemplo:
# 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
Observe os locais de arquivo de variáveis da Terraform para edições futuras durante a implantação.
Execute o comando a seguir para criar o implementador e a biblioteca SAP. O comando adiciona os detalhes da entidade de serviço ao cofre da chave de implantação.
Defina as variáveis de ambiente para a entidade de serviço:
export ARM_SUBSCRIPTION_ID="<subscriptionId>"
export ARM_CLIENT_ID="<appId>"
export ARM_CLIENT_SECRET="<password>"
export ARM_TENANT_ID="<tenantId>"
Execute o comando a seguir para implantar o painel de controle:
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}"
Configurar manualmente uma máquina virtual como um implantador SDAF usando o Bastião do Azure
Para se conectar ao implantador:
Entre no portal do Azure.
Vá para o grupo de recursos que contém a máquina virtual (VM) do implantador.
Conecte-se à VM usando o Bastião do Azure.
O nome de usuário padrão é azureadm.
Selecione chave privada SSH no Azure Key Vault.
Selecione a assinatura que contém o painel de controle.
Selecione o cofre de chaves do implantador.
Na lista de segredos, escolha o segredo que termina com -sshkey.
Conectar-se à VM.
Execute o seguinte script para configurar o implementador:
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
O script instala o Terraform e o Ansible e configura o implantador.
Configurar manualmente uma máquina virtual como um implantador SDAF
Conecte-se à VM do implantador de um computador que possa acessar a rede virtual do Azure.
Para se conectar ao implantador:
Entre no portal do Azure.
Selecione ou pesquise cofres de chaves.
Na página Cofre de chaves, localize o cofre de chaves do implantador. O nome começa com
MGMT[REGION]DEP00user
. Filtre pelo grupo de recursos ou Local, se necessário.Na seção Configurações no painel esquerdo, selecione Segredos.
Localize e selecione o segredo que contém sshkey. Pode se parecer com
MGMT-[REGION]-DEP00-sshkey
.Na página do segredo, selecione a versão atual. Em seguida, copie o valor Secret.
Abra um editor de texto sem formatação. Copiar o valor do segredo.
Salve o arquivo no local onde você mantém as chaves SSH. Um exemplo é
C:\Users\<your-username>\.ssh
.Salve o arquivo. Se você for solicitado a Salvar como tipo, selecione Todos os arquivos se o SSH não for uma opção. Por exemplo, use
deployer.ssh
.Conecte-se à VM do implementador por meio de qualquer cliente SSH, como o Visual Studio Code. Use o endereço IP privado do implantador e a chave SSH que você baixou. Para obter instruções sobre como se conectar ao implantador usando Visual Studio Code, confira Conectar-se ao implantador usando Visual Studio Code. Se você estiver usando o PuTTY, converta o arquivo de chave SSH primeiro usando PuTTYGen.
Observação
O nome de usuário padrão é azureadm.
Configure o implantador usando o seguinte script:
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
O script instala o Terraform e o Ansible e configura o implantador.
Protegendo o plano de controle
O plano de controle é a parte mais crítica da estrutura de automação SAP. É importante proteger o plano de controle. As etapas a seguir ajudam você a proteger o plano de controle. Se você tiver criado seu plano de controle usando uma máquina virtual externa ou usando o shell de nuvem, deverá proteger o plano de controle implementando pontos de extremidade privados para as contas de armazenamento e cofres de chaves.
Você pode usar o sync_deployer.sh
script para copiar os arquivos de configuração do plano de controle para a VM do implementador. Entre na VM do implantador e execute os seguintes comandos:
cd ~/Azure_SAP_Automated_Deployment/WORKSPACES
../sap-automation/deploy/scripts/sync_deployer.sh --storageaccountname mgtneweeutfstate### --state_subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Certifique-se de que a variável esteja definida como nos arquivos de use_private_endpoint
configuração e LIBRARY
.DEPLOYER
true
Verifique também se está public_network_access_enabled
definido como false
nos arquivos de DEPLOYER
configuração.
# 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
Execute novamente a implantação do plano de controle para habilitar pontos de extremidade privados para as contas de armazenamento e os cofres de chaves.
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
Preparar o aplicativo Web
Esta etapa é opcional. Se você quiser que uma UX baseada em navegador ajude na configuração de zonas e sistemas de carga de trabalho SAP, execute os comandos a seguir antes de implantar o plano de controle.
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