【イベントレポート】Azure・AWSクラウド活用エンジニア本音Talk

f:id:pcads_media:20210520125703j:plain

こんにちは!TECH Street編集部です!

今回は2021年4月22日(木)に開催した、「 【Azure | AWS】活用エンジニア本音Talk
〜サーバレスアーキテクチャの「特徴」と「ここが好き!」のイベントレポートお届けいたします!

今回は3名に登壇いただきました!

尾山 雅史さん/パーソルキャリア株式会社
佐藤 力さん/富⼠フイルムソフトウエア株式会社
小島 慧さん/株式会社ベネッセi-キャリア

各社の活用事例をご紹介いただいた後、それぞれのクラウドサービスについての本音トークという構成でお届けいたしました。早速ご紹介してまいります!

自社サービス(dodaキャンパス)におけるAWSサーバーレス活用事例のご紹介

ベネッセi-キャリアは学生向けサービスに強みを持つベネッセと、社会人向けサービスに強みを持つパーソルキャリアが合弁で設立した会社。今回、AWSの活用事例としてご紹介いただいた「dodaキャンパス」は、「働く」と「学ぶ」をつなぐ、というビジョンを掲げた会社として、新卒採用の課題解決に向けてリリースしたサービス。

f:id:pcads_media:20210525200834p:plain

dodaキャンパスには、様々な学生のデータが登録されており、企業は、そのデータを元に学生をスカウトするような形で学生にアプローチすることができます。この、dodaキャンパスの基盤となっているのがAWSです。

f:id:pcads_media:20210525200955p:plain

こちらが、dodaキャンパスのアーキテクチャ図。まず、Amazon Cognitoは、学生や企業担当者がdodaキャンパスにログインした際の認証処理に使用。また、Web上の静的コンテンツの要求は、Amazon CloudFrontが応答し、Amazon S3がオリジンサーバーとして背後に存在するような形になっています。動的コンテンツの要求は、Amazon API Gateway経由でAmazon Lambdaが処理をします。

また、dodaキャンパスには数万人規模の学生の情報がデータベースとして保管されていますが、そのメインデータベースとしてAmazon DynamoDBを活用。ただし、Amazon DynamoDBは高速に処理ができるものの、複雑なクエリの処理はあまり得意ではないので、複雑な処理が必要な場合は、Amazon Elasticsearch Serviceを活用。事業グロースのためのデータ分析基盤としてはAmazon AthenaとAmazon Glueを使用しているとのこと!

dodaキャンパスの開発にAWSサーバーレスを選んだ理由は下記。

・インフラ管理から解放される
・実行時間だけの課金だから安い
・スケール(拡大縮小)もAWSにお任せ
・世の中にナレッジが多い

特に決定的な理由は「世の中にナレッジが多い」こと。dodaキャンパスは2016年から開発を開始しましたが、当時サーバーレスで開発を進めるにあたり、構築例や、問題の解決策なども多くシェアされていた=世の中に一番ナレッジが多かったのがAWSだったそう

サーバーレスは非常に便利ではありますが、サーバーレスならではの苦労もあったそうです…!ご苦労された点についてもご紹介いただきました!

・Lambdaのランタイムのバージョンをあげたら関連してコンテナの実行環境にも変更があり、想定外の変化が起きて色々と困った
・マネージドサービスであるがゆえに、問題発生時の調査範囲が限定的で苦労するときがある。抽象化が高まると管理できる範囲が狭くなる。
・コスト見積もりが難しい
・IaaSの方が見積もりは単純で予測しやすい
・手元の開発環境でサーバーレスと全く同じ環境を作るのが難しい。データベースなどは特に難しい。

良いところもあれば、苦労されたところもある…!現場のリアルな声が聞こえてきますね。この辺りの苦労話も、本音トークで深掘りさせていただきます!

 

サーバーレス初心者が本番システム適用する時に気をつけるべき3つのこと

