Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

JAWS-UG金沢 #33 に参加しました #jawsug

jawsug-kanazawa.doorkeeper.jp

今回は6月に行われたAWS Summit Tokyoの報告会ということで、AWS Summitに数年行ってない身としては雰囲気つかんでおこうと思い参加しました。(たしか2013年に行ったきり。)

発表

加藤さん(@PharaohKJ)「AWS Summit Tokyo 行ってきた」

(写真は最初の挨拶のときのもの)

  • Well-Architected framework を読もう
  • 公式にホワイトペーパーが出ていて以下のリンクからダウンロードできます。英語版は2018年6月版で、日本語版は2016年11月版でした(記事掲載時点)。
  • PDF(English)
  • PDF(日本語)
  • Windows系のアプリケーションを使ったり検証したりするときは、手元のMacWindows VM立ち上げるよりWorkSpaces使った方が快適とのこと
    • 最近 AppStream 2.0 がリリースされてこっちも場合によってはいいかもしれない

相羽さん(@aibax)「AWS Cloud9 を使ってサーバレスアプリケーションを作ってみた」

  • デモを交えながらCloud9というWebブラウザから操作できるIDEを使って、サーバレスアプリケーションを作る一連の流れを紹介
  • AWS Lambda用のコードをその場でデバッグできるのはすごく良いなあと思いました。

でむらさん「今時のEC2事情」

  • 最近C5系のインスタンスタイプが登場したので、C4.largeとC5.largeの性能比較を行った
  • まだ大量に調達するのは厳しいように思われる
  • Amazon Linux2について

沼口さん「成長するコミュニティとの付き合い方」

  • JAWS-UGのこれまでの成長について
  • スケールアップ型成長とスケールアウト型の成長
  • 自走できるコミュニティ + AWS社員のサポート

松下さん 各社の開発ブログ記事を集めて取得するバックエンドサービスをサーバーレスで作った話

(写真撮りわすれてました。すいません)

  • 飛び入りでLTしてくれた
  • SAMを使って簡単に環境を構築できた
    • template.yamlは100行未満
  • 定期処理の実行はCloudWatch Eventsをトリガーに使っている
  • 以下リポジトリで詳細見れます

github.com

フリーディスカッションタイム

懇親会に行けない人もいるため、会の途中に名刺交換したりあれこれ話したりという時間が設けられました。こういうトピックについて知りたい・知見がある、じゃあそういう会やりましょう、という流れになって中々熱かったです!

沼口さんよりAWSノベルティがいろいろと提供されたんですが、じゃんけんに勝ってJAWS-UG re:MIX Tシャツを頂きました。ありがとうございます!!!

懇親会

www.jyu-ninotsuki.com

美味しい魚と日本酒を頂きましたー。認定ソリューションアーキテクト取るときがやってきそうだって言う話をしていた覚え。

www.hotpepper.jp

二次会はビールとドイツ料理。k8sの良さについて、DynamoDBについてなどなど語ってました。

Kanazawa.rb meetup #70 に参加しました #kzrb

kzrb.doorkeeper.jp

Meetup #70 - Kanazawarb

気付けば第70回とキリのいい回数を重ねてきてますね。今回はITビジネスプラザ武蔵のサロンスペースCRITで開催されました。

プログラミングElixir 16章

前回は14章を読んでいたんですが、家で15章を読んだのでこの日は16章の「OTP: サーバ」を進めました。

  • GenServer ビヘイビアを使ってサーバを作る
  • 必要な関数が定義されているので、必要であれば関数をoverride(?)すれば良い
    • handle_call とか handle_cast とか
  • iex からこのサーバーに値を渡して、サーバーの状態を更新することができた
    • GenServer にはstateという概念があるっぽい
  • receive などを自分で記述しなくて良いので楽

プログラミングElixir

プログラミングElixir

Ruby 2.6.0-preview2 について

