付録 - AWS Deployment Toolbox

このトピックには、AWS に展開したときのリファレンス アーキテクチャのツールと代替デプロイ オプションが含まれています。具体的には、このトピックでは、EDG 全体で説明されている AWS 展開の例を自動化する方法について説明します。

TabDeploy4EDG 自動インストール スクリプト

TabDeploy4EDG スクリプト(新しいウィンドウでリンクが開く)は、「パート 4 - Tableau Server のインストールと構成」で説明されている 4 ノードの Tableau 展開の実装を自動化します。このガイドで説明されている AWS の実装例に従うと、TabDeploy4EDG を実行できます。

要件: スクリプトを実行するには、「パート 3 - Tableau Server を企業環境へ導入する準備」の実装例に従って、AWS 環境を準備して設定する必要があります。

  • VPC、サブネット、およびセキュリティグループが、記載通りに設定されている。IP アドレスは、実装例の記載と同じである必要はありません。
  • 4 つの EC2 インスタンスで、AWS Linux2 の最新の更新ビルドを実行している。
  • PostgreSQL がインストールされ、PostgreSQL のインストール、構成、および tar バックアップの記載通りに構成されている。
  • ステップ 1 の tar バックアップ ファイルは、PostgreSQL がインストールされている EC2 インスタンスにあります。詳しくは、PostgreSQL ステップ 1 の tar バックアップを取得するを参照してください。
  • Tableau Server 展開のノード 1 を実行する EC2 インスタンスが、PostgreSQL と通信できるようにパート 4 - Tableau Server のインストールと構成の記載通りに構成されている。
  • 要塞ホストから SSH セッションを使用して各 EC2 インスタンスにログインしました。

スクリプトは、おおよそ 1 時間半から 2 時間かけて、4 つの Tableau サーバーをインストールして構成します。Tableau は、参照アーキテクチャに規定された設定に従って構成されます。スクリプトが実行するアクションは次のとおりです。

  • PostgreSQL ホストの tar ファイルへのパスを指定すると、PostgreSQL ホストのステージ 1 バックアップが復元されます。
  • すべてのノードで既存の Tableau インストールを消去します。
  • すべてのノードで sudo yum update を実行します。
  • 各ノードに Tableau rpm パッケージをダウンロードしてコピーします。
  • 各ノードに依存関係をダウンロードしてインストールします。
  • /app/tableau_server を作成して、すべてのノードにパッケージをインストールします。
  • ローカル ID ストアを使用してノード 1 をインストールし、PostgreSQL を使用して外部リポジトリを構成します。
  • ノード 2 ~ノード 4 の bootstrap のインストールと初期設定を行います。
  • TabDeploy4EDG の bootstrap ファイルと構成ファイルを削除します。
  • リファレンス アーキテクチャの仕様に従って、Tableau クラスター全体でサービスを構成します。
  • インストールを検証し、各ノードのステータスを返します。

スクリプトのダウンロードと要塞ホストへのコピー

  1. TabDeploy4EDG サンプル ページ(新しいウィンドウでリンクが開く)からスクリプトをコピーし、TabDeploy4EDG というファイルにコードを貼り付けます。
  2. 要塞ホストとして稼働している EC2 ホストのホーム ディレクトリにファイルを保存します。
  3. 次のコマンドを実行して、ファイルのモードを実行可能に変更します。

     sudo chmod +x TabDeploy4EDG

TabDeploy4EDG の実行

TabDeploy4EDG は、要塞ホストで実行する必要があります。スクリプトは、例: AWS の要塞ホストに接続するに記載のとおり、ssh フォワード エージェントのコンテキストで実行していることを前提に記述されています。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 構成の例では、「パート 3 - Tableau Server を企業環境へ導入する準備」で説明されているサブネット、セキュリティ グループ、EC2 インスタンスを使用して AWS VPC をデプロイしています。

