你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

手动部署入门

除了自动化部署以外,还可以手动部署 Azure 上的 SAP 部署自动化框架。 使用此示例配置和示例参数文件开始部署。

提示

本指南仅介绍如何执行手动部署。 若要快速入门,请参阅自动化部署指南

这些步骤引用并使用自动化框架的默认命名约定。 在整个代码中,还使用了示例值进行命名。 例如,部署器名称为 DEMO-EUS2-DEP00-INFRASTRUCTURE。 在此示例中,环境为一个演示环境 (DEMO),区域为“美国东部 2”(EUS2),部署器虚拟网络为 DEP00

先决条件

部署器设置

在开始之前,请检查是否在正确的 Azure 订阅中操作。 然后设置部署器:

  1. 下载并安装 Terraform
  2. 在部署器上克隆并配置自动化框架存储库
  3. 初始化 Terraform
  4. 获取 SSH 密钥以用于余下的部署。

检查 Azure 订阅

验证是否使用了适当的 Azure 订阅:

  1. 登录 Azure 门户

  2. 打开 Azure Cloud Shell

  3. 检查是否在要使用的订阅中操作:

    az account list --output=table | grep -i true
    
  4. 如有必要,请将活动订阅更改为要使用的订阅。

下载 Terraform

将 Terraform 下载到你的环境:

  1. 创建新目录 bin 并导航到该目录。

    mkdir -p ~/bin; cd $_
    
  2. 检索相应的 Terraform 二进制文件。 例如:

    wget  https://releases.hashicorp.com/terraform/0.14.7/terraform_0.14.7_linux_amd64.zip
    
  3. 解压缩 Terraform 二进制文件。 例如:

    unzip terraform_0.14.7_linux_amd64.zip
    
  4. 验证 Terraform 下载:

    hash terraform
    
  5. 创建一个目录用于 SAP 自动化部署。

    mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_
    

设置存储库

克隆并配置自动化框架存储库

  1. 从 GitHub 克隆存储库:

    git clone https://github.com/Azure/sap-automation.git
    
  2. 导航到 sap-automation 文件夹。

    cd  ~/Azure_SAP_Automated_Deployment/sap-automation
    
  3. (可选)签出一个与主分支不同的分支。 存储库的主分支是默认分支。

    1. <branch> 替换为要使用的分支名称或提交哈希。

      git checkout <branch>
      
    2. 检查你的分支是否为所需的修订版。

      git rev-parse HEAD
      

初始化 Terraform

  1. 创建工作目录。 目录名称必须遵循默认命名约定。 例如:

    mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/DEPLOYER/DEMO-EUS2-DEP00-INFRASTRUCTURE; cd $_
    
  2. 创建 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
    
  3. 初始化 Terraform。

    terraform init  ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/
    
  4. 创建遵循默认命名约定的 Terraform 执行计划。

    terraform plan                                                                    \
                    --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json                    \
                    ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/
    
  5. 应用 Terraform 执行计划以部署资源。

    terraform apply --auto-approve                                                    \
                    --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json                    \
                    ../../../sap-automation/deploy/terraform/bootstrap/sap_deployer/
    
  6. 记下输出。

获取 SSH 密钥

  1. 使用 Terraform 部署的输出,记下以下字段的值。

    1. 公共 IP 地址:deployer_public_ip_address

    2. 密钥保管库的用户名:deployer_kv_user_name

    3. 专用密钥保管库的名称:deployer_kv_prvt_name

    4. 公钥的名称:deployer_public_key_secret_name

    5. 私钥的名称:deployer_private_key_secret_name

  2. 运行后处理脚本。

    ./post_deployment.sh
    
  3. 提取 SSH 私钥:

    az keyvault secret show               \
      --vault-name DEMOEUS2DEP00userE27   \
      --name DEMO-EUS2-DEP00-sshkey     | \
      jq -r .value > sshkey
    
    
  4. 提取 SSH 公钥:

    az keyvault secret show               \
      --vault-name DEMOEUS2DEP00userF6A   \
      --name DEMO-EUS2-DEP00-sshkey-pub | \
      jq -r .value > sshkey.pub
    
    
  5. 下载私钥-公钥对。 在 Cloud Shell 菜单中,选择“上传/下载文件”>“下载”。