先日RubyKaigiがあって参加はできなかったもののTwitterのタイムラインを見ていたところ2.6.0のpreview2がリリースされたと話題になっていたので、ほんの少し見てみてendless rangeについて気になってまとめたものを発表しました。以下発表で使った資料です(markdownで作ってVSCodeのプレビューで見せる簡易なものにした)


https://www.ruby-lang.org/ja/news/2018/05/31/ruby-2-6-0-preview2-released/

2.6.0ではJITコンパイラの導入を含むいくつかの新機能がある。その中で endless range が気になったので触ってみた。

(1..10) # finite range
(1..) # endless range

実行環境

2.6.0-preview2 をインストールする。

$ brew upgrade ruby-build
$ rbenv install 2.6.0-preview2
$ cd hoge
$ rbenv local 2.6.0-preview2

use case 1

arr = ["a", "b", "c", "d"]
# => ["a", "b", "c", "d"]
arr[1..]
# => ["b", "c", "d"]
# 配列の特定のインデックスから最後の要素までを取得する新しいやり方
# VS
arr[1..-1]

use case 2

(1..).each {|index| ...} # infinite loop from index 1

# VS
n = 1; loop { ...; n += 1}
1.upto(Float::INFINITY) {|n| ... }
1.step {|n| ...}

use case 3

["a", "b", "c", "d"].zip(1..)
# => [["a", 1], ["b", 2], ["c", 3], ["d", 4]]
["a", "b", "c", "d"].zip(0..)
# => [["a", 0], ["b", 1], ["c", 2], ["d", 3]]

and more

(1..).class
# => Range

(1..).size
# => nil
# 期待される値については https://bugs.ruby-lang.org/issues/14699 で議論されている模様

(1..).take(10)
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

(1..).step(2).take(10)
# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

(1..).map {|n| n * n }.take(10) # compute infinitely...

# Enumerator::Lazy と組み合わせると遅延評価できる
(1..).lazy.map {|n| n * n }.take(10).force # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
(1..).lazy.select {|n| n % 3 == 0 }.take(10).force
# => [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
(1..).lazy.select {|n| n % 3 == 0 }.select {|n| n > 100 }.take(10).force
# => [102, 105, 108, 111, 114, 117, 120, 123, 126, 129]

最後の方は遅延評価の話になってしまったけど、Enumerator::Lazyモジュールの存在を知らなかったので勉強になりました。(発表ではEnumerableと紹介してしまったのでここで訂正します)

docs.ruby-lang.org

その他

  • 今どきのCLI HTTPクライアントHTTPieのご紹介があった。
    • 標準でJSONを整形して表示してくれるのはありがたい

httpie.org

  • AWS summit / Civic Tech Forumの参加報告
    • Civic techによって解決してる事例は結構あるけど、その情報があまりない(検索しづらい?)のでカタログ的なサイトがあればいいのではという話
  • Promiseおよびasync/awaitのハマりポイント
    • どこで非同期処理を待つ(await)のか、同期処理との共存あたりの話だった
    • 以前Promiseのmapやシーケンス化についてcoというライブラリを使ってたけど、async/awaitが出てきてもう役割は終えたのかな
    • It is a stepping stone towards the async/await proposal.

github.com

懇親会

www.hotpepper.jp

こちらの中華料理屋で飲み食べ放題だった。中華料理の食べ放題って凄い。そういえば横浜中華街でも食べ放題コースあった気がするので中華料理屋業界では一般的なのかな?

食べるのに夢中になってしまい写真はこれだけ...w 店内でワールドカップ中継が流れてたので話に集中できませんでした。餃子は美味しかったけど黒酢があればもっと良かったなあ。

Kanazawa.rb meetup #69 に参加しました #kzrb

kzrb.doorkeeper.jp

Meetup #69 - Kanazawarb

今回は北國新聞会館にあるDMM GAMESさんの新オフィスで開催されました。写真にあるように特徴的なディスプレイ(DMM.comラボの南町事業所もこういうのがある)がドーンと配置されているフリースペースです。参加者が多くて賑わいましたよ。LTのネタが準備できなかったのは無念...。

