附錄 - AWS 部署工具箱

本主題會介紹在 AWS 中進行部署時參考架構的工具和備用部署選項。具體而言,本主題會介紹如何自動化整個 EDG 中所述的範例 AWS 部署。

TabDeploy4EDG 自動安裝指令碼

TabDeploy4EDG 指令碼(連結在新視窗開啟)會自動實作第 4 部分 - 安裝並設定 Tableau Server 中所述的四節點 Tableau 部署。如果遵循本指南中所述的範例 AWS 實作,就能夠執行 TabDeploy4EDG。

要求。要執行該指令碼,必須根據 第 3 部分 - 準備 Tableau Server Enterprise 部署中的範例實作來準備和設定 AWS 環境:

  • VPC、子網路和安全性群組已按所述進行設定。IP 位址不必與範例實作中顯示的位址相符。
  • 四個 EC2 執行個體,正在執行最新的已更新 AWS Linux 2 版本
  • PostgreSQL 已安裝,並已如安裝、設定 PostgreSQL 和建立 tar 備份 中所述進行設定。
  • 步驟 1 的 tar 備份文件位於安裝 PostgreSQL 的 EC2 執行個體中,如使用 PostgreSQL 步驟 1 tar 備份中所述。
  • 執行 Tableau Server 部署節點 1 的 EC2 執行個體已設定為與 PostgreSQL 通訊,如第 4 部分 - 安裝並設定 Tableau Server中所述。
  • 您已使用來自堡壘主機的 SSH 工作階段登入到每個 EC2 執行個體。

該指令碼大約需要 1.5-2 小時來安裝和設定四個 Tableau 伺服器。該指令碼會根據參考架構的指定設定來設定 Tableau。該指令碼會執行以下動作:

  • 若您指定 PostgreSQL 主機 tar 檔案的路徑,則會還原 PostgreSQL 主機的第 1 階段備份。
  • 刪除所有節點上的現有 Tableau 安裝。
  • 在所有節點上執行 sudo yum update
  • 將 Tableau rpm 套件下載並複製到每個節點。
  • 將相依項下載並安裝到每個節點。
  • 建立 /app/tableau_server,並在所有節點上安裝套件。
  • 使用本機身分存放區安裝節點 1,並使用 PostgreSQL 設定外部存放庫。
  • 執行節點 2 - 節點 4 的啟動程序安裝和初始設定。
  • 刪除啟動程序檔案和 TabDeploy4EDG 的設定檔案。
  • 根據參考架構規格跨 Tableau 叢集設定服務。
  • 驗證安裝並傳回每個節點的狀態。

將指令碼下載並複制到堡壘主機

  1. TabDeploy4EDG 範例頁面(連結在新視窗開啟)複製指令碼,並將程式碼貼上到名為 TabDeploy4EDG 的檔案中。
  2. 將檔案儲存到作為堡壘主機的 EC2 主機上的主目錄。
  3. 執行以下命令,變更檔案的模式以使其可執行:

     sudo chmod +x TabDeploy4EDG

執行 TabDeploy4EDG

TabDeploy4EDG 必須從堡壘主機執行。編寫該指令碼時已假設該指令碼將在 ssh 轉送代理程式內容中執行,如範例:連線到 AWS 中的 Bastion 主機中所述。若未在 ssh 轉送代理程式內容中執行,那麼在整個安裝過程中將提示您輸入密碼。

  1. 建立、編輯和儲存登錄檔(registration.json )。該檔案必須為格式正確的 json 檔案。複製並自訂以下範本:

    {
    	"zip" : "97403",
    	"country" : "USA",
    	"city" : "Springfield",
    	"last_name" : "Simpson",
    	"industry" : "Energy",
    	"eula" : "yes",
    	"title" : "Safety Inspection Engineer",
    	"phone" : "5558675309",
    	"company" : "Example",
    	"state" : "OR",
    	"department" : "Engineering",
    	"first_name" : "Homer",
    	"email" : "homer@example.com"
    }
  2. 執行以下命令,產生範本設定檔案:

    ./TabDeploy4EDG -g edg.config              
  3. 開啟設定檔案進行編輯:

    sudo nano edg.config              

    至少必須新增每個 EC2 主機的 IP 位址、登錄檔的檔案路徑以及有效的授權金鑰。

  4. 完成設定檔案的編輯後,儲存然後關閉。

  5. 要執行 TabDeploy4EDG,請執行以下命令:

    ./TabDeploy4EDG -f edg.config         

