附录 - AWS 部署工具箱

本主题包括在 AWS 中部署时参考架构的工具和备用部署选项。具体而言,本主题描述了如何自动完成整个 EDG 中描述的示例 AWS 部署。

TabDeploy4EDG 自动安装脚本

TabDeploy4EDG 脚本(链接在新窗口中打开)自动执行第 4 部分 - 安装并配置 Tableau Server中描述的四节点 Tableau 部署。如果您遵循本指南中描述的示例 AWS/Linux 实施,那么您可能能够运行 TabDeploy4EDG。

要求。若要运行该脚本,您必须根据第 3 部分 - 准备 Tableau Server 企业部署中的示例实现来准备和配置 AWS 环境:

该脚本大约需要 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 中的堡垒主机中所述。如果您没有使用 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 企业部署中描述的子网、安全组和 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 企业部署中指定的 VPC。

本部分中的示例 Terraform 模板和支持内容:

  • 按上文所示方式创建具有弹性 IP 地址、两个可用区和子网组织的 VPC(IP 地址不同)
  • 创建 Bastion、Public、Private 和 Data 安全组。
  • 在安全组上设置大多数入口和出口规则。在 Terraform 运行后,您将需要编辑安全组。
  • 创建以下 EC2 主机(每个都运行 AWS Linux2):堡垒、代理 1 代理 2、Tableau 节点 1、Tableau 节点 2、Tableau 节点 3、Tableau 节点 4。
  • 未创建 PostgreSQL 的 EC2 主机。您必须在 Data 安全组中手动创建 EC2,然后按照安装、配置 PostgreSQL 和创建 PostgreSQL 的 tar 备份中所述安装和配置 PostgreSQL。

要求

  • 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 - 准备环境

A. 下载并安装 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 资源管理器中找到该文件,右键单击它,然后选择“属性”s。导航到“安全”选项卡,然后单击“高级”
    • 将所有者更改为您,禁用继承并删除所有权限。授予自己完全控制权,然后单击“保存”。将文件标记为只读。
  4. 创建 ssh 公钥。这是稍后您将复制到 Terraform 中的密钥。

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

C. 下载项目并添加 state 目录

  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

Update user.owner to your name or alias. The value you enter here will be used for the "Name" tag in AWS on the resources that Terraform creates.

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"
 }

默认情况下,将为 VPC DNS 域名指定子域 tableau。若要更改此设置,请更新 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

从同一目录中,运行 plan 命令:

terraform plan

该命令可以多次运行。根据需要运行多次以修复错误。当此命令运行无错误时,继续执行下一步。

C. 应用 Terraform

从同一目录中,运行 apply 命令:

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 - 连接到堡垒

所有命令行连接都通过 TCP 22(SSH 协议)上的堡垒主机进行。

  1. 在 AWS 中,在 bastion 安全组中创建一个入站规则(“AWS”>“Security Groups”(安全组)>“Bastion SG”(堡垒 SG)>“Edit inbound rules”(编辑入站规则)),并创建一个规则以允许来自将运行终端命令的 IP 地址或子网掩码的 SSH (TCP 22) 连接.

    可选:您可能会发现,在部署期间允许在 Private 组和 Public 组中的 EC2 实例之间复制文件很有帮助。创建入站 SSH 规则:

    • Private:创建入站规则以允许来自 Public 的 SSH
    • Public:创建入站规则以允许来自 Private 和 Public 的 SSH
  2. 使用您在步骤 1.B 中创建的 pem 密钥连接到堡垒主机:

    在 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

    For example: ssh -A ec2-user@3.15.12.112.

    在 Windows 上,使用 PuTTY 和 Pageant:

    1. 从 pem 密钥创建 ppk:使用 PuTTY 密钥生成器。打开您在步骤 1.B 中创建的 pem 密钥。密钥导入后,点击“Save private key”(保存私钥)。这将创建一个 ppk 文件。

    2. 在 PuTTY 中 - 打开配置并进行以下更改:

      • “Sessions”(会话)>“Host Name”(主机名):添加堡垒机的 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 企业部署中所述部署 EC2 实例。

    然后安装、配置 PostgreSQL 并创建 PostgreSQL 的 tar 备份,如第 4 部分 - 安装并配置 Tableau Server中所述。

    步骤 6 -(可选)运行 DeployTab4EDG

    TabDeploy4EDG 会自动执行第 4 部分中描述的四节点 Tableau 部署的实施。请参见TabDeploy4EDG 自动安装脚本

感谢您的反馈!您的反馈已成功提交。谢谢!