佐藤さんからは、2006年に立ち上げたIMAGE WORKSという、写真・デザインのクラウドサービスの開発におけるご経験をお話いただきました!

f:id:pcads_media:20210525201115p:plain

IMAGE WORKSは国内のリーディングカンパニーを中心に2000サイト以上に利用され、2016年の「伊勢・志摩サミット」「G7 広島外相会合」でも採用されているサービスなんです。

f:id:pcads_media:20210525201205p:plain

こちらが、IMAGE WORKSのシステム構成。元々は右側にあるオンプレのデータセンターからスタートしたサービスで、10年くらいはこのシステム構成で運用されていたそう。世の中の開発スピードについていくため、2016年ごろにクラウドシフトを開始。オンプレで作ったデータと、クラウド型のデータのハイブリッド型で進めていたため、データ同期を取る必要があり、その部分にサーバーレスをメインで使い始めました。

この構成の特徴は、IaaSのVMを使わず完全にフルパースでクラウドの基盤を汲み上げている点。2020年11月にフルクラウド化を実現し、現在は全てAzure上でサービスを展開されています。こちらの開発の中で気づいた気をつけた方がいいポイントをご共有いただきました!

サーバーレスでも資源は有限、セッション数に要注意

サーバーレスといっても結局はHTTP接続、物理サーバーの限界を超えた接続数は無理があることを理解する必要あり。特に、SDKの使い方などはよく読んでインスタンスの使い回しをしないと、コネクションの張りすぎとなってしまい、コードレビューなどでエラーを見つけるのが難しく、本番に適用して初めて問題が出てくる、なんてこともあるそうなので注意が必要です!

特に、データベースとのコネクション数は重要で、下記の点は特に注意が必要。

・SQL DBなどのRDBとCRUDにサーバーレスを適用している場合は同時コネクション数に留意が必要
・コネクション数≒コストの側面もある
・Azure Cosmos DBなどのNoSQL DBを利用する手もある

サーバーレス基盤よりもトリガー部分に気をつけろ

スケールアウト/インの仕組みはちゃんと動きますが、障害は別の箇所で起こることが多いのだとか…!問題になることが多いのはトリガー部分、キュートリガー、ストレージトリガーなどのため、ここは要注意。トリガーでの障害は原因切り分けも復旧も大変なのだそうです…!

実際の事例として、大量にキューを積んだことで、フリーズしてしまったことがあるのだとか。Azureの場合はキューサービスも複数あり、用途やボリュームに応じてサービスとプランを選ぶ必要ありです。

サブシステムの非同期設計ちゃんとできていますか?

f:id:pcads_media:20210525201301p:plain

どのような形であれ、長く運用していると、障害はどこかで必ず起こります。その時、非同期設計がちゃんとできていたかが問われるそうです。佐藤さんたちは、その点がちゃんとできていなかったため、苦労されたそう。

ここでキーワードになったのが「冪統制を担保して、ステートレスにする」という言葉。サーバーレスなので、並列処理となり追い越しなどが発生します。先にリクエストしたからといって先にレスポンスが返ってくるとは限らず、HTTPプロトコルなのでエラーも発生します。それらを想定した設計になっている必要がありますが、これがなかなか難しかったのだそうです。

こちらも非常に具体的なナレッジのシェアをいただきました!

▼資料

 

ここからは、ベネッセi-キャリアのエンジニア、小島さんにもご参加いただいて参加者の方の疑問に答えながらクラウドサービス本音トークをしていきます!

f:id:pcads_media:20210525203514j:plain

(Q)クラウド選定時にAWSとAzure双方が候補に挙がったと思いますが、現在選択したものを採用した一番の決め手は何だったのでしょうか。

尾山さん:検討当時はサーバーレスといえばAWSという空気がありましたので、その時はAzureがそれほど候補に挙がっていなかったですね。また、先ほども佐藤さんからありましたが、Azureはスーパーエンジニアがいないと使えない、というようなものだったので、流れでAWSとなりました。