プログラミングElixir 14章

  • この章は複数のプロセスを作りそれらの扱い方をまとめた内容
  • 思想としてはカジュアルにプロセスを作って行きましょうという感じ
  • spawn/3 でプロセスを作成、PIDが返ってくる
  • 他のプロセスに対して send/2 でメッセージを送って receive/1 でメッセージを受け取る
  • プロセスのリンクとモニタという概念がある
  • プロセスを使って並列マップ関数を作れる

この辺使いこなせるようになったら面白いだろうなという内容でした。この先の章も楽しみです。

プログラミングElixir

プログラミングElixir

若者の質問に答えるタイム

隣の席にRailsでWebアプリケーションを作っている若者がいていくつかの質問を受けて答えてました。(Devise周りの話は@wtnabeさんがいい道案内をしていました。) form周り、view内の変数バインド、ルーティングなどなどこういうところがハマりポイントになりうるんだなあと感じました。

懇親会

www.hotpepper.jp

retty.me

焼き肉食べ放題!!!またもやkzrbがお店に勝ってしまった...w

二次会はクラフトビールが飲める行きつけのお店へ。 ゆるゆる飲んでおりました。

Japan Container Days v18.04 に参加しました

containerdays.jp

先日Japan Container Days v18.04 というイベントに参加してきました。東京のベルサール神田で行われ参加者500人規模のカンファレンスとなりました。

だいぶブログに書くまで時間が空いてしまいました。ここでは聞いた講演についてメモを載せていきます。

keynote

サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術

  • サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術 // Speaker Deck
  • AKE=プライベートコンテナ基盤
  • Adtechは性能要件がシビア...
  • Minikube
    • minikube 触ってみるか(takayuki)
  • 部署内ではGKE/ECSを使ってる
  • オンプレ上に基盤を構築(-> 今回の話)
  • 2人で作った(約10ヶ月)
  • こういう基盤(GKE含む)を使うと最初は辛いけど、アプリケーションをContainerizeしてくると開発サイクルが早くなる
  • E2Eテストツールが用意されている(Sonobuoy, bosh)
  • Openstack既に使ってるのでintegrationもやってるよ
  • Adtechブログに詳細のってる
  • メトリクスはdatadog/prometheus

マイクロサービスアプリケーションとしての機械学習

  • マイクロサービスアプリケーションとしての機械学習 // Speaker Deck
  • メルカリの機械学習エンジニアが登壇
  • 出品時の画像認識機能(タイトル、ブランド、カテゴリを自働入力してくれる) on Kubernetes
  • デモ動画ではレスポンスも問題ない感じにできててすごい
  • 機械学習の課題
    • 計算時間(数100ms-数sec)
    • サーバーコスト
    • 学習モデルとコードの整合性が必要になる
  • 学習環境というのが必要
  • 画像認識時に実は色推定をしていて色情報も取得している
  • 機械学習エンジニアが1からDockerfile作ってSREに渡したら1週間でKubernetes + AWS環境ができてた
  • Microservice 基盤が整備されつつあったタイミングだった
  • Spinnakerでデプロイ
  • 機械学習導入初期時は手動運用していたが、すぐに運用の限界がきてしまった
  • 機械学習モデルはPersistent Volume(?)に入っている
  • 機械学習エンジニアがどこまでやるか問題(システム運用も?)

