継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

hbstudy #87 に参加してエキサイティングな競技「Hardning」の面白さを体感した

タダです。

みなさん、「Hardening」をご存知でしょうか?「Hardening」は、セキュリティ技術を競う競技なのですが、社内の人も参加していたりしたので興味がありました。

そんな中、hbstudy #87で「Hardening」をテーマにした勉強会があったので参加してきました。今回はこの勉強会で「Hardening」に参加したい気持ちが高まりましたのでその模様を書いていきます。

hbstudy.connpass.com

当日の内容

当日の中身としては、次の内容となっていました。

  • @okdt さんによる「Hardning」の紹介
  • @tnmt さんによる「Hardning」参加レポート
  • 上記お二人によるパネルディスカッション

Hardning の概要

@okdt さんと @tnmt さんのお話から「Hardning」のイベント概要をまとめていきます。

Hardning」では各チームを会社にみたて、ECサイトの売り上げとセキュリティインシデントの対応能力を8時間競い合います。各チームの管理するサーバーには運営から攻撃しかけていき、参加チームはその防御対策をしていきます。セキュリティインシデントには外部対応もあり、記者会見もします。また、参加チームはお金をもっているため、高性能なセキュリティ製品を買ってサイトを防御も可能なあたり、実際の事業運営している感じで面白いです。

僕は競技系のイベントにこれまで「ISUCON」に出場したことがあるのですが、「Hardning」は技術だけでなくビジネスに関わる出来事も起こるのが特徴的です。勉強会では動画を見せていただいたのですが、記者会見の受け答えを誤れば細かく記者役の人に突っ込まれてしまったりと、セキュリティが事業継続に影響を与える要素であるのが体感できて面白いなーと思いました!

ビジネスを衞るための技術をどう使うかがと問われている印象でしたね。

関連記事

sadayoshi-tada.hatenablog.com

今年は、札幌市で開催予定とのことで、7/4,5の2日間に渡って開催です。詳細な情報は下記の募集要項より確認できますので興味がある人はチェックしてみてください。 wasforum.jp

MINI Hardning

Hardning」は2日間のイベントですが、これを1日で体験できる「MINI Hardning」があります。まずはカジュアルに経験してみたいという方にオススメです。直近だと以下のイベントがありますので興味あれば参加登録を! minihardening.connpass.com

競技の工程

競技のレギュレーション発表からの準備期間を合わせると3日間のプログラムになっています。それぞれの日にちの大まかな流れをみていきましょう。

Hardening 前日

夕方ごろに競技のレギュレーションが配布されて、チームごとに作戦会議を立てる日です。各チームそれぞれの準備を始めるようなのですが、遅いチームは深夜まで準備しているそうなので前日から戦いは始まっているということでしょう...!

Hardening 当日

当日は8時間の耐久レースなのですが、次々と攻撃と防御を繰り広げていきます。なお、各チームの評価はセキュリティ以外もありますが、順位を決めるのはECサイトの売り上げとのことです。 @tnmt さんがおっしゃった、「Hardning」で大切な要素が印象的だったので、まとめると次の2点です。

  • 事業を継続させること
  • サービスの安定運用

上記の目的のためには基本的なバックアップをとったり、パスワードを定期的に変更してセキュリティホールを潰したりなどの基本に忠実な対応が重要だったとのことでした。机上で止まっていた勉強が1段階あげられる体験ですし、何より失敗しても大丈夫なのが1番いいですね。。僕はこのあたりのお話を聞いてから出場意欲が掻き立てられたのと、セキュリティ分野への興味がより増しました! @tnmt さんの会社では「Hardning」のポストモーテムからセキュリティインシデントの対応の仕組み化を作られたそうです。

関連記事

当日の模様のレポート記事があったのでこちらがより詳細に書かれています。 www.fsi.co.jp

Softening Day

前日の本戦を終えて、どういう戦い方をしたのかを振り返る「Softening Day」があります。@okdt さん曰く、この振り返りを通じて前日まではセキュリティに厳しく人に厳しかった人でも、周りの人へ優しくなれるのだとかw こういうネットワーキングもあるのはコミュニティのイベントとしてありがたいことですね。

