まったり技術ブログ

Technology is power.

【embulk-input-redshift】大量データでエラーが発生したのでメモ

f:id:motikan2010:20180401005113j:plain
   最近、Embulkを使い始めましたが、想像していたよりも便利でした。データ量によってはエラーも発生するみたいでしたので、メモ程度に書き留めておく。

github.com

 Redshift上のデータをCSVファイルとして保存したり、その逆で、CSVファイルに記載されてるデータをRedshift上に保存したり(CREATE TABLE文も自動生成)可能。

 その便利さ故に、業務でも利用することになりましたが、Redshift上のデータ量が多いことが原因で発生したエラーがありましたので記載してきます。

 下記の設定で作成されたRedshiftインスタンスを使用した場合に発生したエラーの解決策を記述していきます。  結論から言いますと、どちらのエラーもMulti Node(ノード数を複数) でインスタンスを作成すれば解決できました。(貧乏人には辛い・・・)

利用していたRedshiftインスタンス情報
クラスタータイプ Single Node(ノード数:1)
ノードタイプ dc2.large
各バージョン
  • embulk (0.9.4 java)
  • embulk-input-redshift (0.9.1)

github.com

ケース 1 - FETCHの最大サイズを超えている

エラー内容

org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: Fetch size 10000 exceeds the limit of 1000 for a single node configuration. Reduce the client fetch/cache size or upgrade to a multi node installation.

FETCH - Amazon Redshift

解決策

 embulk-input-redshift にはfetchサイズを設定するfetch_rowsオプションが存在しているので、「1000」を指定すればエラーは発生しなくなります。

in:
  type: redshift
  host: XXXXX.YYYYY.ap-northeast-1.redshift.amazonaws.com
  user: root
  password: "XXXXXX"
  database: sampledb
  fetch_rows: 1000
  table: users
  select: "*"

ケース 2 - DECLAREの上限

 こちらは取得対象であるテーブルに格納されているデータ容量が大きい場合に発生します。(dc2.large - ノード数 1 の場合は8,000MB)

エラー内容

org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: exceeded the maximum size allowed for the total set of cursor data: 8000MB.

DECLARE - Amazon Redshift

解決策

  • 今のところノード数を増やす方法しかなさそう・・・。
    上記リンクの情報通り、ノード数を2にしたらエラーは発生しなくなった。

XSSI(Cross-Site Script Inclusion)攻撃とは

f:id:motikan2010:20180303225303p:plain
 今回はWebセキュリティのお話です。
とある機会にXSSI(Cross-Site Script Inclusion : クロスサイト・スクリプト・インクルージョン)攻撃というワードが話に出てきて、その攻撃が正直分からず困惑してしまったので、その攻撃について調べてみました。

 結論としては「Same-Origin Policy制限外のJSONPなどから、機密情報を外部ドメインから取得する攻撃」です。
 サンプルアプリケーションを用いて実際に動作を見て攻撃を確認していきます。

続きを読む

Burp Suite拡張プラグイン作成入門 その4 - リクエスト送信 編

f:id:motikan2010:20180225073424p:plain
 今回は拡張プラグイン内からリクエストを送信し、レスポンス内容の表示までできるようにします。
具体的には、プロキシ等でキャプチャしたIHttpRequestResponseクラス内に定義されているリクエストを再送します。

完成物

f:id:motikan2010:20180225073435p:plain
 機能としては、送信ボタンを押下すると、Enableにチェックが付いているリクエストが上から順に送信されるようになっています。
 送信したリクエストと受信したレスポンスは、右部分のテキストエリアに表示されるようになっています。

続きを読む

Burp Suite拡張プラグイン作成入門 その3 - 新規UI(タブ)追加 編

f:id:motikan2010:20180218185211p:plain

 今回はBurp Suiteに新規タブ(画面)を追加していきます。

画面を追加することによって、複雑な機能を追加させることが可能になります。

完成物

 「Alerts」タブの右側に新規に「Sample Tab Extender」という名前のタブが追加されているのが確認できます。

 画像のプラグインでは「Save Request」というコンテキストメニューを押下後、新規タブの左側のテーブルに保存されます。

 テーブル内の行を選択したら、右側にテキストエリアに通信のリクエスト(上部)とレスポンス(下部)が表示されます。 今回はこのような新規タブの追加方法・レイアウトについて記載します。

続きを読む

Burp Suite拡張プラグイン作成入門 その2 - リクエスト&レスポンス取得 編

f:id:motikan2010:20180213000116j:plain

前回に引き続き、今回はBurp Suiteの機能を活かした拡張プラグインを作成していきます。

blog.motikan2010.com

完成物

今回作成するプラグインは下記のようなものになります。
f:id:motikan2010:20180213000221p:plain:w500

f:id:motikan2010:20180213000237p:plain:w500

f:id:motikan2010:20180213000248p:plain:w500

 まだ実用するには程遠いですが、Burp Suiteの特徴的な機能である 「リクエスト&レスポンス」の情報にアクセスすることが可能になります。

続きを読む