"Yahoo! JAPANのKubernetes-as-a-Service"で加速するアプリケーション開発

  • "Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
  • ズバトクon Kubernetesの話
  • 課題
    • 通常時の数倍〜数十倍アクセスが来るキャンペーンがあると、容易にスケールアウト、スケールアップできなかった
    • リリースの自動化が進んでなく頻繁にリリースできてなかった
    • 新たな環境の用意がしんどい
  • Concourse CI
  • PHP -> Java
  • 次の環境にデプロイするためにCIサーバーからプルリクエストが投げられる
  • マージされるとデプロイが始まる
  • Prometheus使ってる
  • OpenStackのハイパーバイザー落ちたら、自働復旧している
  • Cloud Nativeな設計思想になれていく
  • Kubernetes-as-a-Serviceの話(ZLab須田さん)
  • GKE/Azure Container Service/EKS的なもの
  • Yahoo!JapanのKaaSを開発している
  • 2017/10〜からプロダクション利用
  • 障害や問題のあるノードを修復(セルフヒーリング)
  • 障害のあるノードを自働検知後、自働削除
  • 必要なノード数になるまで自働でノードを作成する
  • クラスタのアップグレードをゼロダウンタイムで
  • Kubernetesクラスタのオペレーションは人間のやる仕事ではないので、機械に任せる
  • Kubernetes自体が分散システムである
  • CustomResourceDefinitions(CRD)

Kubernetes x PaaS - コンテナアプリケーションのNoOpsへの挑戦

  • Kubernetes x PaaS – コンテナアプリケーションの NoOpsへの挑戦
  • NoOps?
    • システムに自律的な回復性を持たせる
    • 無停止メンテナンス
    • 自律的リソース調整
  • Kubertetesにおいては...?
  • Horizontal scaling, Automated rollouts and rollbacks, self-healing
  • Podのフェーズ
  • Probe: Liveness, Readiness
  • Restart policy
  • Rolling update
  • StatefulSetという概念があるけど、これもRollingupdateに対応している
  • Auto scale podのスケーリングと、クラスタサイズのスケーリング(ノードの数の調整)
  • ステートフルなワークロードをKubernetesで管理するのはしんどい
  • 回復力を持つプラットフォーム(PaaS, SaaS)を使っていくのがいいのでは
  • Open Service Broker API + Service Catalog
  • これらを使うことで外部のプラットフォームのサービス(Database等)を利用できるようになる
  • 統一されたインターフェース
  • managed Kubernetes
  • サーバレスコンテナサービス
  • Fargate的なやつがAzureでもある
  • Virtual Kubelet
  • サービス間通信・通信の回復性
  • Service Mesh(Istioなど)
  • Helm

2018年のDocker・Moby

  • [表示が崩れる場合ダウンロードしてご覧ください] 2018年のDocker・Moby
  • Docker Tokyo Community
  • ランタイム、オーケストレータの歴史について
  • DockerとK8sの関係が逆転した
  • dockerからk8sを管理できる
  • k8sはCRIを通じてcontainerdを扱える
  • docker buildの後継・代替
  • BuildKit
  • MobyProjectに入っている 
  • Dockerfileを中間言語(LLB DAG)にコンパイルする
  • DAGの記述はmulti-stage Dockerfileで書ける
  • コンテナ以外のものもビルドできる(ex. goの並行ビルド)
  • P2Pレジストリが流行ってくるのでは?(dragonflyなど)
  • rootless runcでセキュリティリスクの影響範囲を抑える
  • VM型ランタイムも流行ってくるのでは?

今こそKubernetes。最高の仕事道具で使いこなそう

  • Japan Container Days: 「今こそKubernetes。最高の仕事道具で使いこなそう」by capsmalt
  • beginner向けセッション
  • ロードバランシング、ローリングアップデート、ネットワーク管理など...
  • 学習コスト高いんだけど、マネージドサービスとして提供しているんでそれ使ったら良さげ
  • K8sの周辺ツール?まあいっぱいあるよね
  • みんなが継続的にコミットして更新される。またサポートがあるのは重要なファクター
  • K8sで開発環境を作る
  • Helm使おう(また出てきた)
  • システム構成のパッケージングを担う
  • 1クラスター内で複数のネームスペースを使って環境を隔離できる
  • パッケージングをどの単位でバージョン管理するのかは悩みどころ
  • バージョンの切り替え(upgrade, rollback)が可能