関連動画

そんな「Softening Day」の模様はこちらの動画からも見ることができます。


Hardening II Collective - Softening Day

個人的に感じた Hardening の面白さ

お二人のお話を伺って僕が感じた「Hardning」の面白さは次の点です。

  • セキュリティがビジネスに重要な関係を持っていることを体感できること
    • 普段運用で行なっているバックアップ1つ取ってもその大切みを感じられそう
  • 実践を通じた現場メンバーでの対応力を鍛えられそうなこと
  • 一緒に参加した人との繋がりが形成できる「Softening Day」があること
    • 傷の舐め合いになるというお話がありましたが、苦労した時に傷の舐め合いしたいw

感情を抑えきれず以下のツイートしてましたw

まとめ

hbstudy #87を通じて「Hardning」について知ることができたことを中心にまとめました。僕が感じた「Hardning」の面白さが少しでも伝われば嬉しいです!

僕は札幌に行けないかを画策中です。興味がある人は一緒に札幌いきましょう!

サーバーレスでコードを実行可能な「Google Apps Scripts」に入門する

タダです。

最近、「Google Apps Scripts」(以下、GAS)を下記の書籍を読みながら勉強し始めました。業務の自動化や外部サービスとの連携ハブとして利用される文脈で登場する印象ですが、僕自身も興味があるサービスであったので実践的に使えるようになりたいと思ったのがモチベーションになります。

サーバーレスでお手軽自動化!Google Apps Script活用入門  (技術書典シリーズ(NextPublishing))

サーバーレスでお手軽自動化!Google Apps Script活用入門  (技術書典シリーズ(NextPublishing))

今回は、GAS について書籍で学んだことをまとめていきます。

GAS とは

GAS はクラウド上でスクリプトを実行することができるサービスで、ベースは JavaScript になっています。簡単な Hello World を表示するためのコードを見ていただくとわかりやすいかと思います。

function myFunction() {
  Logger.log("Hello World");
}

f:id:sadayoshi_tada:20190406212748p:plain

また、GAS の特徴として次のものがあります。

Google サービスとの連携

例えば、 Gmail のアカウントから GAS でメールを送ることもできます。Gmail のアドレスから携帯アドレスに送ってみましたらちゃんと届きました。

function myFunction() {
  var recipient = "送信したいメールアドレス";
  var subject = "テストメールです";
  var body = "こんにちは! \n現在の時刻は" + new Date() + "です";
  GmailApp.sendEmail(recipient, subject, body);
}

f:id:sadayoshi_tada:20190406223509p:plain

また、カレンダーにイベントの登録も可能です。

function myFunction() {
  createCalendar( "テストイベント", 2019, 4, 7);
}

function createCalendar(title,year,month,day) {
  var calendar = CalendarApp.getCalendarById("Gmail のアドレス");
  var date = new Date(year,month-1,day);
  calendar.createAllDayEvent(title, date);
}

f:id:sadayoshi_tada:20190406214920p:plain

GAS の特有機能について

特筆すべきは、GAS には次のような JavaScript で実行できない特有のメソッドやクラスが用意されているので、試しにUrlFetchAppを使って外部ドメインへアクセスしてみます。

機能名 役割
UrlFetchApp 外部ドメインのサービスへアクセスし、利用可能
Charts グラフなどの図を作成し、利用可能
PropertiesService KEY-VALUE 形式で値を保持し、スクリプト間で使いまわせる

試しに Yahoo! の天気情報にアクセスしてみると、アクセスした結果がコンテンツとして返されました。

function myFunction() {
  var html = getResource("https://weather.yahoo.co.jp/weather/jp/13/4410/13104.html");
  // ログ出力
  Logger.log(html);
}

function getResource(url) {
  var response = UrlFetchApp.fetch(url);
  var contentText = response.getContentText();
  return contentText;
}

f:id:sadayoshi_tada:20190406224626p:plain

