DWHへのデータ取り込み・ジョブ管理をサポートする「CSA JMC」でRedshift連携を行うための設定手順 #データ統合基盤 #CSアナリティクス

2020.12.19

当エントリは『クラスメソッド CSアナリティクス Advent Calendar 2020』19日目のエントリです。

当エントリでは、クラスメソッドが展開しているデータ統合基盤サービス『CSアナリティクス』(以降"CSA")のプロダクト「CSA JMC(Job Management Console)」でAmazon Redshiftを対象にしたサイトを作成し、利用出来るまでの設定手順について紹介します。

目次

 

CSA JMC(Job Management Console)とは

CSアナリティクスで提供しているサービスの1つ「Job Management Console」。略して「JMC」の形で普段の説明等会話の中で用いる事が多いです。JMCの概要については下記エントリをご参照ください。

また、先行する形でCSA JMCが対応するDWHとしてGoogle BigQuery、Snowflakeに関しても「サイト作成・設定に関する手順」を紹介した記事を投稿しています。今回はこの"Redshiftバージョン"での手順を紹介する形となります。

 

CSA JMC:Amazon Redshift向けサイト構築&設定手順

以降の内容で、CSA JMCにおけるAmazon Redshiftをサイトで利用する際の設定手順について解説します。

 

接続対象となるAmazon Redshiftクラスタ環境の準備

CSA JMCでは、DWHの指定は「システム構築時」及び「システム構築後&サイト作成時」のいずれかで行う事が出来ます。今回紹介する内容は後者の「システム構築後&サイト作成時」の場合にどのような形で設定をするか、という点について紹介します。

サイトで利用するDWHでRedshiftを指定する場合、別途Amazon Redshiftクラスタの各種接続情報が必要となります。Amazon Redshiftクラスタ環境を用意した上で、接続可能な以下の情報をそれぞれ準備してください。(Amazon Redshiftのアクセス制限設定に関しては、CSA JMCサーバからアクセス出来るような設定を予め行っておいてください。)

  • Redshift接続先URL
  • Redshift接続ポート番号
  • Redshift接続データベース名
  • Redshift接続ユーザー名
  • Redshift接続パスワード

 

サイトの作成とAmazon Redshift接続設定の追加

システム管理者にて、サイト一覧画面に遷移。[サイトの追加]ボタンを押下し、任意のサイトを新規作成します。この際、DWHには「Redshift」を指定します。

サイト作成完了後、作成したサイトの詳細画面に遷移します。この後、サイト利用に際して必要な情報をそれぞれ追加していきます。各種接続に必要な値を設定の上、[接続テスト]ボタンを押下。『接続に成功しました。』の文言が表示されていれば設定・接続成功です。

 

サイト設定の追加(ジョブ実行通知)

サイト設定における[ジョブ実行通知]タブでは、サイト配下で稼働するジョブの実行内容に応じた各種通知に関する設定を行う事ができます。「通知タイミング」と「異常終了時のソースコード記載」については、任意の内容を選択してください。

「通知用SNS Topic ARN」については、サイト作成直後の状態では通知用に設けられたSNS Topicがそれぞれ作成されていますが、SNS Topicの中身については何も設定されていません。必要な通知先の設定(通知手段と通知対象者)をそれぞれ行っておいてください。

 

サイト設定の追加(構成要素設定)

[構成要素設定]タブでは、以下の情報について内容を確認、情報を設定する必要があります。

  • EC2 IAMロール
  • Lambda IAMロール
  • Redshift IAMロール
  • データ連携用S3バケット
  • SQL用S3バケット
  • プログラム用SQLバケット

以下、推奨する作成・設定の手順の流れで要素毎に解説します。

 

データ連携用S3バケット

現状、CSA JMC最新版(2020年12月19日時点、v5.3.0)ではCSA JMCは所謂『RedshiftにおけるクロスリージョンCOPY』には対応していません。

このため、作成するS3バケットについては、Amazon Redshiftクラスタと同じリージョンに作成してください。任意のバケットを作成出来たら、バケット名は控えておいてください。

作成したバケット配下には、データ連携で用いるためのフォルダが諸々必要となります。予めフォルダを作成しておいてください。

 

構成要素(SQL)用S3バケット

作成の際のルールについては「データ連携用S3バケット」と同様です。作成完了後はバケット名を控えておいてください。

作成したバケット配下には、構成要素(SQL)で用いるためのフォルダ(sql)が必要となります。利用の前に予め作成しておいてください。

 

構成要素(プログラム)用S3バケット

作成の際のルールについては「データ連携用S3バケット」と同様です。作成完了後はバケット名を控えておいてください。

作成したバケット配下には、構成要素(プログラム)で用いるためのフォルダ(program/python)が必要となります。利用の前に予め作成しておいてください。

 

Redshift IAMロール

