AWS

IP制限かかっているS3バケットにAthenaでアクセスする

IP制限されたS3バケットポリシーの例 Athenaからのアクセス方法 方法① IAMロールをホワイトリストに登録(userid) ポイント 考慮点 方法② Athenaからのアクセスをホワイトリストに登録(CalledVia) ポイント 考慮点 S3では、以下の記事のようなリソースポ…

TableauからAthenaにIAMロールで接続するためJDBC利用してみる

最初に 前提 設定 TDCファイル作成(Tableau Datasource Customizatio) JDBC接続文字列作成 TableauからAthenaに接続してみる 最初に TableauからAthenaに繋ぐウィザードを立ち上げると、Access KeyとSecret Access Keyを求められます。 やはりロールで繋ぎた…

Amazon Elasticsearch ServiceにJDBCで接続してSQL実行する

Amazon Elasticsearch Service(以下、AES)にJDBC接続する方法です。 AESのSQL機能 AESのSQL機能はOpen Distro for ElasticsearchというAWS主導のプロジェクトで開発されています。 github.com この辺りは、AESのSQLのエンドポイントやプラグイン名にも表れ…

PowerShellでS3のサーバーアクセスログをTSV形式に変換しEXCELで分析

S3はのサーバのアクセスログを取得することが可能です。 通情、このログを分析するなら、Athenaが便利です。公式にもわかりやすい手順が出ています。 Athena を使用したアクセスログの分析 ただ、色々な制約でAthenaが使えない、Pandasも使えない、ましてやD…

LambdaでElasticsearch Serviceの手動スナップショットを取得する仕組みをCFnで一括デプロイ

Amazon Elasticsearch Service (AES) で手動スナップショット取得の仕組みをCloudformationで一気にデプロイします。かつCurator使って古いスナップショットは自動的に削除する設定になっています。スナップショット取るだけで意外に大変です。 Pythonスクリ…

Amazon Elasticsearch Serviceクラスタ構成を対障害性の観点から検討してみる

Amazon Elasticsearch Serviceクラスタ構成を検討したので、そのメモを残しておきます。 ※Elasticsearch Serviceの インスタンス ですが、資料によっては ノード と表記されています。この記事ではManagement Consoleの表記に合わせて インスタンス に統一し…

fluent-plugin-aws-elasticsearch-service使ってElasticsearch Serviceに疎通確認作業

fluent-plugin-aws-elasticsearch-serviceでIAM権限でAmazon Elasticsearch Service繋ごうと思うのですが、IAM権限やアクセスポリシー変更しながらの疎通テストをしたいと思い。簡単に疎通テスト用の手順書きました。 github.com Amazon Linux2にログオン td…

AthenaにVPCエンドポイント経由でJDBC接続できるようになったが少し詰まった話

こちらのリリースにあるようにAthenaにVPCエンドポイント経由で接続できるようになりました。これで、プライベートなサブネットからもJDBC接続できるようになりました! aws.amazon.com 試してみる 早速、前に記事書いたこちらのDockerイメージでテストして…

AWS CloudformationでSecurity Groupの自己参照の設定を行う

AWS

Glue使っているとSecurity Groupに自己参照の設定をしなければいけない時があります。 AWS Glue がコンポーネントと通信できるようにするには、すべての TCP ポートに対して自己参照のインバウンドルールを持つセキュリティグループを指定します。 https://d…

AWS Certified Security - Specialty取得してきました

最近、認定試験の記事ばかり書いている気がします・・ ちょうど個人的繁忙期で、個別技術追う時間が無くて試験予約だけして直前に勉強くらいしか時間が無いのが実情です・・ただ、そういう忙しい時でも、お金かかっているので意地でも勉強するので試験は便利…

AWS Fargate使ってサーバーレスでSelenium+Headless Chromeを実行する

この記事に行き着いた方でしたら、日々自動化を進めている中にも、ブラウザでのクリック、クリック、入力、クリック、みたいな作業が残っている人が多いと思います。 REST等でAPIが公開されていれば良いのですが、そういうAPIが提供されていないサービスもた…

AWS Glue Python Shellでloggingを使ったログ出力について

GlueのPython Shellでloggingモジュールを利用してログを取得を考えてた時のメモです。 ログ出力先 loggingモジュールのデフォルトの出力先 ログ設定パターン デフォルト 全て /aws-glue/python-jobs/error に出力するパターン ストリームを使い分けるパター…

Amazon Elasticsearch ServiceのKibanaでWMSマップを使う

Amazon Elasticsearch ServiceのKibanaで地図を使おうと思ったのですが、どの情報も kibana.yml を設定するものばかり。 以下の記事には大変救われました。WMSについても書いてあります。 qiita.com 上記の記事を参考にこちらのサイトにたどり着きました。 w…

Redshift Spectrumのパフォーマンスチューニングが必要なら統計情報を確認する

一番下の参考情報にも載せている通り、Redshift Spectrumのチューニングには、パーティショニングやファイルフォーマット等色々なポイントがありますが、ここでは特に見落としやすい、かつ効果の高い統計情報について書いていきます。 利用するデータ 環境準…

AWS GlueでS3上にあるPythonの外部ライブラリをインポートして利用する

題名の件、Glueで外部ライブラリをインポートしたので、その方法を書いておきます。 外部ライブラリ 参照元 アップロードパッケージ作成 GlueジョブにPythonの外部パッケージ設定 GlueのPySparkコードから実行 出力結果 本当はこんなことしたかったわけでは…

AWS Glueのワークフロー機能がリリースされたようなので触ってみました

