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
- inquilino
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 implantador 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 de 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 dos arquivos da variável Terraform para futuras edições 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 dos arquivos da variável Terraform para futuras edições durante a implantação.
Execute o seguinte comando para criar o implantador 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 seguinte comando para implantar o plano 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 Azure Bastion
Para se conectar ao implantador:
Inicie sessão no portal do Azure.
Vá para o grupo de recursos que contém a máquina virtual (VM) do deployer.
Conecte-se à VM usando o Azure Bastion.
O nome de usuário padrão é azureadm.
Selecione Chave Privada SSH no Cofre de Chaves do Azure.
Selecione a assinatura que contém o plano de controle.
Selecione o cofre de chaves do deployer.
Na lista de segredos, escolha o segredo que termina com -sshkey.
Ligue à VM.
Execute o seguinte script para configurar o deployer:
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 deployer.
Configurar manualmente uma máquina virtual como um implantador de SDAF
Conecte-se à VM do implantador a partir de um computador que possa acessar a rede virtual do Azure.
Para se conectar ao implantador:
Inicie sessão no portal do Azure.
Selecione ou pesquise por Cofres de chaves.
Na página Cofre da chave, localize o cofre da chave 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.
Encontre e selecione o segredo que contém sshkey. Pode parecer
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 simples. Copie o valor secreto.
Salve o arquivo onde você mantém chaves SSH. Um exemplo é
C:\Users\<your-username>\.ssh
.Guarde o ficheiro. Se você for solicitado a Salvar como tipo, selecione Todos os arquivos se SSH não for uma opção. Por exemplo, use
deployer.ssh
.Conecte-se à VM do implantador 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 o Visual Studio Code, consulte Conectar-se ao implantador usando o Visual Studio Code. Se você estiver usando PuTTY, converta o arquivo de chave SSH primeiro usando PuTTYGen.
Nota
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 deployer.
Fixação do plano de controlo
O plano de controle é a parte mais crítica da estrutura de automação SAP. É importante proteger o plano de controle. Os passos seguintes ajudam-no a proteger o plano de controlo. Se você criou seu plano de controle usando uma máquina virtual externa ou usando o shell de nuvem, você deve 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 deployer. Entre na VM do deployer 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 está definida como nos arquivos de use_private_endpoint
configuração e LIBRARY
.DEPLOYER
true
Certifique-se também de que está definido como false
nos arquivos de public_network_access_enabled
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 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
Este passo é opcional. Se você quiser que uma experiência do usuário baseada em navegador ajude na configuração de zonas e sistemas de carga de trabalho SAP, execute os seguintes comandos 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