佐藤さん:実は会社事情が大きいです。当時、AWSとAzure両方で契約が進んでいましたが、AWSはデータのセキュリティ権限の部分で一部議論が重ねられていたような背景があり、結果としてAzure一択という形になりました。

(Q)社内で採用されているクラウドプラットフォームは複数ですか?それとも1つですか?もし何かしらの理由がある場合はそれも聞いてみたいです。

尾山さん:パーソルキャリアとしてはAWSとAzure、GCP、オラクルを使っています。使い分け方ですが、情報セキュリティ的にしっかり守りたいところはAWS、データベースを使うものはAzure、新しいチャレンジングな事業ではGCPを使う、といった形で使い分けています。

佐藤さん:会社全体としてはマルチクラウドとなっていますが、部署単位では学習コストを下げるために統一しています。

(Q)どこで情報収集していますか?あと、どうやって勉強していますか

小島さん:AWSのところでいうと、実務がいちばんの勉強になっています。それ以外だと、SNSやAWSの公式ブログなどで定期的にチェックしています。

佐藤さん:いかにレジェンドと繋がるか、というところですかね。第一歩はこういったイベントに出てみることだと思います。自分にとって勉強になるな、と思える人に出会えると思うので、そういう人のSNSをフォローして、そこからレジェンドに繋がるっていうのが大事かなと思います。

(Q)ここがAWSより優れている、Azureより優れている。的なことを聞きたいです。ケンカしない程度に

小島さん:あまり比較しようと思ったことがないのですが、AWSはシェアが大きくて情報が転がってきやすいところがありますかね。そういう意味では開発がしやすく、困った時の情報が仕入れやすいところがあると思います。

佐藤さん:本質的には違いはないのではないかと思っています。なので、やはりラーニングコストが少ないものを選択するのがいいのではないかと思っています。なぜ、Azureを使っているかというと、初期の段階からAzureを使っていたのでMicrosoftからのサポートを厚く受けられているところがありますかね。そういった意味で、今の所浮気する理由がない、という感じです。

(Q)公式/非公式ドキュメントの充実度のわかりやすさはどのように評価していますか?

f:id:pcads_media:20210525203734j:plain

尾山さん:僕の所感では、AWSの公式ドキュメントはわかりにくいと思いますね。ここ数年で、人のサポートが充実してきたなとは感じています。

佐藤さん:わかりやすいか、というとわかりにくいかもしれないですが、更新頻度は高いですね。日本語よりも英語の方がわかりやすいところもありますね。

(Q)サポートへの満足度はどうですか?

尾山さん:AWSは教育業界向けのソリューションアーキテクトのサポートが1年ついて、それを利用しながら試行錯誤をしたようです。

佐藤さん:プレミアムサポートのようなサービスを契約するとMicrosoftからサポートを受けられます。

(Q)リージョン障害起きた際、Lambdaなど一部サービス利用できなくなると思いますが、dodaキャンパスはどうしているのですか。

小島さん:Lambdaそのものがダメだったという障害は直近起きていないのですが、もし起きた場合はログから復旧をして利用者にお知らせを出して、という対応になってしまうと思いますね。

佐藤さん:基本的にはディザスターの仕組みを別リージョンに作っていて、一番上段のトラフィックマネージャーというサービスがあるのですが、それを使って何か片方のリージョンで問題があれば切り替えるという仕組みを構築していますね。

(Q)バックエンドやバックグラウンドとなるアプリケーションの部分は、コンテナを使用されていると想定しておりますが、どのようなアーキテクチャ(ECSかEKSか)でしょうか?

尾山さん:コンテナは使っていないです。Lambdaは起動するとバックグラウンドで使用されているコンテナが一瞬立ち上がるような形なのですが、我々としてはコンテナを使ってはいないです。

佐藤さん:我々もコンテナは使っていませんね。

(Q)フルクラウド化を進めるにあたり、反対派の主張や意見はどのようなものがあがったのでしょうか。

