【WAF】AWS WAFのCloudWatch Logsの名称は決まっているため気をつける

はじめに

業務でAWS WAFを使うことになりBot Controlを使うなどして
悪意あるアクセスでないか制御することになりました。

CloudWatch Metricsで集計しようとしたところ、まずは「CloudWatch Logs」にログを溜めないといけないのでそのやり方でハマったのでメモします。

やり方

参考ページにもあるが aws-waf-logs- で始まる必要があるということです。
例えばサービス名が ec-site だった場合 aws-waf-logs-ec-site とするのが良さそうです。

最初わからず適当に名前をつけても選択肢に出てこず悩んでしまいました。

参考

Amazon CloudWatch Logs による AWS WAF ログの分析 | Amazon Web Services ブログ

【Spark】ローカルでSparkをインストールしてみる

はじめに

半年ぐらいの業務でAWS Glueを使ったETLをやっていました。
しかし、Sparkの知識が足りず「Pysparkの関数ってどうやって使うの?」ということが多々あったため
Pysparkをローカルで動作できる環境を作ってみました。

環境

前提条件

  • Homebrewのコマンドが実行できること

やりかた

brew install openjdk@11
brew install apache-spark
brew install python

以下のように起動すれば確認できるようになります。

Python 3.10.6 (main, Aug 11 2022, 13:49:25) [Clang 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/09/06 08:57:29 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.3.0
      /_/

Using Python version 3.10.6 (main, Aug 11 2022 13:49:25)
Spark context Web UI available at http://192.168.1.62:4040
Spark context available as 'sc' (master = local[*], app id = local-1662422250363).
SparkSession available as 'spark'.
>>>

まとめ

これでPysparkを使って関数確認できるようになりました。

参考

sparkbyexamples.com

【Glue】Glueを使い始めて知った単語などまとめ

はじめに

最近、サーバーサイドだけでなくデータ基盤も作る機会がありました。
サービスの成熟度や規模を検討した結果 AWS Glue(以下、Glue) を採用しました。

そこでGlueを名前だけ知っていた筆者が本番で使えるまでになり覚えた単語などをメモします。

前提条件

  • Glueは使ったことがなく名前だけ知っている
  • サーバーサイドエンジニアとして業務をしたことがある

単語一覧

AWS Glueとは

完全マネージド型 ETL (抽出、変換、ロード) サービス

データカタログとは

データストア(抽出元のテーブルなど)から自動的に作成されたメタデータ定義はデータカタログと呼ばれます。さらに、ユーザ自身がら編集することも可能です。

Glueクローラーとは

クローラは指定したデータストアを調べて、データカタログに登録してくれます。定期実行をする事で、スキーマパーティションの定期的な自動更新も可能です。

なお、Glueの機能がわからなかったころ手動でデータカタログを作っていました。
これを実行することにより自動でデータカタログを作成することができます。

Glue Jobとは

ジョブは、AWS Glue で抽出、変換、ロード (ETL) 作業を実行するビジネスロジックで構成されます。
ジョブを開始すると、AWS Glue はソースからデータを抽出し、そのデータを変換してターゲット内にロードするためのスクリプトを実行します。

Python, Scalaで記述することができるようです。
今回、私はPythonでジョブをコーディングしました。

Glue Studioとは

今までGlue Jobは各言語でコーディングをしなければならなかったが、Glue Jobをノーコーディングで作成できるGUIです。
サンプルのインプットデータがあればGUI上で実行して動作確認もできます。

まとめ

EC2, ECS, RDSなどに比べるとかなりとっつきにくいサービスであるため、私も最初かなり戸惑いました。1つずつやっていき理解度を深めていきます。

参考

【Glue】【Glue Studio】なぜクローラーを使わずにデータカタログが作れるのか調べてみた

はじめに

普段の業務はバックエンドエンジニアなのだが、最近になって データ基盤 を作るようになりました。 データ基盤 と言うと大規模なものだと思われがちですが、新規サービスの基盤なので大きくはありません。

なので、まずは データを効率良く見える化 するためにデータ基盤作成初心者が Glue Studio を使ってノーコードで作成しました。
もともとのGlueの知識として

があることを認識していたのですが、クローラーを定義せずになぜ作れるのか?という疑問になったのでそのメモとなります。

環境

  • AWS Glue ※記載時点での最新バージョン

前提条件

Glue Studioで下記のようなフローが作成されていること

調査

調べてみると以下の構文を使えば自動的にカタログが作れることがわかりました。

sink = glueContext.getSink(connection_type="s3", path="s3://path/to/data",
    enableUpdateCatalog=True, updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=["partition_key0", "partition_key1"])
sink.setFormat("<format>")
sink.setCatalogInfo(catalogDatabase=<dst_db_name>, catalogTableName=<dst_tbl_name>)
sink.writeFrame(last_transform)

特に重要なのが setCatalogInfo でこれを設定すれば作れるようです。
また、制限事項もあるようなので確認が必要です。

なお、ちょっとした小ネタですが
上記では partitionKeys を個別に設定しているが日本語文字列でもいけるらしく partitionKeys=["注文日"] という定義も可能でした。 ただし、日本語はやはりオススメしないため partitionKeys=["order_date"] とした方が良いです。

まとめ

ノーコードでできるように便利なものがあるのいいです。
ただ中身を知っていないと挙動がわからないままとなってしまうため
こういう調査は大事だと思いました。

参考

AWS Glue ETLジョブからの Data Catalog でのテーブルの作成、スキーマの更新、および新規パーティションの追加 - AWS Glue

【PHP】【Laravel】laravel/duskで「php artisan dusk」 を実行すると「session not created」が出るときの対処法

はじめに

Docker上でLaravelのE2Eテストをするときに出たエラーがあったので対処法があるのでメモ書き。

前提条件

  • Docker for Macで実行されていること
  • Docker上でPHP8.0系, Laravel8系が動作すること

以下に検証用のリポジトリがあるので構成を参考にしてもらえればと思います。

github.com

原因

Chromeのバージョンが最初にインストールしたバージョンよりも新しくなっており
古いバージョンで実行しようとしていた。

現象

f:id:fujikawa-y:20220125095907p:plain

対応方法

duckでChromeバージョンを上げることで解決

php artisan dusk:chrome-driver

f:id:fujikawa-y:20220125100055p:plain

f:id:fujikawa-y:20220125100107p:plain

参考

stackoverflow.com

【AWS】AWSのメルマガを購読して$25クレジットコードをもらおう

はじめに

ここ数ヶ月で「これは結構お得だな」と思ったのでブログで共有します。

最近は会社の福利厚生で一定額までAWS費用を負担してくれるところもありますがすべての会社がそうではありません。
しかし、少しでもAWSを無料で試す方法はないのか?と考えていたところ「$25クレジットコード」がもらえる方法がありましたので共有します。

AWSウェブマガジン

2020年2月に創刊されたのが「builders.flash」です。

aws.amazon.com

創刊についてのお知らせは以下の通りです。

aws.amazon.com

ただし、ウェブマガジンだけではクレジットコードは受け取れません。

下記の画像を押して、メルマガ登録しないといけません。

f:id:fujikawa-y:20211104091045p:plain
メルマガ登録

やり方

メルマガを登録します。

builders.flash メールメンバー登録 | AWS

会社名など書きますが、会社に連絡は来たことありません。 特に利用目的では、「個人目的」にするといいと思います。

登録すると以下のようなメルマガが届きます。

f:id:fujikawa-y:20211104091444p:plain
メルマガ一部

記事の下に行くとキーワードとリンクがあり、リンクを押すと入力画面が出て入力していきます。

f:id:fujikawa-y:20211104091633p:plain

入力

条件は以下の通りのようです。

  • builders.flash メールメンバーに登録している日本に所在地を持つお客様。
  • AWS アカウントをお持ちのお客様(AWS アカウント ID の入力のない申請は無効となります。AWS アカウントの作成方法はこちら »)
  • メールマガジンに記載の今月のキーワードを正しくご入力いただいていることが必要です。
  • お一人様 1 回/月 の申請のみ有効です。同一のお客様からの複数の申請は全て無効となります。より多くのお客様へご提供するための条件となりますので、ご理解のほどお願い申し上げます。
  • builders.flash がご提供するクレジットコードは、年間合計 10 回まで申請が可能です。(毎月のキーワードでの申請は各 1 回までとなります) 10 回を超える申請はクレジットコードの仕様に伴い、利用ができない場合がございます。あらかじめご了承ください。

※上記は入力画面から引用しました。

後は下記の通り入力するだけです。

f:id:fujikawa-y:20211104092054p:plain

入力してから翌月の第1週目になるとクーポンコードがメールアドレスに届きます。

f:id:fujikawa-y:20211104092451p:plain

後は下記の手順通りクーポンを入力するだけで完了です。

aws.amazon.com

まとめ

AWSの書籍を買って「いざやってみよう!」と思ってもお金を取られるだけでモチベーションが下がります。 こういうのを使って上手に学習して仕事に繋げて行ければと考えています。

ちなみに自分が最近買ったAWSの書籍を貼っておきます。
コンテナ学習にはかなりオススメな一冊となっています。

【Miro】Miro Liteがリリースされたので試してみた

はじめに

コロナの影響でリモートワークが始まり自宅にホワイトボードがなく困っていました。
ホワイトボードの代わりとなるものを探していたところ見つけたのが Miro でした。

最初はフリープランで使っていたのですが、柔軟に使えるようにしたいと思い
「Consultant Plan」を契約しました。

miro.com

ホワイトボードの数も無制限に作れプライベートボードも作れる。
さらにパスワード付きで共有もできたりします。

また、ツールもかなり揃っておりこれだけでだいぶ捗るようなものになっています。

Miroとは?

はじめにに書いた通り、Miroはオンラインでコラボレーションとするホワイトボードプラットフォームです。
ディスカッションやブレインストーミングアジャイルワークフローなどの計画や管理まで可能なツールです。

詳しくは以下のページ、動画をご覧ください。

help.miro.com

問題点

通常のMiroには問題点がありました。

  • ログインしないと使えない

これは地味にハードルが高いものだと今回の件で改めて思ったことです。
サインアップ、サインインせずに気軽にオンラインホワイトボードを使うことはできないのか?と思ったこともありました。

そこでMiro Liteというのがリリースされました。

Miro Liteとは?

Miro Liteはサインアップ、サインインなしで使える無料のシンプルなオンラインホワイトボードとなっています。
ブレインストーミングや1on1で使えそうなものは一通り揃っていると書かれているので実際に触ってみました。

help.miro.com

使い方

まず http://miro.com/lite/ にアクセスします。

説明が出てきますがそのまま「Create a board」をクリックします。 f:id:fujikawa-y:20201118101341p:plain

そうするとURLにランダムな値が付与されたURLが作成されます。

f:id:fujikawa-y:20201118095142p:plain

サインインしていないブラウザだと説明が載ったホワイトボードが作成されます。 f:id:fujikawa-y:20201118101535p:plain

すでにサインインしているブラウザかつ1度でもMiro Liteを使ったブラウザだと画面はこんな感じでいつものMiroですね。 f:id:fujikawa-y:20201118095429p:plain

Chromeのシークレットウインドウで別ユーザーとしてアクセスしてみます。 f:id:fujikawa-y:20201118095508p:plain

ユーザーが2人いることになっています。

テンプレートやツールについて

通常のMiroとどのくらい機能の差があるか確認します。

Miro Lite f:id:fujikawa-y:20201118095720p:plain

かなりテンプレートが絞り込まれ必要なものだけになっているという考えでいいと思います。
ツールはペンや付箋、矢印があるのでこれだけあれば問題なさそうです。

比較としてMiroのテンプレートは以下の通りです。 f:id:fujikawa-y:20201118095950p:plain

使ってみた

動画を残せていないのですが、実際に操作した結果がこんな感じとなります。

f:id:fujikawa-y:20201118100554p:plain

残したい場合は画像かPDFに残すことができます。

f:id:fujikawa-y:20201118100758p:plain

サインアップ、サインインしていない場合はユーザー登録をして残す動線のようです。
なお、サインインした状態で Miro Lite のホワイトボードを見ると保存できるUIとなりました。

f:id:fujikawa-y:20201118100935p:plain

注意点

画像を見てわかる通り 24時間 は保持されるようですが、24時間経ったら消されてしまうようです。

まとめ

Miroは他のオンラインホワイトボードでも一歩先を行っていると思っているものなのでぜひ使ってみてはいかがでしょうか。