你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
手动部署入门
除了自动化部署以外,还可以手动部署 Azure 上的 SAP 部署自动化框架。 使用此示例配置和示例参数文件开始部署。
提示
本指南仅介绍如何执行手动部署。 若要快速入门,请参阅自动化部署指南。
这些步骤引用并使用自动化框架的默认命名约定。 在整个代码中,还使用了示例值进行命名。 例如,部署器名称为 DEMO-EUS2-DEP00-INFRASTRUCTURE
。 在此示例中,环境为一个演示环境 (DEMO
),区域为“美国东部 2”(EUS2
),部署器虚拟网络为 DEP00
。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户。
- 一个有权创建服务主体的 Azure 帐户。
- 在 Azure 环境中下载的一个 SAP 软件。
部署器设置
在开始之前,请检查是否在正确的 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
。密钥保管库的用户名:
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 playbook 来配置设置。 这些 playbook 位于 /sap-automation/deploy/ansible
中的自动化框架存储库中。
文件名 | 说明 |
---|---|
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 配置 |
若要执行一个或多个 playbook,请使用命令 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