佐藤さん:めちゃくちゃ反対されました。基本的には誰も賛成してくれなかった状況でしたが、押し通した形ですね。もともとやり始めた時には、オンプレでは立ち行かなくなっていた状況、かつ、これといった解決策が出てこないような状況でした。そんな中、たまたま外部イベントで基幹系システムのお話をされている方に出会い、直感的に行けるのではと思い、その登壇者の方に相談して進め始めました。その登壇者の方がAzureのレガシーの方だったのですよね。

(Q)痛い目…どんなことがありましたか?

小島さん:一番大きい障害になってしまったのは、AWSのLambdaやAPI Gateway周りをラップしているライブラリーを使って運用していたのですが、そこのブラックボックスな部分が原因で、権限周りの設定がごっそり消えてしまったことが一度ありました。

佐藤さん:一番大きかったのは、初期、追い越しオンプレがまだあってクラウドと同居しているシステム構成だった時、オンプレのDBが更新されるとクラウドのDBが更新されるという仕組みだったのですが、古い更新が追い越しをしてしまい、データを正しくない情報に上書きされてしまったことがあります。その際見られてはいけない情報が見られてしまう、という状況になってしまったところですかね。

(Q)NASのバックアップにS3を利用することに留まっています。 正直サービスの種類が多くて把握しきれていません。 何パターンか組み合わせてパッケージとして提示して欲しいと思うことがありますが、的外れでしょうか。

尾山さん:全然的外れではないと思います。我々も、把握しきれないので、常日頃からAWSのソリューションアーキテクトにそのまま相談して、最適な解決策を提案してもらうようにしています。

佐藤さん:私は逆に、ベストを探すのをやめましたね。ベストを探そうとするから見つからないのであって、別に自分たちがやりたい要件を満たしていればいい、と考えるようになりました。

(Q)お二人それぞれの「しいて言うならいまのサーバーレス環境でここはなんとかならないかなあ」というポイントありますか?

尾山さん:コストが見えづらいところですかね。日本の会社特有なのかもしれませんが請求書の額がエンジニアに開示されないことが多く、エンジニアはコストを気にせず開発を進めるのですが、コストの意識は必要だと思いますね。

小島さん:サーバーレスで抽象度が上がっていくと、よくわからないエラーが起きたとき我々ではわからないのでサポートに問い合わせをしないといけない、ということが発生することですかね。

佐藤さん:結局サーバーレスって従量課金みたいな形なので、コスト面で言うとそれより箱買いした方が安いですよね。我々の場合、常に一定量使い、ある時間だけ上振れするピークがある形なので、本質的には上振れしている部分だけサーバーレスを使いたいと言うのが本音ですが、そういった組み方がなかなか難しいですね。

(Q)社内でクラウド移行をするにあたって、メンバーの教育ってどうされましたか? 元からできる方をメンバーにしたのでしょうか?

尾山さん:基本的にはある程度経験がある人を採用してきましたが、入ってから実務を通して勉強することも大事なので、メンバー同士で自発的に勉強会をするよう促しています。

佐藤さん:経験ゼロのメンバーからスタートしたので、最初はAzureの技術パートナーの会社に技術コンサルとして入っていただき、常駐してもらっていました。サンプルコードを書いて、みんなでそれを見ながら書いて立ち上げると言う形でしたね。

(Q)社内ベンチャーのエンジニアならではの良い点・辛い点をちょっと聞いてみたいです。また、社内ベンチャーってどんなことやってらっしゃるのか気になります

佐藤さん:富士フイルムのグループ会社なので、基本的には本社から落ちてきたものをやるのですが、自分たちで決めてチャレンジすることができることですかね。ある程度の安定を得ながらベンチャーで働いているような感覚があります。辛い点は、この会社にいる中ではメインストリームではないので、端っこの方で仕事していると言う感覚を感じることはありますね。

