#tc18 [レポート] 「AWSでTableau ServerをDevOpsに管理」入門- Tableau Conference 2018 at New Orleans

目次

 

セッション概要

当セッションの概要は以下の通りです。

<セッションタイトル>
DevOps 101 for Tableau Server admins in AWS
(「AWSでTableau ServerをDevOpsに管理」入門

<講師>
Eric Hannell, Schibsted

<レベル>
Advanced

<セッション概要>
Running Tableau Server on AWS? Don't miss these tips on how to do it the DevOps™ way! Turn your automation and monitoring up to 11 with this session. We will look at practical examples of how to: - send SMS alerts when Tableau has a problem - architect Tableau Server VMs in the safest way (using jump hosts) - automate deployments of entire environments with cloudformation (including the tableau server install) - run scheduled commands on the server automatically with SSM commands to implement a robust DR strategy and free your inner server-less hipster (and make your admin life easier) with lambda functions
(AWSでTableau Serverを実行していますか? DevOpsのやり方に関するヒントをお見逃しなく! このセッションでは、自動化と監視を最大11回まで行うことができます。 具体的な例をみてみましょう。「Tableauに問題があるときにSMSアラートを送信する。」「安全な方法で(ジャンプホストを使用して)Tableau Server VMを設計します。」「CloudFormation(Tableau Serverインストールを含む)を使用して環境全体のデプロイを自動化します。」「SSMコマンドを使用してサーバー上でスケジュールされたコマンドを自動的に実行し、Lambda関数を使用して堅牢なDR戦略を実装し、あなたの”サーバーレスヒップスター”を解放する(管理者の作業を簡単にします)。

 

セッションレポート

 

アイスブレイク

セッションの本題に入る前に、アイスブレイクとして、ちょっとしたゲームが行われました。内容は画面に表示された名前が、ポケモンの名前かビッグデータの名前かを当てるゲームっていうなかなか斜め上をいく内容のゲームでした。私はポケモンは青しかやったことがなく、そもそもポケモンの名前を知らなすぎて全く正解できませんでした。ちなみに、受講者のほとんどは非アジア人だったのですが、ほとんどの人がポケモンを知っていて、改めてポケモンは世界レベルということを実感しました。  

DevOpsとは

今日では、DevOpsの種類が目立つように表示されていて、DevOpsを検索すると、これがDevOpsに言及した唯一の話だったことがわかります。 私たちはDevOpsについて話しています。これは、さまざまな人々に異なることを意味する言葉ですが、この言葉の根源は開発運用です。 顧客にプロダクトをすばやくデプロイし、顧客がこのプロダクトをどのように使用しているかを監視して、ライフサイクルを生み出し、顧客に大きな価値をもたらすことができます。

DevOpsという言葉は色々な人による色々な解釈が存在します。詳しく知りたい方は、下記を読むことをオススメします。

また、DevOpsは範囲も様々ですが、今回はTableau Serverの自動化と監視に焦点をあてます。  

セキュリティ

セキュリティの重要性

セキュリティは非常に大事です。データの閲覧を許可する人と、データに対してどのようにアクセスするか、については非常に慎重になる必要があります。

何もしていないTableau Serverは、URLさえ打てば誰でもアクセスできます。Tableau Serverがローカル認証の場合、パスワードのロック設定等もできないので、やろうと思えば好きなだけユーザー名とパスワードを総当たりで当てることができます。スクリプトを使ってパスワードを知ろうとしたり、DOS攻撃を仕掛けるかもしれません。

AWS クイックスタート

AWSはTableau Server環境を構築するためのテンプレートを用意しています。この構成だと、アクセスはロードバランサーで適切に振り分けられますし、AWSのセキュリティグループで、任意のIPのみをアクセス許可することもできます。

Tableau Serverを管理する際、GUIでのアクセスだけでなく、OS(Windows ServerやLinux OS)にログインする必要がありますが、セキュリティ上、直接ログインは避けたいです。上記の構成では、Bastionサーバーも用意されており、ここを踏み台にしてTableau Server(がインストールされているOS)へログインすることができます。

オプション的な方法として、AWS Systems Managerを使用することもできます。これにより、Bastionサーバーを遠隔管理することができます。

サンプル

この構成図では、主にReshiftをデータウェアハウスとして使用しています。また、Amazon Athenaも使用し、探索的な分析も行います。場合によっては古いDBから直接データを引っ張る必要があるため、Tableau ServerからIPsecを使用し、直接DBとも接続しています。

Tableau Serverは、プライマリーとワーカーのシンプルな2台構成です。ワーカーは抽出データ作成が主な役割です。また、Tableau Serverの前にはOKTAというIdPサービスが配置されており、セキュリティが強化されています。

アップグレード

AWS CloudFormation

AWS CloudFormationを知っていますか?AWSリソースをすべてコードで定義することができます。実体は巨大なJSONまたはYAMLファイルです。CloudFormationを学ぶには時間を要しますが、学んで損はありません。例えば、私が自分で設定したCloudFormationコードを使って、今それをデプロイしたとします。明日、私の同僚が、そのCloudFormationを使用してデプロイした場合、全く同じ結果となります。CloudFormationにおいて「誰が」デプロイしたかは関係ありません。コードなので、バージョン管理も容易です。CloudFormationはあなたのインフラを制御するのにとてもいい手段です。

Tableau Serverのアップデート

Tableau ServerのデプロイにCloudFormationを使うことはとても面白いと思います。既にご存知の方も多いと思いますが、最近のTableauはアップデートが頻繁にあります。Tableau社がテストクラスターを作成することを推奨していますが、実稼働環境で動作するかどうか確認したいですよね。ということで、Tableau Serverのアップデートにはブルー・グリーンデプロイを適用しましょう。

2つのTableau Serverクラスタがあるとしましょう。 OKTAを介してアクセスできることにユーザーは幸せを感じています。今回、新しいリリースが出たので、ユーザーが利用できるようにしたいと考えます。

最初に行うことは、新しいクラスタをデプロイするCloudFormationを使用することです。Tableau Serverのバージョンは新バージョンを。ストレージにはEBSを使用します。セキュリティグループは前と全く同じになるでしょう。

次に、旧環境のTSMバックアップを実行します。Tableau DesktopでVizを作っているユーザに周知しましょう。なぜなら、バックアップ取得後に旧環境に何かパブリッシュされても、新環境に反映されないからです。バックアップファイルはちゃんと保存しておきます。

新環境の方にバックアップファイルをダウンロードし、リストアします。同じ内容のTableau Serverを2回デプロイするだけ新しいバージョンのTableau Serverが実行されました。

そして、ELBを新環境にルーティングします。これだけで、利用者はいつものTableauアイコンをクリックするだけで、新バージョンのTableau Serverを利用できます(一部のユーザーはアップデートされたことに気づかないかもしれません)。新環境で何か問題が発生した場合は、ELBのルーティングを旧環境に戻します。

最後は旧環境を削除します。クラウドの世界では旧環境はもう役に立たないとみなします。例えば、新環境ではTableau Serverをインストールしたディスクに十分な空きがなかったとします。その場合は、手動で空き容量を変えるのではなく、環境ごと削除し、CloudFormationを書き換えて、再度環境ごとデプロイします。

参考

監視

Tableau Serverの世界で本当に重要なのは「いつでもTableau Serverに接続できること」です。構成の中でも特に重要なのはTableau Server - ELB間です。ELBからTableau Serverに繋がらなくなった場合、それはユーザーはTableau Serverを見れなくなったということです。言い換えれば、Tableau Serverは完全に停止していることと同じになります。ですので、そこんところの監視が必要になってきます。

この構成では、Amazon CloudWatchを使用しています。また、あわせてAmazon SNSも使用しています。Amazon SNSは「simple notification service」の略であり、その名の通り、基本的には電子メール経由でメッセージを送信したり、SMS等を使って簡単にプッシュすることができます。この環境の場合、Tableau ServerのELB間のコネクションが失われた時だけ、管理者にメッセージが送られます。他にも、毎週メンテナンスでTableau Serverを再起動するような構成の場合、再起動時にメッセージを送るようにしておけば、何もせずともメンテナンスの状況が把握できるようにできます。本来、このような監視の環境を構成するには、独自の監視ソフトウェアを用意する必要がありますが、AWS環境× CloudWatchであれば、Tableau Serverの監視はとても楽なものになります。

Tableau ServerとELB間の監視も重要ですが、ディスク容量の監視もとても大事です。CloudWatchで監視しきれない部分は、TabMonをオススメします。TabMonはRAMの監視等を行えるツールです。

参考

 

バックアップ

多くの人がEC2のスナップショットを取得することでバックアップを行っています。しかし、Tableau Serverがおかしくなった状態でスナップショットを取得したとき、そのスナップショットにロールバックしても、おかしくなった状態のTableau Serverがロールバックされたため、スナップショットは役に立ちません。

公式にサポートされている方法はTSMコマンドによるバックアップです。この構成では週末に1度実行するようにしています。CloudWatchルール(Windowsタスクスケジューラに似ている)を設定し、AWS Systems ManagerでTSMコマンドを実行するバッチファイルを、Tableau Serverに実行させます。バックアップファイルでTableau Serverのディスクを圧迫させないため、保存先はS3です。S3には30日間後にファイルを削除するポリシーを設定しています。

 

自動化

例えば、業務都合上、Tableau Serverのユーザーリストを出力する必要があるとします。これを定期的に行う場合はAWS Lambdaを使うのがオススメです。サーバーレスなので、インフラ面の気にせずコードを実行することができます。そして、使用した分だけの支払い(従量課金制)なのも良いです。別の方法として、別マシンにPythonをインストールしてTableau Serverと通信させる方法がありますが、その時点でインフラ管理の範囲が増えてしまい、セキュリティの問題点が増えてしまいます。

この構成では、「Tableau Server Client」というものを使ったPythonコードを実行しています。Python上でTableau Server REST APIにアクセスできるので、ユーザーリスト等を容易に出力することができます。出力先はS3にしておき、S3にはいくつかのポリシーを設定して、ユーザーリストが欲しい部署だけがアクセスできるリンクを案内しておけば大丈夫でしょう。

参考

サマリー

  • セキュリティ
    • 踏み台サーバ+ELB、セキュリティグループ
  • アップグレード
    • CloudFormationでブルー・グリーンデプロイ
  • 監視
    • Tableau Serverに問題が起こった際は、Amazon SNSでSMSアラートを送る
  • バックアップ
    • CloudWatchルール+AWS SSM+S3
  • 自動化
    • とにかくLambda

 

まとめ

AWSのリソースを活用したTableau Serverの運用に関する話でした。AWSとTableau Serverを活用したサービスを行っている弊社にとっては、めちゃくちゃ有用なセッションでした。これまた「試してみた系エントリ」のネタの宝庫ですので、こちらも順次検証してみたいと思います。

動画