GAS から Slack への投稿

外部サービスとの連携させるようになりたいので、Slack と GAS を連携してみます。 Slack の Incoming Webhooks 機能を使って GAS からメッセージを Slack に投稿してみました。

function doPost() {
  var url = "Incoming Webhooks のURL";
  var payload = { "text": "GASからのSlack投稿テストです" };
  var options = {
    "method": "post",
    "payload": "payload="+ JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

f:id:sadayoshi_tada:20190406223112p:plain

まとめ

GAS の入門として Google のサービスや外部サービスとも連携させる方法を学びました。

次はもっと他のサービスとも連携させて GAS を使ってみた結果をレポートします。

AWS 利用を促進する各種サポートページの紹介

タダです。

日常的に AWS サービスごとの情報を公式のドキュメントや Q&A を確認することが多いです。その他にも AWS を使うにあたって様々なサポートページが提供されているのですが、今回は目的別で AWS の様々なサポートページをまとめていきます。なお、随時アップデートがあれば記事自体を更新していければと考えています。

目的

サービス毎の概要を解説した資料を知りたい

まずは、基本的なドキュメント や 各種サービスのよくある質問を確認することから始まると思います。ただ、非常に幅広いサービスラインナップを誇る AWS で、利用を検討しているサービスの概要を知るために図解の資料があると理解もしやすいかと思います。そんな時には下記のページを参照ください。 aws.amazon.com

また、目的や業種別の資料もありますので、知りたい情報があるかは下記ページから探すことをオススメします。 aws.amazon.com

定期的に Web のセミナーもあるので都合つく方は、セミナーに参加しリアルタイムで情報をキャッチアップするのが良いです。 aws.amazon.com

チュートリアルの情報が欲しい

AWS サービスをチュートリアルに沿って触って理解したい場合は、10分間チュートリアルがおすすめです。

aws.amazon.com

また、アプリケーションの開発においては特化したページがあるのでこちらも参考になればと。

aws.amazon.com

ハンズオンで AWS のことを学びたい

AWS ハンズオン資料が動画公開されています.2019年11月時点ではサーバーレスアーキテクチャのハンズオンのみですが,今後増えていくと思いますので,手を動かしてみたい人はブックマークしておきましょう.

aws.amazon.com

サービス毎にナレッジを知りたい

AWS ではナレッジセンターという、よくある質問、要望をまとめたページがあります。 aws.amazon.com

また、日本語字幕付きの動画ナレッジページがサービス毎にまとめられたページもあります。 aws.amazon.com

アーキテクチャのベストプラクティスやガイダンスを知りたい

下記ページでは、 AWS のソリューションアーキテクトが開発したソリューションなどをまとめたページです。解決したい課題と合致するものや類似の課題があれば参照してみると良いでしょう。 aws.amazon.com

サービス毎のステータスを知りたい

AWS の各サービスのステータスを知るには、 AWS Personal Health Dashboard がありますが下記サイトからでもスタータスをリージョンごとに確認できます。 status.aws.amazon.com

サーバーレスの構成例を知りたい

サーバーレスアーキテクチャ構成を採用される事例も増えてきました。サポートページでは、「プロジェクト責任者向け」、「アーキテクト向け」、「開発者向け」それぞれのサポートページが設けられています。

プロジェクト責任者向けサーバーレスの効果について

サーバーレスアーキテクチャを採用している事例は増えているが、その効果や実例が紹介されています。 aws.amazon.com

アーキテクト向けサーバーレス構成例

サーバーレスアーキテクチャをパターン別にまとめたページです。目的別でまとまっているので参考にするのに最適かと思います。 aws.amazon.com

開発者向けサーバーレス開発のステップアップガイド

サーバーレスアーキテクチャでの開発を行うのが初めての方向けにサンプルアプリを作ったり、メリット、他のサービスと組み合わせ方などを紹介されています。 aws.amazon.com

AWS サポートを利用したい

AWS のドキュメントや実際に試してみたわからない事象の解決には、AWS サポートの手を借りたくなります。なお、契約プランによって受けられるサポートが違うので利用しているアカウント毎にご確認ください。 aws.amazon.com

また、問い合わせを行う際の心構えのページが下記ページになります。初めて問い合わせされる方は予め確認されることをオススメします。 aws.amazon.com

負荷試験や侵入試験を行いたい

システムのリリース前に、各種試験がありますが AWS では試験を行う際にルールがあります。

負荷試験のルール

負荷試験をやるためには予め AWS へ申請を通過する必要があります。予め申請を行う理由は DDoS のような意図的な負荷をかけた攻撃と判断されないため必要な申請になります。 aws.amazon.com

侵入試験(ペネトレーションテスト)のルール

ペネトレーションテストのルールはこちらに記載されています。 aws.amazon.com

まとめ

AWS サービスは常日頃から機能追加や新規サービスが増えているので、そのキャッチアップは必然になっていきます。公式サイトでも様々なサポートページを用意してくださっているのですが、こちらも随時更新されているような状況なので、この記事が参考サイトに到達するためのインデックスになれば嬉しいです。

更新情報

  • 2019/11/06 ハンズオン資料の情報をアップデート

kakakakakku さんのブログメンティーを卒業したので3ヶ月間を振り返る

タダです。

3月をもって、@kakakakakku ( id:kakku22 / カック )さんのブログメンティーを卒業しました。今回は3ヶ月間のブログメンタリングが終わってブログメンタリング期間のことを振り返ります。

カックさんとは

カックさんは、毎週ブログを書いているエンジニアの方です。ブログを書くことに対するモチベーションがとても高く、Trello にタスクを書いて終わるまで寝れないという言葉を聞いた衝撃を今でも忘れません。 lean-agile.fm

ブログのネタは幅広く、インフラや運用、開発系、組織論やチームビルディング等様々なテーマをブログを扱っていらっしゃるので興味ある方は読者登録することをお勧めします。 kakakakakku blog

外部の登壇も多く、僕のお気に入りは「アウトプット駆動学習」の発表で、このおかげで去年はブログを書く習慣ができました。

出会い

JAWS-UG 朝会 #3 に参加した時に出会っていました。僕は勉強会に参加して勉強したことに満足していたのですが、カックさんはブログを書いて、勉強会で学んだことを形に残していたのを見て当時の自分は衝撃を受けました。 kakakakakku.hatenablog.com

そこから Twitter をフォローしてウォッチするようになり1ファンになっていましたw

ブログメンティーって?

書いて字のごとく、僕がブログを書いてその内容をカックさんに面倒見てもらっていました。テーマの探し方、深掘り方、記事での改善点や書き方のアドバイスもいただきました。昨年末に募集がかかったので、今回選んでいただけて本当にラッキーでした。

ブログメンタリングは、最大3ヶ月間と教えていただいたので、この3ヶ月でより多くの成長のきっかけをつかみたいと思って臨みました。

ブログメンティーに申し込んだ理由

ブログメンティーに申し込んだのは、ブログを書く習慣はついたのでより多くの人に価値のある記事を届けられるようになるためです。これまでは、自分のメモのような記事が多かったですが他の人(この中には未来の自分も含まれます)にとって有益な情報を発信したくて申し込みました。

個人的なブログテーマとして選んでいたのは、IaC 、Python機械学習、コンテナ、DevOps 等のテーマを選んで書きたいと思っていました。

3ヶ月間が終わっての振り返りと学びのまとめ

3ヶ月間を振り返ってみます。まずは数値の振り返りです。

  • 記事数 : 17個 (週1記事ペースで、残り2週間は週2記事ペースでした)
  • ホッテントリ獲得数 : 2回
  • Twitter のフォロワー数 : スタート時は200弱だったのが、約270ほどになったので70ほど増加(2019/03/31時点)
  • このブログの読者数 : スタート時は12人だったので、13人の増加(2019/03/31時点)

次にブログメンタリングを通じて学んだことについても振り返ります。

  • ブログを書く時に「誰に向けた記事なのか」を整理して記事の骨子とタイトルを作ると書きやすくなった
    • これまではざっくりと書きたいテーマはあっても書きながら記事を構成してたが、整理してから記事に取り組むように時間は短縮した
    • タイトル = 新聞の見出しのように考えその記事を表すタイトルを練るようになった
  • 公開前には声に出して記事を読む
    • 誤字や読みづらいところを見直す癖がついた
  • ブログネタは常に探し続け、ネタ帳を常に整理する
    • 情報は水物なのでアツい時期にいち早く記事化していける用アンテナをはって、手持ちのネタ帳も整理しておく
  • 文章のパラグラフを考える
    • 1文1段落にすると冗長/縦長になって読みづらい
    • この点は、この記事が参考になる
  • 習慣化のために「例外」を設けないこと
    • 例外」を作るとそこに甘えちゃうと思うので、どんなシチュエーションでも習慣を作る

卒業後のこと

卒業後も週2記事目標でアウトプットは継続してやっていきたい思います。2019年も残り9ヶ月しかないので、自分の実践的な強みを増やしていきたいです。カックさんが「人に平等に与えられたのは時間であり、それをどう使うか」についてラジオで話されていました。僕もこの時間をどう使うかで今後の自分が決まると思うので大切に週ごとにできることを1つずつ積み上げていければと思っています。

仕事が忙しくて...を言い訳にして何もしないことの方が勿体無い! まずは、機械学習で Kaggle や SIGNATE に挑戦していくような自分になる!自分が使っている OSS に貢献する!

また、Twitter を通じて知り合ったブログメンティーのみなさんと交流してお互いを成長し合う関係性作っていきたいです。ということで、ブログメンティー会をやってみたいと思い、興味ある方は下記の bosyu のページに投稿してもらえるとありがたいです🙏

https://bosyu.me/users/tada_infra/wants/13037bosyu.me

まとめ

今回は、カックさんのブログメンティー期間の前後の変化を中心に振り返りました。

定期的にブログメンタリングを Twitter で募集しています。過去の自分を変えたい方、ぜひ要チェックです!(ジムの売り文句みたいですがw)

3ヶ月間、とても刺激的でした、カックさん本当にありがとうございました!

Python の可視化フレームワーク「Dash」

タダです。

機械学習やデータ分析の勉強の過程で Python を使ってデータの可視化をやることが増えました。これまでは、「Matplotlib」のみを使っていましたが、別の手法として今回「Dash」というフレームワークを使ってみます。 plot.ly

Dash とは

Dash」とは、Web アプリケーション 用 Python フレームワークです。Flask 、Plotly.js 、および React.js 上に書かれた「Dash」は、Web ブラウザのデータ可視化ができます。

plot.ly github.com

データ可視化の例

サイトにデータ可視化の例が載っていて、様々なデータのビジュアライズができることがわかります。 dash.plot.ly

セットアップ方法

「Dash」のセットアップは簡単です。以下の2つのコマンドを実行すれば終わりです。

$ pip install dash==0.39.0
$ pip install dash-daq==0.1.0

参考情報

dash.plot.ly

サンプルデータの可視化

早速、サンプルデータを可視化してみます。

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),
    html.Div(children='Dash: A web application framework for Python.'),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],
            'layout': {
                'title': 'Dash Data Visualization'
            }
        }
    )
])

if __name__ == '__main__':
    app.run_server()%

コードを書いたら実行してみます。

$ python app.py
 * Debug mode: off
 * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)

http://127.0.0.1:8050/ にアクセスしてみます。このように簡単にデータを Web ブラウザ上に表現することができました。

f:id:sadayoshi_tada:20190329230725p:plain

まとめ

Python のデータ可視化フレームワークの「Dash」を簡単に紹介しました。

Web ブラウザ上に表示できるのでアプリケーションと組み合わせて、Web サイトなどに組み込んでみると面白いかもしれません!

今回は簡単な紹介にとどまりましたが、「Dash」を使って可視化の手法を今後も学んでいければと思います。