
2025.03.07
メール対応担当の8割以上が「カスハラ被害」に クレームのハード化・長期化を防ぐ4つの対策
AWSとGo言語とコンテナによる、証券プラットフォーム(全1記事)
提供:株式会社Finatext
リンクをコピー
記事をブックマーク
石橋淳志氏(以下、石橋):こんばんは。今日は『AWSとGo言語とコンテナによる証券プラットフォーム』というテーマでお話しします。まずは自己紹介させていただきます。私は石橋といいます。大学在学中にフィナテキストの創業に関わって、かれこれ5年くらいになります。
日頃Go言語を使っていて、terraformをAWSのインフラのプロビジョニングに使っていることもあって、terraform-provider-awsにはいろいろコミットしています。
次に会社紹介をさせていただきます。
フィナテキストはReinvent Finance as a service、金融をサービスとして再発明するをビジョンとしてやっているFinTech企業です。
金融サービスをtoCやBtoBtoCで出すサービス開発をメインとするフィナテキスト。去年パブリックにローンチした、証券システムのBaaSを提供しているスマートプラス。そしてビッグデータの解析をメインとしているナウキャストという会社があり、三位一体やっています。
従来の金融の証券サービスは発注部分からアプリケーションまで完全にバンドルされて、1つの証券会社が一気通貫で出すようなものが多かったです。
最近ではSNSやニュースサイトを見ている人もいれば、企業分析をして投資する人、または株式優待をメインにする人、テクニカルをメインにする人もいます。
入口はいろんなかたちで入ることができ、その中で自分にあったサービス、取引の仕方でできるようになっていければいいなということで、執行部分やバックオフィス部分をバンドリングして、その上のアプリケーションを自由に作れるようにしようというのがBaaS構想です。今日はこちらをメインでお話させていただきます。
今日はこのBaaSの中で特徴となる部分をいくつか紹介します。
1つは今日のタイトルのとおり、ほぼすべてのサービスをコンテナで稼働させている点。そして2つ目は認証サービスを切り出している点です。
最後に、これは聞きなれない名前かもしれませんが、AWSが専用線だったり、オンプレからネットワークの繋ぎ込み用として出してるDirect Connectというサービスがあります。これによって外接環境の繋ぎ込みを行なっています。
それぞれ1つずつ見ていきます。まずコンテナの部分に関してです。
大枠としてはRoute53、DNSでサブドメインレベルでサービスのネームスペースを切ってまして、ALBに向けています。リクエストはそのALBに集約しており、これがゲートウェイのようになっていて、Host Headerをもとに後ろのターゲットグループ、ECSに振り分けています。そしてそれぞれの中でDockerコンテナが動いています。
こういうサービスがマイクロサービス化した際の問題として、ログの集約があります。そこはawslogsというログドライバを使ってCloudWatchに流しています。また、ECS上でcronの実行も当然ありますので、そこはCloudWatch Eventsによってマネージドで運用しています。
Go言語によるコンテナ運用のいいところとして、ECSによるオートヒーリングとクラスタのAuto Scaling groupによる構成によって簡単に潰せる環境になっているのが嬉しい点です。
例えば2月にDockerコンテナの脆弱性がありました。サーバー台数としてはだいたい100台くらい動いています。その際には、脆弱性を解消したイメージに更新するのに1日あれば十分でした。
また侵入などがあったとしても、インシデントレスポンスとしてすぐにサービスを隔離してもメインのサービスのアベイラビリティを維持できるのが嬉しいところです。
先ほどのCloudWatch Logsにログを集約するところなんですが、そこはメトリクスフィスターやKinesisを介して、アプリケーションのログを解析して、オンラインにレスポンスできるのが嬉しいポイントです。AWSでいうとexport taskというものがあり、CloudWatch LogsからS3にパーティションを分けて吐き出せるので、あとでAthenaなどで分析できるのもいいところです。
あとcron処理をCloudWatch Eventsでやってると副次的に出てきたのも嬉しい点として、AWSのAPIで今サービス全体として動いているcron jobが何時に何が実行されてみたいなことの一覧化が簡単です。
またGoを使うことでDockerのマルチステージビルドという機能をうまく活用できます。ビルドステージにのみGoの環境があって、そこで作成されたバイナリをランタイムステージの薄いalpineで実行する、といったような感じです。
Goだとこれがほぼテンプレートして書けて、イメージサイズも10MBくらい。ECRだったりプッシュされた状態では、5MBくらいのかなり小さいサイズでキープできているのが嬉しいところです。その、結果プロセスを走らせたり、フェイルオーバーするときのオーバーヘッドもすごく小さくなるので、そのあたりもいいところだと思います。
次に認証サービスの切り出しについてです。マイクロサービスとしてサービスがいくつかあります。認証をどう解決しているのかというと、今はCognitoを使ってクライアントにjwtを吐き出して、それを各サービスがデコード、バリデーションして使っています。
認証はCognitoのOpenID Connectで委譲しています。認可のほうは現状内部的に認可サービスをプロトコルとしてはgRPCを使って各サービスから問い合わせてやっています。
なぜgRPCを使っているかと言うと、スキーマドリブンでやりたかったのが一番大きなところです。というのも認可サービスは1つあって、ほとんど今後作っていくサービスやアプリケーションは認可サービスを使うクライアントになります。
その結果、gRPCのスキーマからクライアントコードをジェネレートできるのはすごく嬉しい点なので、gRPCを選定しました。あとは単純に認可のところでパフォーマンスも早いです。
これは現時点ではやってないのですが、Cognitoを使うとCognitoとLambdaだったりで、サーバーレスでパスワードレスでの認証も簡単にできるので、いろいろ遊んでみるとおもしろいかと思います。
ただ、あらゆるサービスでOpenID Connectなどの認証の委譲が適しているかと言うとけっこう微妙です。そこは各自のサービスに要件が合うかどうかを選びながら選択するといいかなと思います。
最後にDirect Connectによる外接環境です。金融だと発注や市場のデータを取ってくるところが、TCP上でHTTPではなく独自の仕様でバイナリストリームを解析してやるみたいなことがけっこうあるんですね。
発注だと一応FIXと呼ばれる、Financial Information eXchangeと言われる発注のプロトコルがあって、注文のやり取りはFIXを用います。その結果専用線での接続を余儀なくされる場合があります。ただなんとかそこをAWS上でやりたかったので、今回はDirect Connectを使ってやっています。
ほかにも金融系だとSFTPを使うことがありますが、ここは最近出たAWS Transferが助かるという印象があるんですが、現状ちょっと高いので、なかなか導入しきれていません。
最近なのですが、金融機関相手でもS3でのファイル連携をやってもいいところも出てきていて、そこは嬉しいです。AWSでPrivate LinkというほかのAWSアカウントと実際にVPC内部にネットワークインターフェイスがあるように接続できるサービスがあります。それが将来的にできるとDirect Connectを外すことができます。
嬉しい部分がある一方で、AWSやGCPがインターネットっぽくなっていくので果たしてそれ自体はどうなのか? というのはさておき。
最後にまとめです。コンテナオーケストレーションはとにかくいいです。ここに関しては正直個人的にはとにかく脳死的にコンテナオーケストレーションでどう運用するかを考えたほうがいいかなと思います。
というのも、コンテナ化することによってある程度ステートレスにアプリケーションを作る必要が出てきます。そこでアプリケーションをどう作っていくかというロジックで制約をかけて、全体としては技術負債をあまり生まないかたちになるのかなと思います。
あとは、認証・認可のところはCognitoなどを使うとサーバーレスでいろいろできておもしろいんですが、ここはサービスの実際に作る要件に合わせて選択したほうがいいと思います。
また、ここは大局的には微妙なのかもしれませんが、個人的には局所的にAWSやGCPの導入がいろいろな金融機関で進んで、クラウド上での接続が盛んにできるようになるといいなと思います。
最後に、フィナテキストは金融に興味のあるエンジニアの方を常に募集しています。このあとの懇親会でも興味ある方はぜひ声をかけてください。以上です。ありがとうございました。
(会場拍手)
司会者:ありがとうございました。続いて質疑応答に移りたいと思います。どなたか質問のある方はいらっしゃいますか?
(会場挙手)
質問者1:お話ありがとうございました。最初にS3でログを溜めておけばAthenaでも集計できて便利、みたいな話をされていたと思うんですが、実際にAthenaでなにか分析や集計をされているかというのと、S3のフォーマットに何を選んでいらっしゃるか教えていただけたらと思います。
石橋:現状、基本的にJSONでとりあえず出しとけという感じです。現状Athenaで分析とまではなかなかいっていなくて、どちらかというと障害やデータ不整合、エラーがあったときに過去分を遡れるような感じで使っています。
最近だとCloudWatch Logsのほうにメトリクスもついたので、直近分に関してはそちらで引くとすごく楽です。あとは統計データの可視化もできるのもすごく便利ですね。
質問者1:ありがとうございます。
司会者:ほかに質問ある方いらっしゃいますでしょうか?
(会場挙手)
質問者2:お話ありがとうございます。途中から来たので最初に話していたかもしれませんが、バックエンドってどんな感じになっているんでしょうか?
石橋:バックエンドというのはどのへんをイメージされていますか?
質問者2:あ、ごめんなさい。データストアという意味合いです。
石橋:基本AuroraかDynamoですね。
質問者2:Dynamoはトランザクションが付く前はどうやって使い分けていたのでしょうか?
石橋:そういう意味で言うとトランザクションがほしいところはAuroraを使っています。ほぼ1サービス1テーブルでいいところでは、気軽に作れるのでDynamoを使ってます。
あとは市場からのプライスデータなどはすごい量が来ます。朝9時頭には秒間数万件みたいなやつはDynamoの、とりあえずお金を払えばスケールを上げられることをうまく使いつつ、アプリケーションまである程度シャーディングはコントロールしてやっている感じです。
質問者2:ありがとうございます。
司会者:ありがとうございます。他にいかがでしょうか?
(会場挙手)
質問者3:Cognitoを使っていることでしたが、Cognitoを使っているサービスってあまり見ないので、ちょっとめずらしいなと思ったんですけれども。
この中でも、認証でCognitoを使いつつ、認可のサービスでは独自のサービスを用意しているということで、Cognitoを使うときの、これはマネージドで嬉しいけれども、なにかつらみがありましたら教えてください。
石橋:Cognitoでは、作った後に変更できないパラメータがけっこうあります。例えばユーザーネームやEmailといった属性があるんですが、1回作ったのちにユーザーネームないしEmailでのログインも可能にするみたいな変更ができなかったりします。
将来的にはできるようになるのかもしれませんが、そこを将来別のかたちでのログインをやりたいときには困る可能性はあるかもしれません。
質問者3:なるほど。参考になりました。ありがとうございます。
司会者:石橋さんありがとうございました。拍手をお願いします。
(会場拍手)
株式会社Finatext
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由