AWS 用 Altus Environment のセットアップ手順

Cloudera Altus (以下 Altus) は、Cloudera が提供するデータ分析基盤の PaaS です。Altus を使えば、パブリッククラウド (現時点で AWS のみ対応) のインフラ上で Cloudera Manager が管理する CDH クラスタをサービスとして利用できるため、ユーザーはクラスタ構築や管理などの作業に追われることがなくなります。ユーザーは必要なデータ (S3 上) と必要なジョブ (jar 形式やクエリ形式) を用意すればよく、実行基盤を管理する手間から解放されます。概要は下記ブログもあわせて参照ください。

さて、Altus は、ユーザーの VPC 内にクラスタをデプロイし、データソースとして S3 を使用します。アーキテクチャを簡易的に示すと以下の通りです。

https://www.cloudera.com/documentation/altus/topics/ag_dataengr_architecture.html

つまり、Altus はユーザーの代わりに何らかの形でユーザーの VPC や S3 にアクセスする手段を得る必要があります。Altus では、AWS の IAM クロスアカウントアクセス を利用してユーザーアカウントへのアクセスを実現しており、それらの情報はユーザーの Environment で定義されています。

Environment のセットアップ方法には大きく二種類あります。ひとつは Environment Quickstart です。これは、Environment の定義に必要な IAM、VPC、サブネット、セキュリティグループの設定を CloudFormation を用いて自動でセットアップするものです。そのため、ユーザーは AWS のクレデンシャルを入力する必要があります (クレデンシャルは Altus 内に保存されません) 。もうひとつの方法が、全ての Environment セットアップをマニュアルで行う Configuration Wizard です。本ブログ記事では、Configuration Wizard を用いた Environment のセットアップ方法を説明します。Environment の詳細についてはドキュメントを参照してください。

https://console.altus.cloudera.com/dataeng/index.html からAltus にログインしたら、Environments > Configuration Wizard を選択してください。ステップは大きく分けて四段階あります。

Environment 名 (Environment Name) の指定

任意の名前を入力してください。

アクセス資格 (Access Credentials) の設定

ユーザーの AWS アカウントへアクセスするための最初のステップで、適宜ウィザードとユーザーの AWS コンソールの双方で作業を行う必要があります。以下では画面右手に表示されているパネルをベースに説明します。

1. AWS IAM クロスアカウントのアクセスポリシーを作成する

AWS IAM クロスアカウントポリシーの作成方法
A. AWS IAM > ポリシー にアクセスする
B. 「ポリシーの作成」を選択する
C. 「独自のポリシーを作成」を選択する
D. 「ポリシー名」を入力 (例: ClouderaCrossAccountPolicy) し、任意の「説明」を追加、「ポリシードキュメント」に Policy JSON for the cross-account access role に表示されている JSON を貼り付ける
E. 「ポリシーの作成」をクリック

2. Cloudera Altus 用に、クロスアカウントアクセスロールを作成する

クロスアカウントアクセスロールの作成方法
A. AWS IAM > ロール にアクセスし、「新しいロールの作成」を選択する
B. 「クロスアカウントアクセスのロール」を選択し、「AWS アカウントとサードパーティ AWS アカウント間のアクセス権を提供します」を選択する
C. Cloudera Altus Account ID と External ID をそれぞれ「アカウント ID」と「外部 ID」に貼り付ける。「MFA が必要」は未チェックのままとする
D. 「ポリシーのアタッチ」画面にて、「AWS IAM クロスアカウントポリシーの作成方法」で作成したポリシーを選択 (例: ClouderaCrossAccountPolicy) し、「次のステップ」
E. 任意の「ロール名」を入力 (例: ClouderaCrossAccountRole) し、「ロールの作成」
F. 「ロール」一覧から作成したロールを選択し、「ロール ARN」をコピーする
G. Cloudera Altus ページの AWS cross-account access role ARN に F でコピーした ARN 名を貼り付ける

ネットワーク設定

使用するリージョンや、サブネット、セキュリティグループの設定を行います。

1. AWS のリージョンを選択する

2. サブネット ID を入力する

サブネット ID の取得方法
A. AWS > VPC にアクセスする
B. AWS のリージョンが、Altus のウィザードで選択したリージョンと同一であることを確認する
C. 「VPC ウィザードの開始」を選択する
D. 「1 個のパブリックサブネットを持つ VPC」を選択する
E. 任意の「VPC 名」(例: ClouderaAltusVPC) と「サブネット名」(例: ClouderaAltusSubnet) を入力。「DNS ホスト名を有効化」を選択し、「VPC の作成」
F. 左側のメニューより「サブネット」を選択し、作成したサブネットを選択、「サブネットのアクション」から「自動割り当てパブリック IP の変更」を選択する
G. 「自動割り当てパブリック IP を有効化」にチェックを入れる
H. 作成したサブネットの「サブネット ID」をコピーする
I. Altus のウィザードにて Subnet ID に貼り付ける

