Kinesis Data Analyticsはストリームに対して、標準SQLでデータを集計、処理することができるサービスになります。Streamsがデータを逐次的に処理するのに対して、Analyticsはストリーム全体(および期間などで絞った一部)に対して、一括でデータ処理を行えるという点がことなります。「まさに今」のデータに対して、集計、可視化したいなどの用途に向いています。
エンパワーメントサービス部所属セキュリティエンジニアの綾城です。 Kali Linuxは初期セットアップが完了すると、膨大なツールが用意されているためできることが多数あり、その後どうやって使っていけばよいか初心者などは迷いがちです。高額なセキュリティの講習会などで時間をかけて教えていたりもしますが、今回は、Kali Linuxの使い方を日本語で学べる書籍をいくつか紹介いたします。英語が問題ない方は、複数の書籍やサイトがありますので、そちらを参考にしてください。
Kali Linuxは、セキュリティ診断ツールを含むLinuxディストリビューションです。利用の仕方により不正アクセス行為と判断される可能性があります。書籍の注意書き等をよく読んで、不正に使用しないようにしましょう。
書籍紹介
ハッキング・ラボのつくりかた
Kali Linuxの使い方を習得するにはまず、安全な環境の構築が大事です。下でも紹介してますが、ハッカーの学校や暗号技術のすべてなど、セキュリティ関連書籍を多数出してる著者IPUSIRON氏の書籍です。正直、これ一冊でいいのではないかという程の濃い内容の書籍です。前から順に沿って読み進めながら実行していくと、仮想環境内に攻撃実験ができる環境が出来上がります。分量が多いので挫折しがちですが完走できたら相当力がついていることでしょう。また、『ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習』サポートサイト FAQなど、サポートにも尽力されており、そのナレッジは大変助かります。私は物理本と電子版両方買いました。会社の本棚にもあります。これは、ぜひ入手してください!
Kali Linuxの使い方は、洋書が読めるともう少し選択の余地が生まれそうです。日本語の書籍は貴重なので、入手して内容をしっかり身につけたいところです。 弊社アピリッツでは書籍購入制度があり、このような書籍も要望を出すことによって購入してもらえます。ぜひ私たちと一緒に高度なセキュリティ技術を身につけてサービスに生かしませんか? アピリッツでは、セキュリティエンジニアを募集しております。興味ある方は、下記の採用情報からセキュリティエンジニアの職務内容・応募資格を確認してみてください。もちろん、Webエンジニアも募集中です。下記ボタンからぜひ確認ください。
module Types
class WeatherType < Types::BaseObject
field :weather, String, null: false, description: '天気'
def weather
object[:weather]
end
field :temperature, Int, null: false, description: '温度'
def temperature
object[:temperature]
end
end
end
上記のコードの解説です! まず以下の1行でfieldの定義をします。
field :query名, 型, null: nullを許可するか, description: 'クエリの説明'
module Types
class MonthType < Types::BaseObject
field :name, String, null: false, description: '英名'
def name
object[:name]
end
field :days, Int, null: false, description: '日数'
def days
object[:days]
end
end
end
module Types
class QueryType
### (省略) ###
##### ここから追加
field :user, UserType, null: false, description: 'ユーザ情報(id指定で1件)' do
argument :id, Int, 'ユーザid', required: true
end
def user(id:)
User.find_by(id: id)
end
field :users, [UserType], null: false, description: 'ユーザ情報(全件)'
def users
User.all
end
##### ここまで追加
end
end
app/graphql/types/user_type.rb に以下を記述します。
module Types
class UserType
field :full_name, String, null: false, description: '姓名'
def full_name
object.last_name + ' ' + object.first_name
end
field :created_at, String, null: false, description: '作成日時'
def created_at
object.created_at.strftime("%Y年 %m月 %d日")
end
field :profile, String, null: false, description: 'プロフィール'
def profile
object.profile
end
end
end
module Types
class WeatherType < Types::BaseObject
field :weather, String, null: false, description: '天気'
def weather
object[:weather]
end
field :temperature, Int, null: false, description: '温度'
def temperature
object[:temperature]
end
end
end
module Types
class WeatherType < Types::BaseObject
field :weather, String, null: false, description: '天気'
field :temperature, Int, null: false, description: '温度'
end
end
スッキリしていいですね!
UserTypeいついても同様です!
module Types
class UserType
field :full_name, String, null: false, description: '姓名'
## 成形しているため、省略不可能
def full_name
object.last_name + ' ' + object.first_name
end
field :profile, String, null: false, description: 'プロフィール'
## 成形していないため、省略可能
def profile
object.profile
end
end
end
profileは何も成形していないので、以下のように書き換えることができます。
module Types
class UserType
field :full_name, String, null: false, description: '姓名'
## 成形しているため、省略不可能
def full_name
object.last_name + ' ' + object.first_name
end
field :profile, String, null: false, description: 'プロフィール'
end
end
module Types
class UserType
field :full_name, String, null: false, description: '姓名'
## full_nameをUserのインスタンスメソッドにした場合は、full_nameも省略可能
# def full_name
# object.fullname
# end
field :profile, String, null: false, description: 'プロフィール'
end
end
いいですね!!
Loaderを使って、N+1問題を解決!
最初に挙げたこのテーブル構造を思い出してください。
users テーブル
- id
- name
- created_at
- updated_at
articles テーブル
- id
- user_id
- body
- created_at
- updated_at
comments テーブル
- id
- article_id
- user_id
- text
- created_at
- updated_at
編集中にPlantUML: Preview Current Diagramの実行でプレビュー表示できます。
vscodeから書き出し
PlantUML: Export Current Diagramの実行で画像を出力します。
# *.plantuml
@startuml spirits
title PlantUMLを活用しよう
actor Me
participant OS
participant VSCode
participant "任意のVCS" as VCS
== 初期設定 ==
Me -> OS: Javaの導入
Me -> OS: Graphvizの導入
Me -> VSCode: PlantUML拡張の導入
|||
== 作図 ==
loop
Me -> VSCode: テキスト編集
Me -> VSCode: 画像プレビュー(自動)
end
Me <- VSCode: 画像で書き出し
|||
== バージョン管理 ==
VSCode -> VCS: テキスト表現のままコミット
@enduml
Amazon API Gatewayを利用すれば、RESTなAPIのバックエンド処理としても実行できます。EC2をAPIのバックエンド処理として利用する際には、冗長性を考慮するとELBも基本セットになりますが、 API GatewayとLambdaとを利用して構築することで、EC2のコストだけでなく、Elastic Load Balancing(ELB)のコストも削減することができます。
DI部 吉岡:今回、Amazonが提唱する価値観のうち、 ”Ownership”、”Learn and Be Curious”、”Deliver Results”を大切にしてほしいと教わりました。この3つは、開発の経験を積むうちに重要性がわかります。まだ経験の浅い若手が、ごく早いタイミングでプロジェクトを通して実感できるのはよかったと思います。