JAWS DAYS 2019に行ってきた
ランチセッションも含め、懇親会まで7時間ほぼ休みなしのセッション! 午前は多少空席あったけど、午後はほぼどのセッションも満員で立ち見が出るくらいの大盛況。
スライドはここのページにまとめてくれています(多謝)
https://qiita.com/hayao_k/items/91c19480948f26b71705
子育てで覚える AWS Organizations 〜ITエンジニア英才教育〜
AWS Organizationsのセッション。 子供にAWSを使って自由に勉強させるというシナリオで、AWS Organizationsを紹介。 AWSアカウントをポンと渡したいけど、クレカの情報は渡したくない。 IAMだけ渡すとAWSを自由に使ってる感がない Organizationを使って事由に操作させつつも制限をかけたりトレースできるようにする方法。
- AWS Organizationsを使うと、カードなしでAWSアカウントが作れる
- カードが登録されてるアカウント(マスター)は必要
- 組織は階層化でき、徐々に権限を狭めていくようなことも可能
- マスターの組織から、子の組織で利用可能なマーケットプレイス商品をフィルタリングできる
- Cloud Trailを使うことで、子の組織のアカウントで行われた操作をトレースできる
- マスターの組織からでないとCloud Trailを無効にできないので、こっそり操作するようなことは出来ない
- Resource Access Managerを使うことで、親子のオーガニでVPCのサブネットを共有できる
- 会社のAWS運用でも、事業部単位にオーガニを作成し、自由に使ってもらうことが出来る
- オーガニ間のデータ共有は、S3バケットでやることを推奨
RDBリファクタリングと異種間DB移行の戦い – Amazon DMSを使った止めずにリファクタリングする手法
データベースのリファクタリングのお話。 データベースの寿命はアプリケーションより長いため、データベースのリファクタリングは重要。 でも、アプリやバッチも必ず直さないといけないからコストがかかる。
- 非正規化はSelectのパフォーマンスは向上するが、Insert・Updateのパフォーマンスは下がる
- データベースリファクタリングという本があるが、日本語版は今は出版されてない・・・
- Aurora(MySQL)に書く → RDSのPostgresにデータをコピー(MySQLと同じの古いスキーマ) → データ作成時のトリガーで、新スキーマにリファクタリング
AuroraとPostgresはAmazonDMSで接続
- テーブル単位でデータを取得、ルールで加工することもできる
- テーブル名やカラム名の違いを対応可能
更新頻度が高いとDMSが2〜3秒くらい遅延する
- 参照をAPIにして、リアルタイム性が必要なものはAuroraを参照する
- DMSの問題点
- DMSがローカルで用意できない
- DMSが単一障害点
- AuroraのURLが変わると止まる
- トリガー失敗でDMSが止まる
- DMSのタスク上限
- 元々DMSは一時的に利用するツール
- 根底に据えるのは悪手
- 予め使用する期間や目的を決めておく
- 手を動かしたものだけが世界を変える
金融APIでAWSを使う上での利点と欠点
カブドットコムのAWS刷新。 証券取引システムを構築したい企業のために、APIとインフラを提供する。 データはオンプレにあり、AWSでAPIを提供
- Cognite
- API Gateway
- レート、バースト、クウォーターが便利
- ただし、再作成時カスタムドメインの設定に時間がかかる(数時間)
- 認可はアカウント、ウォレット、注文で分けている
- APIの連携ではなく、顧客のVPCにプライベートリンクで接続する事例もある
- Transit Gatewayを利用する
EC2からKubernetesへの移行をセキュリティ/モニタリングから考える
Freeeの事例 金融機関やクレカの情報だけでなく、法人向けサービスは生の経営情報を取り扱っていると同じで、セキュリティを非常に重要視している。
- サイバーキルチェーン
- 攻撃者の攻略ルート、攻撃の段階を想定して対策する
- AWSの責任共有モデルの考え方では、EC2に潜入されたらユーザーの対策
- VPCフローログでrejectのログを取る
- 攻撃者は内部構造を知らないため、探索している可能性がある
- セキュリティグループでアウトバウンドをanyにしない(外に情報を出せなくする)
- AWS WAFだと、ペイロードが見れないため情報が不足。WafCharmを導入。
- DeepSecurityのログはシスログを利用
- SQS連携は、トレンドマイクロのネットワーク通ってから通知するため20分ほどかかる
- Amazon GuardDutyはポートスキャンとか検知してくれるは数時間かかる
- DNSクエリのログはとってくれないので自分で取らないとダメ
- EKSはDeepSecurityが使える
- k8s内の内部探索はSysdigで検知
AWS x JAMStack で構築・運用するサーバーレスなWeb Front
- JAMStackはJavaScript,API,MarkUpの頭文字
- サイトジェネレーターはGatsbyが人気。Reactベース
- アプリ系としては、Nextjs
- AWSではAPI Gateway,Appsync,DynamoDB,Lambdaとか
- デプロイはCodeBuild
- https://dependabot.com/
見せてやろう…Serverlessの本当の力を…!!
- マイクロサービスは複雑化させない
- 依存関係の向きを揃える
- 書き込みと読み込みで、同じデータを取り扱う必要はない
- 非同期処理をベースに設計する
- 指示して待ってる(同期)なら、自分でやれ
reInvent2018のセッション
非同期処理の利点
- 課題
- エラーハンドリング
*リトライ可能なエラーはリトライ。
- リトライできないエラーをどうするか
- エラーハンドリング
*リトライ可能なエラーはリトライ。
- API GatewayのWebSocketはただのマネージドなWebSocketではない
- 非同期+ポーリングの構築はツライ
- 接続に対してConnectionIDが振られる
- ConnectionIDを使い、全く別のLambda関数からクライアントにデータが投げれる
- 途中でエラーになった場合、エラーが発生した関数からClientに応答を返せる
Kubernetes on AWS/EKSベストプラクティス
ベストプラクティスは移り変わる。 このベストプラクティスは現時点(EKS Tokyoリージョンオープン)のもの。
- EKSはManagedなControlPlaneを提供する
- GKEほど全部はやってくれない
- 小さく始めるなら、CloudWatch Logs、Elasticsearch
- メトリクスはPrometheus
- 分散トレーシングはX-Ray
- ツールはeksctl、terraform-aws-eksがおすすめ
eksctlはプロダクションレディのクラスタも作れる
- Cluster as a code
ツール紹介は大量すぎるので元スライドで・・・
EKSは造り込みを減らしたいときに採用すべき
- ECSでもスケールはできる。数千サーバーの事例あり。でも、作り込みが多い。
- 最新が使いたい、eksが信用できない場合はセルフマネージ
- cloudwatchはレートリミットと料金が厳しい。特にメトリクス。
運用のコツ
- 敷居の高さをカバー
- 必ず相談窓口をおく。(代わりに運用をするチームではない)
- 新規開発・移行・デプロイに関するドキュメントの整備
- リファレンス実装を提供
- blast redius(爆発半径)はちいさく
- 標準機能でも使わないほうがいいものがある
- クラスタのアップデートは失敗する可能性がある
- ノード監視をサボらない
- 時刻同期のずれとか見張る
- kube-node-initで初期設定ができる
- k8sにロックインされないようにする
- S3とかAWSのサービスはきちんと使う
まとめ
あの参加人数を、人数に対して広いとは言えない会場で運営していたスタッフさんに感謝。 内容は消化不良を起こすくらい満漢全席でした。
OpenJDK11でStruts 1.3.10を動かす
酔っぱらった勢いでやった。今は反省していない。
用意したもの
OpenJDK 11.0.1
JDK 11.0.1 GA Release
StrutsといえばTomcat!!
何も考えずにapache-tomcat-9.0.12を用意
IDEはもちろんEclipse!
最新のEclipse SimRelをダウンロード!
IDEA?何それ?
Strutsはサンプルアプリをダウンロード
http://ftp.jaist.ac.jp/pub/apache/struts/1.3.10/struts-1.3.10-apps.zip
もうStruts1なんて覚えてないよ・・・
結果とか
懐かしい画面!10年くらい前によく見たわー!
なんか動いた!!
デモを動かしてもある程度は動く!
まとめ
- MavenもGradleも使ってないプロジェクト久々に触った
- Struts 1はいい加減卒業しよう
- BorderBreak、Wonderland Warsはいいゲーム
JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント」に行ってきたメモ
最初に
↓を必ず読もう
JDK 11リリースなので改めて「新しいJDKリリースモデル解説(サマリー&アップデート)」 by 伊藤 敬さん
スライドは↓↓↓
Oracle JDK
- 前々からアナウンスされていた商用ライセンス版
- だけじゃなく、社内もしくは個人での開発・テスト・デモであれば無償利用可能(OTNLAライセンス)
- OTNからダウンロードできる
- OTNLAライセンス版も3年間のアップデートが提供される(・・・かもしれない)
- まだ検討中
- 商用ライセンスを個人で買う手段は現在用意中
Oracle OpenJDK
その他
- 10/16に11.0.1がリリース予定
- リリース情報はこれからもOpenJDK
- リリースドキュメントはしっかり見て!!
Java 11 : サポートとVM機能 編 by 久保田 祐史さん
スライドは↓
Introduction to Java 11: Support and JVM Features #jjug
Java11のサポートとJVMについて
- サポートは開発サポート、配信サポート、問い合わせサポートの3つ。
無償で使いたい人の結論はAdoptOpenJDKからダウンロード。最低4年間の配信サポートが得られる。
Java8のサポートが切れるまでにはJava11に移行する
4年以上のバイナリ配信サポートが欲しければ有償サポートしかない
- 外にサポートを求めてもエース級がくるとは限らない。あえてサポートを受けず、組織内でエースを育てるのもあり。
JVM
JEP 330: Launch Single-File Source-Code Programs
Javaファイルを直接実行できる。例えば、java Hoge.javaで実行できる。
- メインメソッドと1ファイルで完結するという制約あり
- Javaソースをスクリプト化できる。これが本当のJavaScript!
JEP 328: Flight Recorder
もともとJava Flight Recorderだったが、Javaが商標に引っかかるからFlight Recorderになった
ツールじゃなくてJREに組み込まれている
JEP 318: Epsilon: A No-Op Garbage Collector
メモリ監視とか行わない。なので、何も考えずに使うとOOEMが起こる。
研究や開発で使うのを想定。JITの効果測定とか(GCが邪魔しない)
JEP 333: ZGC: A Scalable Low-Latency Garbage Collector
Java11では試用版のポーズレスGC。世代別GCではないので、色々変わる。
64bit、Linux限定。
今後、クラスアンロード周りを始め、修正がガンガン入ってくる。
また、運用するためには、LinuxのLargePageとNUMA周りも気にしないとダメ。
Java 11:APIの変更点 編 by きしだなおきさん
Nestedクラスのアクセス制御
public、protected、default、private以外の5つ目のアクセス制御。ネストクラス間のprivateメンバーアクセス。
今まではコンパイルすると別クラスになるので、アクセス用のメソッドが生成されていた。
Nest Mate APIでアクセスできる
Dynamic Class Costants
Classfileフォーマットの拡張。言語やコンパイラの実装自由度、クラス読み込みが早くなる(定数の遅延実行)
Java 11ではコンパイラが未対応(?)
将来的にはstatic finalの定数とかも対象に含めたい。
Java EEとCORBAモジュールの削除
JAX-WSとかJAXBとかはMavenでライブラリ取ってくる必要あり。 CORBAはメンテナンスできる人がいなくなった?(まぁ、使ってる方がレアだし・・・?)
HTTPクライアント
Java9で入っていたHTTPクライアントがスタンダードに。
HTTP2、Reactive対応。
varの拡張
varがLambdaでも使えるように。Lambda内でアノテーションをつけるときに便利。
APIの追加
StringにisBlank、strip(全角空白対応のtrim)、Charactor.toStringにintパラメーター(キャスト不要になった)
FilesにReadString,WriteStringが追加され、小さいコードを書く時便利になった。
nullReader,nullWriterは/dev/nullみたいなもの
Path.ofはインターフェースにofメソッドを追加するという最近の流行りに追従。
Collections.toArrayにintFunctionを指定できるようになった
toArray(String[]::new)のように書ける
Streamのfilterでnotが書きやすくなった
文字列が空「じゃない」フィルターでもメソッド参照がつかえる
Thread.destroyとかstopとか削除されたAPIがある
ArrayIndexOutOfBoundsExceptionのメッセージがわかりやすくなった
JapaneseDateの新元号対応。NewEraとして入ってる
新しい元号は、12.0.1(4/25)に反映される予定
Timソートのバグが直った
静的解析ツールKeYで検出
QA
Q:Java 11でJAX-WSやJAX-Bがなくなった背景は?
A:削除の背景は開発速度の違い。Java EEの変更をSEに入れるのが大変。また、Jackarta EEになってパッケージが変わるという理由もある。
Q:年号を起動時に指定できる? A:Enumだからできない。
プロパティで年号持ってるのはjava.util.Calendarの方だった気がする(うろ覚え) #jjug
— せち (@setys0) October 9, 2018
JJUGからの案内
来月はナイトセミナーだけでなく、OracleCodeOneの報告会を予定。12月はJJUG CCC。
立て続けにイベントがあるのでみんな来てね。
修正メモ
- スライド追加
- JDK 11.0.1のリリース日が間違ってたので修正
JJUGナイトセミナー「Jakarta EE, MicroProfile, Payara が目指すもの」へ行ってきた
風邪気味の金曜日、そして週末胃腸炎。ちょっと回復したのでようやく書けた・・・。
EE4J
- Eclipseトップレベルプロジェクト。Eclipseのルールで開発する。
- SpecLead、Comitterやコントリビュータ
- 普通のOSSに近い?
- マイグレーションはだいたい80%
- CDI、JavaBatchはEE4Jに含まれない
- MicroProfileは今の所EE4Jには入ってない
- EE4Jで開発したものでも、Jakarta EEに入るとは限らない
Jakarta EE
今後のロードマップ
- 年末くらいにJava EE 8のTCKをEclipse Glassfishに通るようにする
- Jakarta EE 8の仕様を策定してTCK作る
- 極力 Java EE 8に近いものになる想定
- その後Jakarta EE 9の開発
未定のこと
- ライセンスはできるだけオープンにして欲しいとは言われてる
- しかし、EE4Jほどにはならないと思われる
- ワーキンググループに参加するためのFee
- Glassfishの扱いが未定
- リリース頻度をあげたい
- すでにある仕様の取り扱い
- 法的に持ってこれないものも多い・・・
- その場合スクラッチで構築しなければいけない
- javaxパッケージの取り扱い
Microprofile
- 2.0がリリース
- Payara MicroやOracleのHelidon等がある
- 日本ではあまり知られてない
- 海外でもまだこれからっぽい
雑感
JJUG ナイトセミナー 「Elasticsearch特集」メモ①
とりあえず、1セッション目のメモ。 2つ目はきっと明日には・・・。
Elastic Stackで始めるJavaアプリのパフォーマンス監視
スライドはこちら
Elastic Stackで始めるJavaアプリのパフォーマンス監視 / Intro Elastic Stack and Elastic APM Java - Speaker Deck
elastic社は2012年創業。アメリカとアムステルダムに ElasticsearchはCEOの奥さんのレシピ検索のために作った
Elastic Stack
Beats、LogStash、Elasticsearch、Kibanaの組み合わせ。 公式のデモもある。
Beats
Go言語で書かれた軽量データシッパー(データ収集エージェント) 収集したデータの送信先はLogstash、Kafka、Elasticsearch等 大規模(数百台)だと、Kafkaを挟むことおすすめ 簡単なフィルター(INFO以下のログは送信しないとか)はあるが、変換とかパースはLogstash 採取したいデータがあるサーバーに設置 収集対象は様々で、公式・コミュニティで40種類以上のBeatがある k8sの場合、Beats系はDaemonSetで指定。
Logstash
データ加工パイプライン 元々はBeatsの役割も兼ねていたが、JRubyで書かれているため、起動に時間がかかる、メモリを食う等で評判悪かった。
Elasticsearch
分散型、高可用性の特性を持つ全文検索エンジン Wikipediaの検索もElasticsearch
Kibana
Elasticsearchに接続する解析と分析のView
APM
Java等のアプリケーションの情報収集ができる(Javaはまだベータ版・・・) 収集の流れはAPMエージェント→APMサーバー→Elasticsearch。 ViewはKibana。
Javaアプリの実行時に-javaagentで導入する。 Springの場合、Controllerの時間とその中で発行されたSQLを収集。 中の処理の時間を取得したい場合のAPIもある。
QAとか
PacketbeatでDBのアクセス情報が取得できる。 ・クエリの種類 ・発行されたクエリ SQLを分析し、インデックス貼ってないカラムへのSELECTとかを見つけるのに役立つ MySQLであれば3306のポートをウォッチしてるだけなので、DBに手を入れる必要なし
Elastic stackをk8sで動かすのは非推奨。 コンテナはステートレスであるべき。
fluentdとLogstashは使いやすい方を使えばいい。 データ取得でBeatsを使い、fluentdに送ることもできる。
JSUG勉強会 2018年その3 LT大会に行ってきたしん!
興味深かったところをメモ
Kotlin
- IDEAのktファイルにJavaソースを貼り付けると変換してくれる?
- Dataクラスが1行で書ける
- NPEに遭遇しなくなる
- 書籍はKotlin in Actionおすすめ
バナー
Spring Bootのバナーを生成するサイトがある
Spring Boot banner.txt generator
何でも貼れるけど、エラーメッセージはやめた方がいい(新人がみたらパニックになる)
2.0でアニメーションgif対応
Spring Bootの起動を早くする話
本番では使えないけど階層型コンパイルとバイトコード検証オフで起動が早くなる IDEAで実行する場合は自動的に指定される
GraphQL
RESTに変わるAPI
でも辛いところもある
ペイロードのバリデーションでBeanValidationが使えない クライアントサイドでやれという思想らしい
エラー時に何でもかんでも500返してしまうので自前で実装
Spring MVCの外のライブラリ。 AOPとかは使えるけど、Spring MVCの機能は使えない
Spring Data JDBC
Spring Dataだけど、DBアクセスの実装は提供しない
CRUDRepositoryの実装をMyBatisとかから選択できる
デフォルトはSpringJDBC
ストラテジーを自分で定義すれば、好きなORMを使える
宣伝
SpringFest 10/31
会場は両国KFC
Spring Securitでハードウェアトークン
Web AuthorizationがW3Cで標準化
FIDOを利用して2FAとかできる
Web Authorizationはユーザーとクライアントプラットフォーム、クライアントプラットフォームとサーバーで認証が分かれるからセキュア
SpringSecurityで実装したのは↓
まとめ
ちょっとしたハックから普段の工夫まで色々な話が聞けてよかったです
来月もJSUG勉強会は開催予定なので楽しみ
JJUG ナイトセミナー 「Java SE 10 / JDK10リリース特集」に行ってきた
花粉症つらい・・・
お知らせ
JavaDayTokyo2018
5/17(木)に決定。
キーノートはMark Reinhold(初来日?)
登録サイトは近日オープン(多分、今週後半くらいとのこと)
JJUG CCC 2018 CfP募集中
JDKリリースモデル変更について(おさらい) by 伊藤 敬さん(Oracle)
Java 10はおそらく初めて予定通りリリースされたJava。
リリースノートには削除予定のAPIも記載されているので確認しておくこと。
JDK10の追加機能解説 - JEP286/ローカル変数の型省略(var記法)を中心に
ローカル変数の型推論
冗長な変数の型の宣言をvarに置き換えられる。
動的言語になるわけじゃない。
メソッドの引数・戻り値には使えない。
また、匿名クラスにも使えない。
varは予約語ではないキーワード。
そのかわり、クラスやインターフェースでは使えなくなった。
(非互換だけど、流石に使ってる人いないよね・・・)
変数やフィールド、メソッドでは使えるからこれはOK。(絶対やるなよ的な・・・)
var var = var();
varの使いどころは、読みやすさが向上する箇所。
Javaの書きやすさより読みやすさを重視している文化は破っちゃダメ。
型をタイプするのが面倒とかそんな理由で使ってはダメ。
IDEがなくても理解できる状態で使うべき。
マウスポインタを上に乗っければわかるはNG。
varのガイドラインも出ている。
GCの変更
G1のパラレルFullGCが追加された。
でも、G1GCを使っている時にFull GCを起こした時点で負けなので、恩恵を受けないような運用が理想。
Garbage-Collector Interfaceの追加で、GCをモジュールとして追加削除できるようになる。
ZGC
https://wiki.openjdk.java.net/display/zgc/Main
4TB(!)までのヒープに対応。
ヒープサイズに関わりなく、Stop The Worldを10ms以下に抑えるのがゴール。
Java 10でぼくたちの生活は どうかわるの?
今まではすぐにでも欲しい便利な機能でも、追加されるのが3年後だった。
それが比較的すぐに手に入る。
でも、アップデートに追従するコストが大変。
新しいバージョンへの対応方法
新しいバージョンの変更箇所は、以下の
- JEPから新機能
- 最新のJRSからAPIの変更点
- リリースノートから非互換
STSで非推奨化・削除と続くと、LTSから次のLTSにいきなり移った時に、サイレント削除が発生する可能性がある
Class-Data Sharing
元々はコマーシャル機能。
クラスデータを複数のプロセスで共有する。
バッチとかのプロセスをたくさん起動するアプリで利用できる
読み込むクラスの量が多いほど効果的