開始手動部署
除了自動部署之外,您也可以在 Azure Deployment Automation Framework 手動部署 SAP。 使用這個範例設定和樣本參數檔案,開始手動部署。
提示
本指南僅說明如何執行手動部署。 若想快速入門,請參閱自動化部署指南。
這些步驟會參考並使用自動化架構的預設命名慣例。 範例值也用於整個程式碼的命名。 舉例而言,部署器名稱是 DEMO-EUS2-DEP00-INFRASTRUCTURE
。 在這個範例中,環境是示範 (DEMO
),區域是 [美國東部 2] (EUS2
),部署器虛擬網路是 DEP00
。
必要條件
部署器設定
開始之前,請檢查您是否處於正確的 Azure 訂用帳戶。 然後設定您的部署器:
- 下載並安裝 Terraform。
- 在部署器上複製並設定自動化架構存放庫。
- 初始化 Terraform
- 取得 SSH 金鑰,以在部署的其餘部分中使用。
檢查 Azure 訂用帳戶
確認您使用的是正確的 Azure 訂用帳戶:
登入 Azure 入口網站。
請檢查您是否處於要使用的訂用帳戶中:
az account list --output=table | grep -i true
如有必要,請將使用中的訂用帳戶變更為您要使用的訂用帳戶。
下載 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 劇本,以設定您的設定。 這些劇本位於 /sap-automation/deploy/ansible
中的自動化架構存放庫。
檔案名稱 | 描述 |
---|---|
playbook_01_os_base_config.yaml |
基本作業系統 (OS) 設定 |
playbook_02_os_sap_specific_config.yaml |
SAP-Specific 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