サイト設定の[Redshift接続]タブで指定した接続を持つAmazon Redshiftクラスタが、データ連携用S3バケットのデータをCOPYする際に利用するIAMロールとなる設定です。この手順では、データ連携用S3バケットにアクセス出来る様なIAM Roleを作成します。(この手順は、任意のサイトで『データ連携用S3バケット』を追加した際に都度必要となります。)

以下が最低限必要な権限を備えたIAM Roleのポリシーとなります。(バケット名に関しては、実際に作成するプロジェクトでのバケット名に置き換えてください)

  • 「csa-jmc-v5test-redshift-bucket」というバケットを作成したと想定
  • 「csa-jmc-v5test-redshift-bucket」におけるs3:ListBuckets3:GetBucketLocationアクションを許可
  • 「csa-jmc-v5test-redshift-bucket/」におけるs3:PutObjects3:GetObjectアクションを許可

csa-jmc-v5test-redshift-bucket-copy-policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket/*"
            ],
            "Effect": "Allow"
        }
    ]
}

上記ポリシーを付与したIAM Roleを作成し、対象となるAmazon Redshiftクラスタに付与します。

 

ECSタスク IAMロール

Redshift IAMロール同様、データ連携用S3バケットを追加した際に設定の追加が必要となります。(この手順は、任意のサイトで「データ連携用S3バケット」「構成要素(SQL)用S3バケット」「構成要素(プログラム)用S3バケット」それぞれを追加した際に都度必要となります)

このIAMロールは、関連するECSのタスクに紐付くロールのIAM Role ARNが記載される形となります。

対象となるIAM Roleは、予めARN情報が記載されています。その情報を用いてAWS管理コンソール経由で探し出し、対象IAM Roleに付与されているインラインポリシーに情報を追記します。

  • 「〜jmc-app-role」という名前が付いているIAM Roleです。
  • そのIAM Roleに付与されているインラインポリシーの中で「〜app-s3-policy」という名前が付いているものが対象となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket",
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-program-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-sql-bucket"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket/*",
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-program-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-sql-bucket/*"
            ],
            "Effect": "Allow"
        }
    ]
}

 

Lambda IAMロール

Redshift IAMロール同様、データ連携用S3バケットを追加した際に設定の追加が必要となります。(この手順は、任意のサイトで「データ連携用S3バケット」「構成要素(SQL)用S3バケット」「構成要素(プログラム)用S3バケット」それぞれを追加した際に都度必要となります)

このIAMロールは、関連するLambdaのIAM Role ARNが記載される形となります。

対象となるIAM Roleは、予めARN情報が記載されています。その情報を用いてAWS管理コンソール経由で探し出し、対象IAM Roleに付与されているインラインポリシーに情報を追記します。

  • 「〜jmc-api-role」という名前が付いているIAM Roleです。
  • そのIAM Roleに付与されているインラインポリシーの中で「〜app-s3-policy」という名前が付いているものが対象となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket",
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-program-bucket",
                "arn:aws:s3:::csa-jmc-v5test-redshift-sql-bucket"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket/*",
                "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-program-bucket/*",
                "arn:aws:s3:::csa-jmc-v5test-redshift-sql-bucket/*"
            ],
            "Effect": "Allow"
        }
    ]
}

 

設定の保存

構成要素設定タブにおいては、作成・設定したS3バケット及び関連するIAM Roleの設定のマトリクスは以下の様な形となります。設定に漏れが無いか、改めてご確認ください。

追加バケット Redshift
IAM Role
の設定追記
ECSタスク
IAM Role
の設定追記
Redshift
Lambda
IAM Role
の設定追記
データ連携用S3バケット
構成要素(SQL)用S3バケット
構成要素(プログラム)用S3バケット
  • 必要なS3バケットの作成と画面への値の設定(バケット名は先頭の「s3://」及び末尾の「/」を除いた文字列を設定する形となります)
  • 作成したバケットに対応するIAM Roleの作成と画面への値の設定(Redshift IAMのみ)
  • 作成したバケットに対応するIAM Roleへの権限設定追加

サイト設定の[構成要素設定]タブにて値を設定後、[保存]ボタンを押下。内容をチェックが行われ、全て問題無ければ設定が完了となります。

これでCSA JMC上でAmazon Redshiftを利用可能なサイトの準備が整いました。

 

まとめ

という訳で、『クラスメソッド CSアナリティクス Advent Calendar 2020』19本目のエントリ、「CSA JMC(Job Management Console)」でAmazon Redshiftを対象にしたサイトを作成し、利用出来るまでの設定手順に関する内容の紹介でした。

CSA Data Uploaderは1ヶ月間のトライアル利用が可能となっています。興味をお持ち頂いた方は是非無料版ダウンロードページからインストーラを入手頂き、お試し頂けますと幸いです。また、CSA JMCに関しても下記バナーから製品ページにアクセスする事が出来ます。是非御覧ください。

では、明日(20日目)のエントリもお楽しみに!