範例:使用 Terraform 自動化 AWS 基礎架構部署

本區段介紹如何設定和執行 Terraform 以在 AWS 中部署 EDG 參考架構。此處提供的範例 Terraform 設定部署了一個 AWS VPC,其中包含第 3 部分 - 準備 Tableau Server Enterprise 部署中描述的子網域、安全性群組和 EC2 執行個體。

Tableau 範例網站上提供了範例 Terraform 範本,網址為https://help.tableau.com/samples/en-us/edg/edg-terraform.zip(連結在新視窗開啟) 。必須為您的組織設定和自訂這些範本。本區段中提供的設定內容描述了必須自訂部署所需的最少範本變更。

目標

此處提供的 Terraform 範本和內容旨在提供工作範例,使您能夠在開發測試環境中快速部署 EDG。

我們已盡最大努力測試和記錄範例 Terraform 部署。但是,使用 Terraform 在生產環境中部署和維護 EDG 需要 Terraform 專業知識,這超出了本範例的範圍。Tableau 不為此處記錄的範例 Terraform 解決方案提供支援。

結束狀態

按照本區段中的過程在 AWS 中設定 VPC,該 VPC 的功能等同於第 3 部分 - 準備 Tableau Server Enterprise 部署中指定的 VPC。

本區段中的範例 Terraform 範本和支援內容:

  • 如上所示建立彈性 IP 位址、兩個可用區域和子網域組織的 VPC(IP 位址不同)
  • 建立 Bastion、Public、Private 和 Data 安全性群組。
  • 在安全性群組上設定大多數入口和出口規則。在 Terraform 執行後,將需要編輯安全性群組。
  • 建立以下 EC2 主機(每個都執行 AWS Linux2):bastion、proxy 1 proxy 2、Tableau 節點 1、Tableau 節點 2、Tableau 節點 3、Tableau 節點 4。
  • 未建立 PostgreSQL 的 EC2 主機。必須在資料安全性群組中手動建立 EC2,然後按照安裝、設定 PostgreSQL 和建立 tar 備份

需求

  • AWS 帳戶 - 必須有權存取允許建立 VPC 的 AWS 帳戶。
  • 如果從 Windows 電腦執行 Terraform,則需要安裝 AWS CLI。
  • 您的 AWS 帳戶中可用的彈性 IP 位址。
  • 在 AWS Route 53 中註冊的網域。Terraform 將在 Route 53 中建立 DNS 區域和相關的 SSL 憑證。因此,執行 Terraform 的設定檔也必須在 Route 53 中具有適當的權限。

開始之前

  • 此過程中的命令列範例適用於帶有 Apple OS 的終端。要在 Windows 上執行 Terraform,可能需要根據需要調整帶有檔案路徑的命令。
  • Terraform 專案由許多文字設定檔案(.tf 檔案副檔名)組成。可以自訂這些檔案來設定 Terraform。如果沒有強大的文字編輯器,請安裝 Atom 或 Text++。
  • 如果要與他人共用 Terraform 專案,我們建議將專案存放在 Git 中以進行變更管理。

步驟 1 - 準備環境

下載並安裝 Terraform

https://www.terraform.io/downloads(連結在新視窗開啟)

B. 產生公私鑰配對

這是您將用於存取 AWS 和產生的 VPC 環境的金鑰。執行 Terraform 時,將包括公鑰。

開啟命令提示字元並執行以下命令:

  1. Create a private key. For example, my-key.pem:

    openssl genrsa -out my-key.pem 1024
  2. 建立公鑰。此金鑰格式不用於 Terraform。稍後將在此過程中將其轉換為 ssh 金鑰:

    openssl rsa -in my-key.pem -pubout > my-key.pub
  3. 設定私鑰權限:

    sudo chmod 0600 my-key.pem

    在 Windows 上設定權限:

    • 在 Windows 資源管理器中找到該檔案,右鍵點一下它,然後選取「屬性」。巡覽到「安全性」索引標籤,然後點一下「進階」
    • 將擁有者變更為您,停用繼承並刪除所有權限。授予自己「完全控制權」,然後點一下「儲存」。將檔案標記為唯讀。
  4. 建立 ssh 公鑰。這是稍後將複製到 Terraform 中的金鑰。

    ssh-keygen -y -f my-key.pem >my-key-ssh.pub