Kubernetesのない世界 すべてがサーバーレスになる

  • Kubernetesのない世界 すべてがサーバーレスになる
  • ソフトウェアを通じて価値を提供する、ということがわれわれがすべきこと
  • 手段はserverlessでもkubernetesでもよい
  • Opsにかけるコストを減らしていきたい
  • 将来的にはVMもKubernetesもいらなくなって、ただコンテナを動かす環境が流行るのでは(FargateとかAzure Container Instanceとか)
  • CNCFでもサーバーレスのランドスケープがある
  • Observability問題
  • Lambdaにはエージェントをインストールできない!!!
  • IOpipe(Lambda functionをラップしてメトリクスを収集するやつ)
  • Epsagon, THUNDRA(CloudWatchLogsにログを吐いてそれを独自のダッシュボードで可視化できる)

『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法!

  • 『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
  • k8sの概念の難しさ
  • YAML書いてばっかり?
  • キャッチアップしてチームに普及しようとすると途端に疲れる...
  • コンテナの次の技術を考えてみる
  • 10年前はクラウドが出てきたところ
  • 5年前はクラウドが定着、プロビジョニング、CI/CD自動化
  • 次の流れはPaaS, Serverlessなのでは
  • 開発者に価値を提供するには
  • Serverlessプラットフォームではコンテナ技術を使ってfunctionを実行している
  • CNCF Serverless whitepaper
  • プラットフォームのカテゴリによってメリット・デメリットあるんで適切に使い分ければいいのでは?

CNCF: Evolving the Container Landscape

  • [B-5] CNCF: Evolving the Container Landscape [Chris Aniszczyk(CNCF)] - YouTube
  • @craさん
    • 英語による講演だったので以下認識違いがあるかもしれませんご了承ください
  • Cloud native technologyを普及する
  • cncf.ci: cross cloud ci
  • certified K8s (様々なプロバイダが存在している)
  • What is cloud native?
  • vmからIaas, PaaS, container, K8sと時代が流れてきた
  • パッケージングやオーケストレーションはcloud nativeの一つの側面に過ぎない
  • l.cncf.io
  • many paths to cloud native
  • containerization
  • CI/CD
  • Orchestration
  • Observability(prometheus/fluentd/Jaeger)
  • Service Mesh(envoy/kinkerd)
  • Networking(CNI)
  • Distributed database(Vitess)
  • Messaging(NATS/gRPC)
  • container runtimes(containerd/rkt)
  • software distribution(TUF/Notary)
  • 完璧なものではないので、知見とか改善あったらissue出してほしい
  • serverless
  • cloudevents specification
  • CNCF sandbox(early stage projects)

所感

  • K8sの話題が多かった
    • Dockerコンテナを本番環境で使うにあたっては信頼できるプラットフォームになっているっぽい
  • Serverlessの話もちらほらでてきていた
    • 一見コンテナと関係なさそうだけど、Cloud Nativeの文脈にも登場している
  • コンテナの生態系の進化について行けてない
    • K8s触れてないしそれに付随するツール達も同様
  • たまには大規模なカンファレンスに参加するのもよい
    • ありきたりだけど良い刺激になる(普段聞けないような話を聞ける)
    • 人が多くパワーを使うのでその分ヘロヘロにはなる

写真

ランチセッションで配給されました。全日のイベントでお昼ご飯の心配をしなくていいのはいいですね〜。

もぐもぐタイムどらやきでした。

アフターパーティーも大盛況。

アフターパーティーにて次回のJapan Container Days開催が発表されサイトも更新されました。

JAWS-UG金沢 #32 に参加しました #jawsug

jawsug-kanazawa.doorkeeper.jp

今回は JAWS DAYS 2018の参加報告会でした。面白ポイントとしてはAmazon Chimeというビデオミーティングツールを使って3会場(金沢、磐田、名古屋)同時開催をしたことです。最初に加藤さん(@PharaohKJ)から挨拶がありましたが今回の開催にあたって以下のようなことをおっしゃってました。

  • 問題意識として地方の勉強会は人が集まらない
  • だったらリモートでいろんな会場繋いでやればいいのでは?
    • 各会場は少人数でも人が集まってる感でる