3. セキュリティグループの入力

セキュリティグループの作成方法
A. AWS > VPC にアクセスする
B. 「セキュリティグループ」を選択する
C. 「セキュリティグループの作成」を選択する
D. 任意のセキュリティグループを入力し、一つ前のステップで作成した VPC を選択して「作成」
E. 作成したセキュリティグループを選択し、「インバウンドルール」タブの「編集」をクリックする
F. 「別のルールを追加」をクリックし、Cloudera Altus IPs に表示されている IP アドレスからの SSH (22) トラフィックを許可する
G. 「別のルールを追加」をクリックし、D で作成したセキュリティグループからの「すべてのトラフィック」を許可する
H. 「セキュリティグループ ID」をコピーし、Altus の Security groups に貼り付ける

インスタンスの設定

最後に、EC2 や S3 の設定を行います。

Altus クラスタでジョブを実行すると、これらのジョブは、データ用の S3 バケット、ログファイル用の S3 バケット、S3 オブジェクトのメタデータキャッシュ用の DynamoDB テーブルなど、さまざまな AWS インフラストラクチャリソースにアクセスする必要があります。そのため、クラスタの EC2 インスタンスが、必要な権限を与える AWS IAM ロールの役割を負う必要があります。

EC2 へのアクセスについて

クラスタの EC2 インスタンスは、ジョブの実行時に AWS S3 に保存されているデータにアクセスする必要があります。クラスタに対して AWS S3 アクセス権限を指定にはいくつかの方法があります。

  • 新しいポリシーを作成して、全 S3 バケットへのフルアクセスを提供する。このポリシーは、特定の S3 バケットへのクラスタアクセスを制限するようにオプションで変更可能
  • S3 バケットに関連付けられたポリシーを使用して、S3 バケットへのアクセスを指定する。 この場合、このページのステップは不要。 後ほど、EC2 インスタンスロールを作成するときに AWS S3 にフルアクセス可能なポリシーを追加できる。クラスタは、バケットパーミッションに基づいてバケットにアクセス可能

S3 ポリシーを作成するには、Amazon が提供するポリシージェネレータを使用してください。

必要に応じて、他のポリシーを作成して EC2 インスタンスのリソースへのより細かいアクセスを設定することも可能です。これらのポリシーは、以下で作成する EC2 インスタンスのロールにアタッチできます。

1. EC2 インスタンスの設定

(任意) ログ用の S3 バケットの作成
A. AWS > S3 にアクセスする
B. 「バケットを作成する」をクリックし、「バケット名」と「リージョン」を指定する。このリージョンは、ネットワーク設定で選択したリージョンと一致する必要がある。その他デフォルトのまま「作成」
C. Cloudera Altus のウィザードで、Log archive bucket name に作成したバケット名を入力

2. EC2 インスタンスポリシー

EC2 インスタンスポリシーの作成方法
A. AWS IAM > ポリシー にアクセスする
B. 「ポリシーの作成」を選択
C. 「独自のポリシーを作成」を選択
D. 「ポリシー名」に任意の名前 (例: ClouderaEC2InstancePolicy) を入力。Cloudera Altus のウィザードで Generate Policy をクリックし生成されるポリシーをコピーし、ポリシー作成画面の「ポリシードキュメント」に貼り付ける
E. 「ポリシーの作成」をクリックする

3. EC2 インスタンスロールの作成

EC2 インスタンスロールの作成方法
A. AWS > IAM > ロール にアクセスし、「新しいロールの作成」を選択
B. 「ロールタイプの選択」画面で「AWS サービスロール」内の「Amazon EC2」を選択
C. 「ポリシーのアタッチ」画面で前ステップで作成した EC2 インスタンスポリシーを選択。もしアクセスポリシーを作成していなければ、AmazonS3FullAccess を選択して「次のステップ」をクリック
D. 「ロール名」に任意のロール名 (例: ClouderaEC2InstanceRole) を入力し、そのロール名をコピーしておく。「ロールの作成」をクリック。ロール名と同名の EC2 インスタンスプロファイルが自動的に作成される
E. Cloudera Altus のウィザードに戻り、コピーしたロール名を AWS instance profile name に貼り付ける

以上で Environment のセットアップは完了です。Clusters からクラスタを構築して Jobs からジョブを実行するか、Jobs からクラスタ構築とジョブの投入を一括で行うことも可能です。質問などあれば、Cloudera Altus のコミュニティ (https://community.cloudera.com/t5/Altus/ct-p/Altus) までご質問ください。