你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
除了 自动部署,还可以在 Azure 部署自动化框架上手动部署 SAP。 使用此示例配置和示例参数文件开始。
小窍门
本指南仅介绍如何执行 手动 部署。 若要快速开始,请参阅 自动 部署指南 。
这些步骤引用并使用自动化框架 的默认命名约定 。 示例值还用于在整个代码中命名。 例如,部署程序名称为 DEMO-EUS2-DEP00-INFRASTRUCTURE. 在此示例中,环境为演示(DEMO)、区域为 美国东部 2 (EUS2),部署器虚拟网络为 DEP00。
先决条件
部署程序设置
在开始之前, 请检查是否位于正确的 Azure 订阅中。 然后,设置部署器:
- 下载并安装 Terraform。
- 在部署器上克隆和配置自动化框架存储库。
- 初始化 Terraform
- 获取 SSH 密钥 ,以便在部署的其余部分使用。
检查 Azure 订阅
验证是否使用适当的 Azure 订阅:
下载 Terraform
将 Terraform 下载到你的环境:
创建并导航到新目录
bin。mkdir -p ~/bin; cd $_获取相应的 Terraform 二进制文件。 例如:
wget https://releases.hashicorp.com/terraform/0.14.7/terraform_0.14.7_linux_amd64.zip解压缩 Terraform 二进制文件。 例如:
unzip terraform_0.14.7_linux_amd64.zip验证你的Terraform下载是否正确。
hash terraform为 SAP 自动部署创建目录。
mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_
设置存储库
克隆并配置 自动化框架存储库。
从 GitHub 克隆存储库:
git clone https://github.com/Azure/sap-automation.git导航到
sap-automation文件夹。cd ~/Azure_SAP_Automated_Deployment/sap-automation(可选)签出一个与主分支不同的分支。 存储库的主分支是默认值。
将
<branch>替换为要使用的分支名称或提交哈希。git checkout <branch>检查你的分支是否为所需的修订版。
git rev-parse HEAD
初始化 Terraform
创建工作目录。 目录名称必须遵循 默认命名约定。 例如:
mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/DEPLOYER/DEMO-EUS2-DEP00-INFRASTRUCTURE; cd $_创建 JSON 参数文件。
cat <<EOF > DEMO-EUS2-DEP00-INFRASTRUCTURE.json { "infrastructure": { "environment" : "DEMO", "region" : "eastus2", "vnets": { "management": { "name" : "DEP00", "address_space" : "10.0.0.0/25", "subnet_mgmt": { "prefix" : "10.0.0.64/28" }, "subnet_fw": { "prefix" : "10.0.0.0/26" } } } }, "options": { "enable_deployer_public_ip" : true }, "firewall_deployment" : true } EOF初始化 Terraform。
terraform init ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/创建遵循默认命名约定的 Terraform 执行计划。
terraform plan \ --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/应用 Terraform 执行计划来部署资源。
terraform apply --auto-approve \ --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/记下输出。
获取 SSH 密钥
使用 Terraform 部署的输出,记录以下字段的值。
公共 IP 地址:
deployer_public_ip_address.Key Vault 的用户名:
deployer_kv_user_name.私钥保管库的名称:
deployer_kv_prvt_name。公钥的名称:
deployer_public_key_secret_name.私钥的名称:
deployer_private_key_secret_name.
运行后处理脚本。
./post_deployment.sh提取SSH私钥:
az keyvault secret show \ --vault-name DEMOEUS2DEP00userE27 \ --name DEMO-EUS2-DEP00-sshkey | \ jq -r .value > sshkey提取公钥 SSH 密钥:
az keyvault secret show \ --vault-name DEMOEUS2DEP00userF6A \ --name DEMO-EUS2-DEP00-sshkey-pub | \ jq -r .value > sshkey.pub下载私钥和公钥对。 在 Cloud Shell 菜单中,选择“ 上传/下载文件>下载”。
服务主体配置
部署器使用服务主体将资源部署到订阅中。
登录 Azure CLI。
az login创建服务主体。 请务必将
<subscription-id>替换为您的 Azure 订阅标识符。 此外,请将<sp-name>替换为您的服务主体的名称。az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscription-id>" --name="<sp-name>"请注意输出,其中包含有关服务主体的信息。 复制以下字段的值:
应用程序标识符:
appId.密码:
password.租户标识符:
tenant.
为服务主体创建角色分配。 请确保用你在上一步中记下的应用程序标识符替换
<appId>。az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>将服务主体的密钥添加到密钥保管库,如下所示。 请务必将占位符值替换为在前面步骤中记下的具体信息。 将
<environment>替换为环境的名称,例如DEMO。az keyvault secret set --name "<environment>-subscription-id" --vault-name "<deployer_kv_user_name>" --value "<subscription-id>"; az keyvault secret set --name "<environment>-tenant-id" --vault-name "<deployer_kv_user_name>" --value "<tenant>"; az keyvault secret set --name "<environment>-client-id" --vault-name "<deployer_kv_user_name>" --value "<appId>"; az keyvault secret set --name "<environment>-client-secret" --vault-name "<deployer_kv_user_name>" --value "<password>";
库配置
使用 SSH 客户端和 部署程序设置期间检索的 SSH 密钥登录到部署程序。 如果使用 PuTTY 作为 SSH 客户端,请在使用之前将 SSH 密钥转换为
.ppk格式。导航到克隆自动化框架存储库的位置。
cd ~/Azure_SAP_Automated_Deployment/sap-automation(可选)签出一个与主分支不同的分支。 存储库的主分支是默认值。
将
<branch>替换为要使用的分支名称或提交哈希。git checkout <branch>检查你的分支是否为所需的修订版。
git rev-parse HEAD
创建工作目录。
mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/LIBRARY/DEMO-EUS2-SAP_LIBRARY; cd $_创建 JSON 配置文件。
cat <<EOF > DEMO-EUS2-SAP_LIBRARY.json { "infrastructure": { "environment" : "DEMO", "region" : "eastus2" }, "deployer": { "environment" : "DEMO", "region" : "eastus2", "vnet" : "DEP00" } } EOF初始化 Terraform。
terraform init ../../../sap-automation/deploy/terraform/bootstrap/sap_library/创建遵循默认命名约定的 Terraform 执行计划。
terraform plan \ --var-file=DEMO-EUS2-SAP_LIBRARY.json \ ../../../sap-automation/deploy/terraform/bootstrap/sap_library应用 Terraform 执行计划来部署资源。
terraform apply --auto-approve \ --var-file=DEMO-EUS2-SAP_LIBRARY.json \ ../../../sap-automation/deploy/terraform/bootstrap/sap_library/
重新初始化部署
重新初始化部署器
在 SSH 客户端中保持登录到部署器的状态。 或者,再次登录。
导航到创建的工作目录。
cd ~/Azure_SAP_Automated_Deployment/WORKSPACES/LOCAL/DEMO-EUS2-DEP00-INFRASTRUCTURE创建另一个名为
backend.. 的参数文件。 同样,请遵循默认命名约定。 对于resource_group_name,请使用包含 Terraform 状态文件(.tfstate)的存储帐户所在资源组的名称。 对于storage_account_name,请将<tfstate_storage_account_name>替换为 SAP 库部署中.tfstate文件的存储帐户名称。 对于key,请将部署者的资源组名称与扩展.terraform.tfstate组合在一起。 例如:cat <<EOF > backend resource_group_name = "DEMO-EUS2-SAP_LIBRARY" storage_account_name = "<tfstate_storage_account_name>" container_name = "tfstate" key = "DEMO-EUS2-DEP00-INFRASTRUCTURE.terraform.tfstate" EOF再次初始化 Terraform。
terraform init --backend-config backend \ ../../../sap-automation/deploy/terraform/run/sap_deployer/出现提示时 ,是否要将现有状态复制到新后端?,请输入
yes。删除本地状态文件。
rm terraform.tfstate*创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:
terraform plan \ --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/run/sap_deployer/应用 Terraform 执行计划。 例如:
terraform apply --auto-approve \ --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/run/sap_deployer/
重新初始化 SAP 库
在 SSH 客户端中保持登录到部署器的状态。 或者,再次登录。
导航到创建的工作目录。
cd ~/Azure_SAP_Automated_Deployment/WORKSPACES/LIBRARY/DEMO-EUS2-SAP_LIBRARY创建另一个名为
backend.. 的参数文件。 同样,请遵循默认命名约定。 对于resource_group_name,请使用包含 Terraform 状态文件(.tfstate)的存储帐户所在资源组的名称。 对于storage_account_name,请将<tfstate_storage_account_name>替换为 SAP 库部署中.tfstate文件的存储帐户名称。 对于key,请将部署者的资源组名称与扩展.terraform.tfstate组合在一起。 例如:cat <<EOF > backend resource_group_name = "DEMO-EUS2-SAP_LIBRARY" storage_account_name = "<tfstate_storage_account_name>" container_name = "tfstate" key = "DEMO-EUS2-SAP_LIBRARY.terraform.tfstate" EOF紧接在参数文件的
{左括号(backend)后面添加新的键值对。 对于tfstate_resource_id,请使用 Terraform 状态文件存储帐户的资源标识符。 对于deployer_tfstate_key,请使用部署程序状态文件的密钥名称。 例如:{ "tfstate_resource_id" : "<identifier>", "deployer_tfstate_key" : "<key>", "infrastructure": { ... }再次初始化 Terraform。
terraform init --backend-config backend \ ../../../sap-automation/deploy/terraform/run/sap_library/出现提示时 ,是否要将现有状态复制到新后端?,请输入
yes。删除本地状态文件。
rm terraform.tfstate*创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:
terraform plan \ --var-file=DEMO-EUS2-SAP_LIBRARY.json \ ../../../sap-automation/deploy/terraform/run/sap_library/应用 Terraform 执行计划。 例如:
terraform apply --auto-approve \ --var-file=DEMO-EUS2-SAP_LIBRARY.json \ ../../../sap-automation/deploy/terraform/run/sap_library/
部署工作负荷虚拟网络
接下来,部署 SAP 工作负荷虚拟网络。
在 SSH 客户端中保持登录到部署器的状态。 或者,再次登录。
创建工作目录。 遵循默认命名约定。
mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/LANDSCAPE/DEMO-EUS2-SAP00-INFRASTRUCTURE; cd $_创建名为
backend.. 的参数文件。 对于resource_group_name,请使用包含 Terraform 状态文件(.tfstate)的存储帐户所在资源组的名称。 对于storage_account_name,请将<tfstate_storage_account_name>替换为 SAP 库部署中.tfstate文件的存储帐户名称。 对于key,请将部署者的资源组名称与扩展.terraform.tfstate组合在一起。 例如:cat <<EOF > backend resource_group_name = "DEMO-EUS2-SAP_LIBRARY" storage_account_name = "<tfstate_storage_account_name>" container_name = "tfstate" key = "DEMO-EUS2-SAP00-INFRASTRUCTURE.terraform.tfstate" EOF再次初始化 Terraform。
terraform init --backend-config backend \ ../../../sap-automation/deploy/terraform/run/sap_landscape/创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:
terraform plan \ --var-file=DEMO-EUS2-SAP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/run/sap_landscape/应用 Terraform 执行计划。 例如:
terraform apply --auto-approve \ --var-file=DEMO-EUS2-SAP00-INFRASTRUCTURE.json \ ../../../sap-automation/deploy/terraform/run/sap_landscape/
SAP 部署单元
接下来,设置 SAP 部署单元。
在 SSH 客户端中保持登录到部署器的状态。 或者,再次登录
创建工作目录。 遵循默认命名约定。
mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/SYSTEM/DEMO-EUS2-SAP00-X00; cd $_创建另一个名为
backend.. 的参数文件。 对于resource_group_name,请使用包含 Terraform 状态文件(.tfstate)的存储帐户所在资源组的名称。 对于storage_account_name,请将<tfstate_storage_account_name>替换为 SAP 库部署中.tfstate文件的存储帐户名称。 对于key,请将部署者的资源组名称与扩展.terraform.tfstate组合在一起。 例如:cat <<EOF > backend resource_group_name = "DEMO-EUS2-SAP_LIBRARY" storage_account_name = "<tfstate_storage_account_name>" container_name = "tfstate" key = "DEMO-EUS2-SAP00-X00.terraform.tfstate" EOF按如下所示创建包含输入参数的 JSON 参数文件。 请确保将示例值替换为你自己的值。
cat <<EOF > DEMO-EUS2-SAP00-X00.json { "tfstate_resource_id" : "<resource-id>", "deployer_tfstate_key" : "DEMO-EUS2-DEP00-INFRASTRUCTURE.terraform.tfstate", "landscape_tfstate_key" : "DEMO-EUS2-SAP00-INFRASTRUCTURE.terraform.tfstate", "infrastructure": { "environment" : "DEMO", "region" : "eastus2", "vnets": { "sap": { "name" : "SAP00", "subnet_db": { "prefix" : "0.0.0.0/28" }, "subnet_web": { "prefix" : "0.0.0.0/28" }, "subnet_app": { "prefix" : "0.0.0.0/27" }, "subnet_admin": { "prefix" : "0.0.0.0/27" } } } }, "databases": [ { "platform" : "HANA", "high_availability" : false, "size" : "S4Demo", "os": { "publisher" : "SUSE", "offer" : "sles-sap-12-sp5", "sku" : "gen2", "version" : "latest" } } ], "application": { "enable_deployment" : true, "sid" : "X00", "scs_instance_number" : "00", "ers_instance_number" : "10", "scs_high_availability" : false, "application_server_count" : 3, "webdispatcher_count" : 1, "authentication": { "type" : "key", "username" : "azureadm" } } } EOF再次初始化 Terraform。
terraform init --backend-config backend \ ../../../sap-automation/deploy/terraform/run/sap_system/创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:
terraform plan \ --var-file=DEMO-EUS2-SAP00-X00.json \ ../../../sap-automation/deploy/terraform/run/sap_system/应用 Terraform 执行计划。 例如:
terraform apply --auto-approve \ --var-file=DEMO-EUS2-SAP00-X00.json \ ../../../sap-automation/deploy/terraform/run/sap_system/
Ansible 配置
通过执行 Ansible playbooks 来配置环境。 这些 playbook 位于 /sap-automation/deploy/ansible 中的自动化框架存储库中。
| Filename | Description |
|---|---|
playbook_01_os_base_config.yaml |
基本操作系统(OS)配置 |
playbook_02_os_sap_specific_config.yaml |
特定于 SAP 的 OS 配置 |
playbook_03_bom_processing.yaml |
SAP 材料清单 (BOM) 处理软件下载 |
playbook_04a_sap_scs_install.yaml |
SAP 中心服务 (SCS) 安装 |
playbook_05a_hana_db_install.yaml |
SAP HANA 数据库安装 |
playbook_06a_sap_dbload.yaml |
数据库加载程序 |
playbook_06b_sap_pas_install.yaml |
SAP 主应用程序服务器 (PAS) 安装 |
playbook_06c_sap_app_install.yaml |
SAP 应用程序服务器安装 |
playbook_06d_sap_web_install.yaml |
SAP Web 调度程序安装 |
playbook_06_00_00_pacemaker.yaml |
Pacemaker 群集配置 |
playbook_06_00_01_pacemaker_scs.yaml |
SCS 的 Pacemaker 配置 |
playbook_06_00_03_pacemaker_hana.yaml |
SAP HANA 数据库的 Pacemaker 配置 |
若要执行剧本或多个剧本,请使用以下命令 ansible-playbook 。 请务必将所有占位符值更改为你自己的信息:
- 将
<your-sapbits-path>更改为 SAP 库的存储帐户sapbits路径。 - 将
<azure-admin>更改为您的 Azure 管理员用户名。 - 更改
<ssh-key>为您要使用的私密SSH密钥。 - 根据需要,对
--extra-vars下的其他值进行更改。
如果遇到问题,请确保已 将 SAP 软件下载 到 Azure 环境。
export ANSIBLE_HOST_KEY_CHECKING=False
# export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=Yes
# export ANSIBLE_KEEP_REMOTE_FILES=1
ansible-playbook \
--inventory new-hosts.yaml \
--user <azure-admin> \
--private-key <ssh-key> \
--extra-vars="{ \
\"bom_base_name\": \"HANA_2_00_053_v001\", \
\"download_templates\": \"false\", \
\"sapbits_location_base_path\": \"<your-sapbits-path>", \
\"target_media_location\": \"/usr/sap/install\", \
\"sap_sid\": \"X00\", \
\"hdb_sid\": \"HDB\" \
}" \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_00_transition_start_for_sap_install_refactor.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_01_os_base_config.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_02_os_sap_specific_config.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_03_bom_processing.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_04a_sap_scs_install.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_05a_hana_db_install.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_06a_sap_dbload.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_06b_sap_pas_install.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_06c_sap_app_install.yaml \
~/Azure_SAP_Automated_Deployment/sap-automation/deploy/ansible/playbook_06d_sap_web_install.yaml