AWS Summitで発表されたようですが、Glueの標準機能でワークフローが組めるようになったと聞いたので早速試してみました。 Glueでワークフローを組むのは大変だった やってみる CrawlerとJobを用意 ワークフロー作成 トリガー作成 ワークフロー作成 ワークフ…

Redshift Spectrumでは1400年1月1日より古いDATE型は読み込めない

同じエラーに出くわす人いると思ったので書いておきます。 S3にParquet形式で保存したデータをRedshift Spectrumで読み込むと以下のエラーが発生することがあります。 > select * from some_spectrum_table; Assert DETAIL: -------------------------------…

Amazon Elasticsearch Serviceの検索でSQLが使えるようになったので使ってみました

開発しているサービスの一部でElasticearch使っているのですが、ElasticsearchのクエリDSLって少し触ってないだけで忘れてしまいます。 昨日もGroupByに当たる、Aggregationを複数フィールドでやるのどうやるんだっけと、素人みたいなことで悩んでググってい…

AWS Certified Machine Learning – Specialty に合格してきました

ここ数年のAIブームで、AIの勉強全くしてこなかった私でも、少しずつ仕事でAI関係に関わることができてきました。その度に部分的に頑張って追いつくというのを続けてきたのですが、そろそろ限界を感じたので、どこかで体系的に勉強しなくてはと考えていまし…

Glue DynamicFrameでParquet変換におけるDecimalの扱い注意点

金額計算などで利用する固定小数点数 decimal をGlueで扱う場合の注意点を書きます。 GlueのGUIでそのまま設定すると、decimalにはなるのですが、 decimal(10,2) という型に固定されてしまうといった落とし穴もありますので、そのあたりも。 例として以下のC…

Redshift Spectrum 用の外部スキーマ上のテーブル定義を確認する

Redshfit SpectrumでDESCや \d 、SHOW CREATE TABLEなどで確認するクエリのメモ。 SELECT * FROM SVV_EXTERNAL_COLUMNS WHERE schemaname = '外部スキーマ名' AND tablename = 'テーブル名'; +-------------------------------+-------------+--------------…

AWS Glueで変更のあったパーティション配下だけS3を部分更新したい

やりたいこと 準備 テストデータ生成 S3にアップロード ETLジョブ 部分更新のケースを試してみる 課題① ジョブブックマーク有効化時の再実行 課題① の対策 課題 ② DynamicFrameはAppendしかできない 課題②への対策 課題②への対策1 直接パーティションだけを…

PySparkでOpen Distro for Elasticsearchにデータを投入

タイトルの件、作業メモ。 AWSが出してきたOpen Distro for ElasticsearchにPySpark使ってデータを投入する部分を下調べしたので残しておきます。 利用するデータ Open Distro for Elasticsearchの起動 PySpark準備 ElasticSearchに投入 参考URL Open Distro…

EC2のWindows上にpyspark+JupyterでS3上のデータ扱うための開発環境を作る

EC2(Windows)にpyspark構築してS3の情報取得するところまでやる機会があったので情報残しておきます。 環境変数設定 各種ランタイムインストール Javaのインストール Python3.7.2インストール Spark インストール Sparkダウンロード 7zipでgzipを解凍 hadoop…

LambdaのLayer機能活用してpandas,pyarrow,s3fs使ってParquet変換する簡易ETL処理を実装する

AWS

小さなファイルのETLにGlueを使うのがもったいなかったので、Pandasやpyarrowで実装しました。 Lambda Layerにpandasとpyarrowを追加 Layerに登録するパッケージを作成 パッケージをアップロード Lambdaのコード 参考 Lambda Layerにpandasとpyarrowを追加 L…

EC2からAthenaへのJDBC接続テストするためのDockerイメージ作った

色々な環境でIAM権限等のテストしている作業の中で、タイトルのイメージ作成したので書いておきます。 パラメータ環境変数 必須環境変数 環境変数名 説明 REGION AWS Region SQL Athenaで実行されるSQL OUTPUT_LOCATION Athenaの実行結果が格納されるS3バケ…

Athenaを使ってS3上のJSONを変換・パーティショニングしてParquet出力してみる

S3上のJSONデータをAthenaを利用してParquetに変換してみます。 使うのはこの話です。 aws.amazon.com テストデータ生成 日付列をパーティションに利用 Parquet+パーティション分割して出力 カタログへパーティション追加 所感 参考URL テストデータ生成 こ…

Apache DrillでAWSのDBRレポートCSVファイルをParquet変換して分析してみる

DBR(Detailed Billing Report with Resources and Tags)のCSVを分析しようとググってみたら以下のリポジトリ見つけました。 github.com 中身ざっと読んでみると以下のような感じに見えます。 ローカルにDBRダウンロード DBRのCSVをParquetに変換(Python+Apa…

RedshiftとSpectrumとS3とVPCで組み合わせた場合のネットワーク経路が複雑だったので整理してみた

VPC絡みでRedshiftのネットワークが複雑でハマって整理したので、そのまとめです。 あくまで2019/02/09現在の仕様なので、仕様変わっていることもあると思います。 全体図 2019/02/20追記 Redshift SpectrumからS3への接続はVPC外を通る ParquetのCOPYはJSON…

EMR上のApache AtlasにAWS Glueのデータカタログ情報をインポートしてみた

Hiveのメタデータ管理ができるApache Atlasですが、こちらのブログを参考にGlueのカタログ情報もインポートしてみました。 aws.amazon.com EMRのHiveメタストアとしてGlueを使うための設定を準備 EMRクラスタの起動 EMRクラスタへ接続 Glue接続確認 AtlasへH…