C. 下載專案並新增狀態目錄

  1. 下載並解壓縮 EDG Terraform 專案(連結在新視窗開啟)並將它們儲存到本機電腦。解壓縮下載後,您將擁有一個頂層目錄、edg-terraform 和一系列子目錄。

  2. 建立一個名為 state,作為頂層 edg-terraform 目錄的同儕目錄。

步驟 2:自訂 Terraform 範本

必須自訂 Terraform 範本以符合 AWS 和 EDG 環境。此處的範例提供大多數組織需要進行的最少範本自訂。特定環境可能需要其他自訂。

本區段按範本名稱組織。

在繼續執行步驟 3 - 執行 Terraform 之前,請務必儲存所有變更。

versions.tf

There are three instances of versions.tf files where the required_version field must match the version of terraform.exe you're using. Check the version of terraform (terraform.exe -version) and update each of the following instances:

  • edg-terraform\versions.tf
  • edg-terraform\modules\proxy\versions.tf
  • edg-terraform\modules\tableau_instance\versions.tf

key-pair.tf

  1. 開啟步驟 1B 中產生的公鑰並複製該金鑰:

     less my-key-ssh.pub

    Windows:複製公鑰的內容。

  2. 將公鑰字串複製到 public_key 參數中,例如:

    resource "aws_key_pair" "tableau" {
    key_name = "my-key"
    public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQ (truncated example) dZVHambOCw=="

Ensure that the key_name value is unique in the datacenter or terraform apply will fail.

locals.tf

user.owner 更新為您的名稱或別名。您在此處輸入的值將用於 Terraform 建立的資源上 AWS 中的「名稱」標記。

providers.tf

  1. 根據組織的要求新增標籤。例如:

    default_tags {
      tags = {
          
       "Application" = "tableau",
       "Creator" = "alias@example.com",
       "DeptCode" = "8675309",
       "Description" = "EDG",
       "Environment" = "test",
       "Group" = "itcloud@example.com"
      }
    }
  2. If using provider, comment out the assume_role lines:

    /* assume_role {
    role_arn     = "arn:aws:iam::310946706895:role/terraform-backend"
    session_name = "terraform"
    }*/  

elb.tf

Under 'resource "aws_lb" "tableau" {' choose a unique value to use for name and tags.Name.

If another AWS load balancer has the same name in the datacenter, then terraform apply will fail.

Add idle_timeout:

resource "aws_lb" "tableau" {
name                       = "edg-again-alb"
load_balancer_type         = "application"
subnets                    = [for subnet in aws_subnet.public : subnet.id]
security_groups            = [aws_security_group.public.id]
drop_invalid_header_fields = true
idle_timeout               = 400
tags = {
Name = "edg-again-alb"
}
			}

variables.tf

更新根網域名稱。此名稱必須與在 Route 53 中註冊的網域相符。

variable "root_domain_name" {
 default = "example.com"
 }

預設情況下,子網域,tableau,指定為 VPC DNS 網域名稱。要變更此設定,請更新 subdomain

variable "subdomain" {
 default = "tableau"
}

modules/tableau_instance/ec2.tf

There are two ec2.tf files in the project. This customization is for the Tableau instance of the ec2.tf in the directory: modules/tableau_instance/ec2.tf.

  • 如果需要,請新增標籤 blob:

    tags = { 
     "Name" : var.ec2_name,
     "user.owner" = "ALIAS",
     "Application" = "tableau",
     "Creator" = "ALIAS@example.com",
     "DeptCode" = "8675309",
     "Description" = "EDG",
     "Environment" = "test",
     "Group" = "itcloud@example.com"
     }
    }
  • 根據需要,可選取更新存放區以處理資料要求:

    根卷:

    root_block_device {
     volume_size = 100
     volume_type = "gp3"
    }

    應用卷:

    resource "aws_ebs_volume" "tableau" {
     availability_zone = data.aws_subnet.tableau.availability_zone
     size              = 500
     type              = "gp3"
    }