私の立場(事業責任者)になるとそんな華々しいことばかりではなく、資金繰りに奔走する仕事も多いです。事業計画を立て、実績と将来性を経営陣にプレゼンして予算承認を得るというのに結構パワーを割かれています。
それでも銀行から融資を受けるとかに比べれば遙かにハードルは低いと思ってやっています。将来的に起業したいと考えている人には非常に良い経験になるのではと思います。

(Q)佐藤さんの社内にサーバーレスを提案して実現させたストーリーを聞きたいです!

佐藤さん:アジャイルで進めていくことがポイントで、最初にハッタリかまして始めたところを少しずつ形にしていくのが大事だと思います。

(Q)Azure, AWSそれぞれでコスト削減のための仕組みやサービスを教えていただきたいです。

尾山さん:Lambdaの実行時間や回数でコストが増えていくので、なるべく少ないコール数で処理ができるように無駄なプログラムを見直して数を減らす地道な努力はしています。コスト削減の第一歩はコストをしっかりモニターすることだと思うので、どこにどれだけコストがかかっているか、分析するのが大事だと思います。

佐藤さん:我々も、地道なことをやっています。毎月どのサービスにどのくらい使われているのかを見ています。意外と多いのは、エンジニアが開発の時に作って放置してしまっているものを消していくと言う作業ですね。これは意外と効きます。

(Q)AWS、Azureにかかわらず今後クラウド関係の仕事をしていくために身に着けた方がいい技術を教えてください。また、そういう情報をどこで収集しているか教えてください。

佐藤さん:変化の早い世界なのでこれを身に付ければ大丈夫というものは無いと思っています。月並みですが変化に対応し続けるということでしょうか。情報ソースはやはりSNSを中心としたWeb情報が本よりも役に立つと思います。

尾山さん:体系的、網羅的に基礎知識を習得できるので各社が認定する資格(AWSソリューションアーキテクト等)取得に向けて学習することをお勧めします。

(Q)初学者の学習手順やオススメ教材等ございましたらそれぞれ教えていただきたいです。

佐藤さん:AzureでしたらMicrosoftが提供しているMicrosoft Learnが初学者向けには最適だと思います。弊社の社員もここから勉強を始めています。

尾山さん:UdemyやYoutubeなどで検索してみると学習のための動画コンテンツがたくさんあり、テキストを読み込むより効率よく知識やノウハウをインストールできるので初学者にお勧めしています。

(Q)それぞれのチームメンバー構成や人数、役割を知りたいです

佐藤さん:答えられる範囲ですと、チームの全体人数は30人弱です。開発、PoC、SREでチームを分けています。開発は更にフロントエンドとバックエンドに分けていましたが、現在フィーチャーチームに移行中です。

尾山さん:全体としては20人弱です。フロントエンド・バックエンド、SRE、QA、デザイナーなど職能ごとにチームを分割しています。

(Q)富士フイルムさん、まだ部署やサービスによってはオンプレも残っていたりしますか?聞き逃してしまったのですが、 IMAGE WORKSがフルクラウド化になったということですよね?富士フイルムさんの全取り組みとかではなく。

佐藤さん:はい、お察しのとおりまだオンプレも残っております。

まとめ

今回は、各社のサーバーレス環境におけるご苦労された点やサービスの良かった点などをご共有いただきました!エンジニアの皆様にも活かしていただけるTipsもあったのではないでしょうか◎尾山さん、小島さん、佐藤さん貴重なお話をありがとうございました!

参加者からの声

・AWSを使い始めたところなので、気をつけるべき点など、参考になりました。
・質問に答えていただけたことやリアルなお話を聞けたことが良かったです。
・サーバレス全体的なことが分かった。
・サーバーレスを取り扱ったことがないので概要をしれてよかった。
・ホント、生な声がきけて良かったです。参考にもなりました。

ビデオオンの参加者方々との集合写真

f:id:pcads_media:20210526101404j:plain

イベントレポートは以上になります!次回もお楽しみに♪