たしかに他の会場と繋ぐと新鮮な感じがしてよかったです。また、今回はAWSよりAmazon Chimeを貸していただけたとのことでした。ありがとうございました。マイクの調整や共有画面の操作は課題としてありましたが、それ以外は問題なく他会場の発表を聞けました。パケットロスはほぼなかったのではないかと思います。

aws.amazon.com

各発表のメモ

大規模なイベントだったんだなと感じました。それだけAWSユーザーもいるし興味を持つ層も多いということなんでしょう。サーバーレス、IoT、機械学習というのがトレンドっぽいですね。

加藤さん

栗原さん(磐田支部)

山口さん(名古屋支部)

Kanazawa.rb meetup #68 に参加しました #kzrb

出張やらなんやらでだいぶ出遅れましたが書いていきます。

kzrb.doorkeeper.jp

レポートはこちら Meetup #68 report - Kanazawarb

今回は「開発環境自慢 LT 大会」ということで参加者全員が発表する回でした。私は自宅作業場のデスク周りを紹介しました。

何人か物理的な道具(ディスプレイやキーボードやどういう配置にしてる等)の話をしていて参考になりました。あと .zshrc やエディタ・IDEの設定をどこまでカスタマイズするかという話もでてきて面白かったです。私は最近だとキーバインドはあまりカスタマイズせずにプラグインは必要なものをインストールするという傾向にあります。エディタのVimモードは使わず(結局このキーバインド使えんやんってなるから)、エディタに体を合わせていくスタイルにしています。

懇親会

www.hotpepper.jp

www.hotpepper.jp

この日はたしか夏日になって暑かったのでビールが美味しかったです。まだ明るいうちから飲めるのは背徳感があって良いという話で盛り上がっていました。

二次会はメキシコ料理屋で。いきなりフラメンコが始まって驚きましたが、圧巻の踊りでした。目力も凄い。炎上ステーキ(フランベしてる)も名物のようです。

次回

次回はDMM GAMESさんのオフィスをお借りしての開催です。

kzrb.doorkeeper.jp

Kanazawa.rb meetup #67 に参加しました #kzrb

風は冷たかったけどだんだん春らしくなってきましたね。お昼前に四高記念公園やしいのき迎賓館、柿木畠を散歩してたんですが気持ちよかったです。

kzrb.doorkeeper.jp

Meetup #67 - Kanazawarb

今月も参加してきました。参加者は20人ほどになって、みなさんいろいろやりつつも似たことやってる人で話したりLTもたくさんあったりで良い感じにmeetupできた感じがありました。

プログラミングElixir

第13章

  • 前回の続きで、GitHubのissueをテーブル形式で表示するプログラムを写経
  • escript というものでコマンドラインから実行可能なファイルを生成する
  • mix format タスクというのがあるらしい
  • 生成したファイルを実行してみたが、issueに日本語が混じっていると文字化けしてしまった

この日はLTもあったのであんまり進捗なかった。ひとまずCLIで実行するまでできたのは嬉しい。

プログラミングElixir

プログラミングElixir

LT

docs.google.com

前回、ErlPortの話をするぞって言ってたんですが、確定申告というタイムリーなイベントがあったのでそれに関して使ったRubyの話をしました。ちょっと発表前の準備にばたついてしまったんですが、お手軽に楽できるのはいいよねってのが要旨です。発表機会増やして喋るの慣れたいですね...😅

他の参加者のLTも面白いものが多く盛り上がってしまい時間がキツキツになってしまいましたw 5分でまとめるのも中々大変。

懇親会

www.hotpepper.jp

www.hotpepper.jp

安定のパパロクと丸二。チーズダッカルビ美味しかった。Amazon Primeのオススメアニメ情報や、キャンプはいいぞって話、Effective *シリーズの話をしていた気がします。

途中でラズパイが出てきて、にぼしさんもIoTやりましょうよ〜って誘われました。ちょっと興味はあるけど手を出せてない...w

来月はLT大会のはず。