服务主体配置

部署器使用服务主体将资源部署到订阅中。

  1. 登录 Azure CLI。

    az login
    
  2. 创建服务主体。 请务必将 <subscription-id> 替换为你的 Azure 订阅标识符。 此外,将 <sp-name> 替换为你的服务主体名称。

    az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscription-id>" --name="<sp-name>"
    
  3. 请记下输出,其中包含有关服务主体的信息。 复制以下字段的值:

    1. 应用程序标识符:appId

    2. 密码:password

    3. 租户标识符:tenant

  4. 为服务主体创建角色分配。 请务必将 <appId> 替换为在上一步骤中记下的应用程序标识符。

    az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
    
  5. 按如下所示将服务主体的密钥添加到密钥保管库。 请务必将占位符值替换为在前面步骤中记下的信息。 将 <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>";
    

库配置

  1. 使用 SSH 客户端以及在设置部署器期间检索到的 SSH 密钥登录到部署器。 如果使用 PuTTY 作为 SSH 客户端,请在使用之前将 SSH 密钥转换为 .ppk 格式。

  2. 导航到克隆自动化框架存储库的位置。

    cd  ~/Azure_SAP_Automated_Deployment/sap-automation
    
  3. (可选)签出一个与主分支不同的分支。 存储库的主分支是默认分支。

    1. <branch> 替换为要使用的分支名称或提交哈希。

      git checkout <branch>
      
    2. 检查你的分支是否为所需的修订版。

      git rev-parse HEAD
      
  4. 创建工作目录。

    mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/LIBRARY/DEMO-EUS2-SAP_LIBRARY; cd $_
    
  5. 创建 JSON 配置文件。

    cat <<EOF > DEMO-EUS2-SAP_LIBRARY.json
    {
      "infrastructure": {
        "environment"                         : "DEMO",
        "region"                              : "eastus2"
      },
      "deployer": {
        "environment"                         : "DEMO",
        "region"                              : "eastus2",
        "vnet"                                : "DEP00"
      }
    }
    EOF
    
  6. 初始化 Terraform。

    terraform init  ../../../sap-automation/deploy/terraform/bootstrap/sap_library/
    
  7. 创建遵循默认命名约定的 Terraform 执行计划。

    terraform plan                                                                  \
                --var-file=DEMO-EUS2-SAP_LIBRARY.json                           \
                ../../../sap-automation/deploy/terraform/bootstrap/sap_library
    
    
  8. 应用 Terraform 执行计划以部署资源。

    terraform apply --auto-approve                                                  \
                --var-file=DEMO-EUS2-SAP_LIBRARY.json                           \
                ../../../sap-automation/deploy/terraform/bootstrap/sap_library/
    
    

重新初始化部署

重新初始化部署器SAP 库

重新初始化部署器

  1. 在 SSH 客户端中保持登录到部署器的状态。 或者重新登录。

  2. 导航到创建的工作目录。

    cd ~/Azure_SAP_Automated_Deployment/WORKSPACES/LOCAL/DEMO-EUS2-DEP00-INFRASTRUCTURE
    
  3. 创建名为 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
    
  4. 再次初始化 Terraform。

    terraform init  --backend-config backend                                        \
                    ../../../sap-automation/deploy/terraform/run/sap_deployer/
    
  5. 当系统提示“是否要将现有状态复制到新后端?”时,请输入 yes

  6. 删除本地状态文件。

    rm terraform.tfstate*
    
  7. 创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:

    terraform plan                                                                  \
                    --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json                  \
                    ../../../sap-automation/deploy/terraform/run/sap_deployer/
    
  8. 应用 Terraform 执行计划。 例如:

    terraform apply --auto-approve                                                  \
                    --var-file=DEMO-EUS2-DEP00-INFRASTRUCTURE.json                  \
                    ../../../sap-automation/deploy/terraform/run/sap_deployer/
    