Terraform のサンプル テンプレートは、Tableau サンプル Web サイト (https://help.tableau.com/samples/en-us/edg/edg-terraform.zip(新しいウィンドウでリンクが開く)) で入手できます。これらのテンプレートは、組織に合わせて構成およびカスタマイズする必要があります。このセクションで提供する構成コンテンツでは、デプロイするためにカスタマイズする必要がある最小限のテンプレート変更について説明します。

目標

ここで提供される Terraform テンプレートとコンテンツは、開発テスト環境で EDG を迅速にデプロイできるようにする作業サンプルとして使用することを意図しています。

Terraform 展開の例をテストして文書化することには最善を尽くしていますが、Terraform を使用して本番環境で EDG をデプロイおよび維持するには、この例の範囲を超える Terraform の専門知識が必要です。Tableau は、ここに記載されている Terraform ソリューションの例をサポートしていません。

目的とする状態

このセクションの手順に従って、「パート 3 - Tableau Server を企業環境へ導入する準備」で指定されている VPC と機能的に同等の VPC を AWS に設定します。

このセクションの Terraform サンプル テンプレートとサポート コンテンツ:

  • 上記のように、Elastic IP アドレス、2 つのアベイラビリティー ゾーン、サブネット組織を使って VPC を作成します (IP アドレスは異なります)。
  • Bastion、Public、Private、および Data セキュリティ グループを作成します。
  • セキュリティ グループに大部分の入力ルールと出力ルールを設定します。Terraform の実行後に、セキュリティ グループを編集する必要があります。
  • 次の EC2 ホスト (各ホストが AWS Linux2 を実行) を作成します: bastion、proxy 1、proxy 2、Tableau node 1、Tableau node 2、Tableau node 3、Tableau node 4
  • PostgreSQL の EC2 ホストは作成されません。Data セキュリティ グループに EC2 を手動で作成してから、「PostgreSQL のインストール、構成、および tar バックアップ」の説明に従って PostgreSQL をインストールして構成する必要があります。

要件

  • AWS アカウント - VPC を作成できる AWS アカウントにアクセスできる必要があります。
  • Windows コンピューターから Terraform を実行している場合は、AWS CLI をインストールする必要があります。
  • AWS アカウントで使用可能な Elastic 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 を実行するときに、公開キーを含めます。

Terminal を開き、次のコマンドを実行します。

  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 エクスプローラーでファイルを見つけて右クリックし、[プロパティ] を選択します。[セキュリティ] タブに移動し、[詳細] をクリックします。
    • 所有者を自分に変更し、継承を無効にして、すべてのパーミッションを削除します。自分自身に [Full control (フル コントロール)] を付与し、[保存] をクリックします。ファイルを読み取り専用としてマークします。
  4. ssh 公開キーを作成します。これは、プロセスの後半で Terraform にコピーするキーです。

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

C. プロジェクトをダウンロードして state ディレクトリを追加する

  1. EDG Terraform プロジェクト(新しいウィンドウでリンクが開く)をダウンロードして解凍し、ローカル コンピューターに保存します。ダウンロードを解凍すると、最上位のディレクトリである edg-terraform と一連のサブディレクトリが作成されます。

  2. 最上位の edg-terraform ディレクトリのピアとして state というディレクトリを作成します。

ステップ 2 - Terraform テンプレートのカスタマイズ

AWS および EDG 環境に合わせて Terraform テンプレートをカスタマイズする必要があります。ここでの例は、ほとんどの組織が行う必要がある最小限のテンプレート カスタマイズを提供します。特定の環境では、他のカスタマイズが必要になる可能性があります。

このセクションはテンプレート名別に構成されています。

ステップ 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. ステップ 1.B で生成した公開キーを開き、キーをコピーします。

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

デフォルトでは、サブドメイン 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 を初期化する

Terminal で、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 コマンドは、作成した VPC のみを破棄します。AWS の一部のオブジェクト (セキュリティ グループやサブネットなど) を手動で変更した場合、destroy コマンドは失敗します。失敗/ハングしている destroy の操作を終了するには、「Control + C」と入力します。次に、VPC を手動でクリーンアップして、Terraform が最初に VPC を作成したときの状態にする必要があります。その後、destroy コマンドを実行することができます。

ステップ 4 - bastion に接続する

すべてのコマンド ライン接続は、TCP 22 (SSH プロトコル) の bastion ホストを介して行われます。

  1. AWS で、Bastion セキュリティ グループ ([AWS] > [セキュリティ グループ] > [Bastion SG] > [Edit inbound rules (インバウンド ルールの編集)]) に移動してインバウンド ルールを作成し、ターミナル コマンドを実行する IP アドレスまたはサブネット マスクからの SSH (TCP 22) 接続を許可するルールを作成します。

    オプション: 展開中に Private グループと Public グループの EC2 インスタンス間でファイルのコピーを許可すると役立つ場合があります。インバウンド SSH ルールを作成します。

    • Private: Public からの SSH を許可するインバウンド ルールを作成します
    • Public: Private と 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 Key Generator を使用します。ステップ 1.B で作成した pem キーを読み込みます。キーがインポートされたら、[Save private key (秘密キーを保存)] をクリックします。これにより、ppk ファイルが作成されます。

    2. PuTTY で構成を開き、次の変更を加えます。

      • [セッション] > [ホスト名]: bastion ホストの IP アドレスを追加します。
      • [セッション] > [ポート]: 22
      • [接続] > [データ] > [Auto-login username (自動ログイン ユーザー名)]: ec2-user
      • [接続] > [SSH] > [認証] > [エージェントの転送を許可する]
      • [接続] > [SSH] > [認証] > [For private key (秘密キー用)] で、[参照] をクリックして、作成した .ppk ファイルを選択します。
    3. Pageant をインストールし、アプリケーションに ppk を読み込みます。

    ステップ 5 - PostgreSQL のインストール

    Terraform テンプレートは、外部リポジトリとして使用するために PostgreSQL をインストールしません。ただし、関連するセキュリティ グループとサブネットは作成されます。PostgreSQL を実行している EC2 インスタンスに外部リポジトリをインストールする場合は、「パート 3 - Tableau Server を企業環境へ導入する準備」説明に従って、EC2 インスタンスをデプロイする必要があります。

    次に、「パート 4 - Tableau Server のインストールと構成」説明に従って、PostgreSQL をインストールして構成し、tar バックアップを作成します。

    ステップ 6 - (オプション) DeployTab4EDG の実行

    TabDeploy4EDG スクリプトによって、パート 4 で説明されている 4 ノード Tableau 展開の実装が自動化されます。「TabDeploy4EDG 自動インストール スクリプト」を参照してください。

フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!