步驟 3 - 執行 Terraform

A. 初始化 Terraform

在終端中,切換到 edg-terraform 目錄並執行以下命令:

terraform init

如果初始化成功,請繼續下一步。如果初始化失敗,請按照 Terraform 輸出中的說明進行動作。

B. 規劃 Terraform

在同一目錄中,執行計劃命令:

terraform plan

該命令可以多次執行。根據需要執行多次以修復錯誤。當此命令執行無誤時,繼續下一步。

C. 套用 Terraform

從同一目錄執行應用命令:

terraform apply

Terraform will prompt you to verify deployment, type Yes.

可選:銷毀 Terraform

可以執行 destroy 命令銷毀整個 VPC:

terraform destroy

destroy 命令只會銷毀它建立的內容。如果對 AWS 中的某些物件(即安全性群組、子網域等)進行手動變更,則 destroy 將失敗。要退出失敗/當機的銷毀動作,請輸入 Control + C。然後,必須手動將 VPC 清理到 Terraform 最初建立它時的狀態。然後可以執行 destroy 命令。

步驟 4 - 連線到 bastion

所有命令列連線都通過 TCP 22(SSH 協定)上的 bastion 主機。

  1. 在 AWS 中,在 bastion 安全性群組中建立輸入規則(「AWS」>「安全性群組」>「Bastion SG」>「編輯輸入規則」)並建立規則以允許來自將執行終端命令的 IP 位址或子網域遮罩的 SSH (TCP 22) 連線.

    可選:您可能會發現在部署期間允許在「私人」和「公開」群組中的 EC2 執行個體之間複製檔案很有幫助。建立輸入 SSH 規則:

    • 私有:建立輸入原則以允許來自「公開」的 SSH
    • Public:建立輸入原則以允許來自「私人」和來自「公開」的 SSH
  2. 使用在步驟 1.B 中建立的 pem 金鑰連線到 bastion 主機:

    在 Mac 終端上:

    從存放 pem 金鑰的目錄執行以下命令:

    ssh-add —apple-use-keychain <keyName>.pem

    If you get a warning about private key being accessible by others, then run this command: chmod 600 <keyName.pem> and then run the ssh-add command again.

    Connect to the bastion host with this command: ssh -A ec2-user@IPaddress

    例如: ssh -A ec2-user@3.15.12.112

    在使用 PuTTY 和 Pageant 的 Windows 上:

    1. 從 pem 金鑰建立 ppk:使用 PuTTY 金鑰產生器。載入在步驟 1.B 中建立的 pem 金鑰。金鑰匯入後,點一下「儲存私鑰」。這將建立一個 ppk 檔案。

    2. 在 PuTTY 中 - 開啟設定並進行以下變更:

      • Sessions>Host Name:新增 bastion 主機的IP地址。
      • Sessions>Port: 22
      • Connection>Data>Auto-login username: ec2-user
      • Connection>SSH>Auth>Allow agent forwarding
      • Connection>SSH>Auth> 對於私鑰,點一下 Browse 並選取剛剛建立的 .ppk 檔案。
    3. 安裝 Pageant 並將 ppk 載入到應用程式中。

    步驟 5:安裝 PostgreSQL

    Terraform 範本不安裝 PostgreSQL 用作外部存放庫。但是,會建立關聯的安全性群組和子網域。如果您在執行 PostgreSQL 的 EC2 執行個體上安裝外部存放庫,則必須按照第 3 部分 - 準備 Tableau Server Enterprise 部署中所述部署 EC2 執行個體。

    然後安裝、設定和 tar 備份 PostgreSQL,如第 4 部分 - 安裝並設定 Tableau Server中所述。

    步驟 6 -(可選)執行 DeployTab4EDG

    TabDeploy4EDG 指令碼自動執行步驟 4 中描述的四節點 Tableau 部署。請參見TabDeploy4EDG 自動安裝指令碼

感謝您的意見反應!已成功提交您的意見回饋。謝謝!