重新初始化 SAP 库

  1. 在 SSH 客户端中保持登录到部署器的状态。 或者重新登录。

  2. 导航到创建的工作目录。

    cd ~/Azure_SAP_Automated_Deployment/WORKSPACES/LIBRARY/DEMO-EUS2-SAP_LIBRARY
    
  3. 创建名为 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
    
  4. 紧接在参数文件 backend 的左括号 ({) 后面添加一个新的密钥-值对。 对于 tfstate_resource_id,请使用 Terraform 状态文件存储帐户的资源标识符。 对于 deployer_tfstate_key,请使用部署器状态文件的密钥名称。 例如:

    {
        "tfstate_resource_id"                   : "<identifier>",
        "deployer_tfstate_key"                  : "<key>",
        "infrastructure": {
            ...
    }
    
  5. 再次初始化 Terraform。

    terraform init  --backend-config backend                                          \
                    ../../../sap-automation/deploy/terraform/run/sap_library/
    
  6. 当系统提示“是否要将现有状态复制到新后端?”时,请输入 yes

  7. 删除本地状态文件。

    rm terraform.tfstate*
    
  8. 创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:

    terraform plan                                                                    \
                    --var-file=DEMO-EUS2-SAP_LIBRARY.json                             \
                    ../../../sap-automation/deploy/terraform/run/sap_library/
    
  9. 应用 Terraform 执行计划。 例如:

    terraform apply --auto-approve                                                    \
                    --var-file=DEMO-EUS2-SAP_LIBRARY.json                             \
                    ../../../sap-automation/deploy/terraform/run/sap_library/
    

部署工作负载虚拟网络

接下来,部署 SAP 工作负载虚拟网络。

  1. 在 SSH 客户端中保持登录到部署器的状态。 或者重新登录。

  2. 创建工作目录。 请遵循默认命名约定。

    mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/LANDSCAPE/DEMO-EUS2-SAP00-INFRASTRUCTURE; cd $_
    
  3. 创建名为 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
    
  4. 再次初始化 Terraform。

    terraform init  --backend-config backend                                        \
                    ../../../sap-automation/deploy/terraform/run/sap_landscape/
    
  5. 创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:

    terraform plan                                                                  \
                --var-file=DEMO-EUS2-SAP00-INFRASTRUCTURE.json                  \
                ../../../sap-automation/deploy/terraform/run/sap_landscape/
    
  6. 应用 Terraform 执行计划。 例如:

    terraform apply --auto-approve                                                  \
                    --var-file=DEMO-EUS2-SAP00-INFRASTRUCTURE.json                  \
                    ../../../sap-automation/deploy/terraform/run/sap_landscape/
    

SAP 部署单元

接下来,设置 SAP 部署单元。

  1. 在 SSH 客户端中保持登录到部署器的状态。 或者重新登录

  2. 创建工作目录。 请遵循默认命名约定。

    mkdir -p ~/Azure_SAP_Automated_Deployment/WORKSPACES/SYSTEM/DEMO-EUS2-SAP00-X00; cd $_
    
  3. 创建名为 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
    
  4. 按如下所示使用输入参数创建一个 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
    
  5. 再次初始化 Terraform。

    terraform init  --backend-config backend                                        \
                    ../../../sap-automation/deploy/terraform/run/sap_system/
    
    
  6. 创建 Terraform 执行计划。 同样,请遵循默认命名约定。 例如:

    terraform plan                                                                  \
                    --var-file=DEMO-EUS2-SAP00-X00.json                             \
                    ../../../sap-automation/deploy/terraform/run/sap_system/
    
  7. 应用 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

后续步骤