re:Inventで感じた本格的なサーバーレス時代の到来（Photocreate Advent Calendar 7日目 ）

クラフトビールを愛するテックリードの@rinrinです。
この記事は [Photocreate Advent Calendar 2018](https://qiita.com/advent-calendar/2018/photocreate) の 7日目 の記事です。

# tl;dr
* サーバーレスだけで十分サービス構築が可能な環境が整ってきた
* 今後は積極的にサーバーレス(Lambda)中心の設計を採用していく

# AWS re:Invent 2018に参加してきました
![](https://qiita-image-store.s3.amazonaws.com/0/7600/80f68a7c-cf11-b209-4f4a-1bb3e82885f7.png)

毎年11月下旬から12月上旬頃に行われる、AWSのテックカンファレンスです。
フォトクリエイトは一年ほど前から、オンプレミスからAWSへの大規模な移行に着手している背景もあって初参加となりました。

基調講演の席確保ために早朝から並んだり、夜遅くのイベントでは大量に出てくる🍺を飲み続けたり相当ハード(？)な出張でしたが、ライブ配信では感じられない現場の熱量を感じれ、現地で出会ったエンジニアと技術について話し、これからのアーキテクチャについて思いを巡らせることができた充実した一週間でした。

# 主役はサーバーレス
![1d3e71bc-8fac-47b2-832e-4beb8ecfcb44.png](https://qiita-image-store.s3.amazonaws.com/0/7600/b03c7282-f162-fb77-0fde-5aed7426081f.png)

基調講演ではサーバーレスについて多く語られたように思えます。[^1]
特に次の3つのアップデートはサーバーレスを一層前に進めるものと感じました。

[^1]: ここではLambda中心に書いていますが、AWSにおいてサーバーレスはもはやLambdaやAPI Gatewayだけでなく、Auroraや今回発表されたQLDB、Timestream、Personalizeなどマネージドなサービス全てを指しています

## AWS Lambda
[Runtime API](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-use-any-programming-language-and-share-common-components/)によって自由に好きな言語でLambdaを利用可能になりました。
Ruby、C++、Rustがサポートされ、その他の言語もパートナー企業からリリースされます。[^2]

[^2]: Wrap-up Sessionでの話では自身でランタイムを作るのはパッチやバージョンアップなどのメンテナンスコストが増えるだけのためあまりオススメしないとのことでした。

Layersでは重量級ライブラリなどを事前に別途アップロードしておくことで、デプロイを高速化したり、モニタリング処理などの差し込みなども容易になりました。

[ALBサポート](https://aws.amazon.com/jp/blogs/news/lambda-functions-as-targets-for-application-load-balancers/)はトラディッショナルなサーバーアプリケーションのサーバーレス化可能な部分のみをLambdaで実装するという柔軟なアーキテクチャを可能にします。

## Step Functions
Lambdaをつなげてワークフローを構築するサービスでしたが、[ECSをはじめ各サービスもアクションに利用することが可能になりました。](https://aws.amazon.com/jp/blogs/news/new-compute-database-messaging-analytics-and-machine-learning-integration-for-aws-step-functions/)
今まではLambdaに限定されていたため、RDBにアクセスしたい場合などはLambda in VPCからRDBに接続する相性の悪い方法を取らざるを得なかったのですが、Lambdaとコンテナアプリケーションを一つのワークフローで連携させることが容易になりStep Functionsが一気に採用しやすくなったと感じます。

## DynamoDB
制限はいくつかあるものの[トランザクションをサポート](https://aws.amazon.com/jp/blogs/news/new-amazon-dynamodb-transactions/)したことで凝ったことをして複数テーブルへの書き込みの整合性を確保する必要がなくなりました。
また、[On-Demand](')モードの登場でバーストに備えて余分にキャパシティをプロビジョニングする必要がなくなりコスト最適化が容易になりました。

2日目の基調講演ではワーナーCTOからAmazon.comがRDBからDynamoDBに大部分を移行し、よりスケーラブルに変わっていっている話がありましたが、このDynamoDBのアップデートはRDBからDynamoDBへ置き換えることができる範囲をぐっと広げてくれたと感じています。

# 待望のサービスメッシュ
基調講演での発表ではなかったものの、コンテナ関連でもアップデートはあり、サービスディスカバリの[AWS Cloud Map](https://aws.amazon.com/jp/blogs/news/new-application-integration-with-aws-cloud-map-for-service-discovery/)、そしてECSユーザー待望のマネージドなサービスメッシュ、[AWS App Mesh](https://aws.amazon.com/jp/blogs/news/introducing-aws-app-mesh-service-mesh-for-microservices-on-aws/)が発表されました。

フォトクリエイトではAWS移行と同時にマイクロサービス化を進めており、gRPCでのクライアントロードバランスを考えた時に必須ともいえるサービスメッシュの仕組みが提供されることは非常に大きいです。

# これからのコンテナとサーバーレスの関係
私が見聞きしている範囲では、汎用性の高いコンテナとそのオーケストレーションツールを中心にサービスを構築し、補助的にサーバーレスを利用するスタイルが多い印象があります。RDBを中心に据えている場合は自然とそのパターンになりますし、フォトクリエイトもこのスタイルです。

サーバーレス中心の場合、設計手法は大きく変わりますし経験も多くないためリスクはありますがスケーラビリティとコスト最適化、信頼性、パフォーマンスなどメリットは数多くあります。
今までは機能やツールなどが不足しており積極的な採用は控えていましたが、今回の発表を受け、フォトクリエイトでも積極的にサーバーレス中心のアーキテクチャを取り入れていこうと考えています。

# さいごに
フォトクリエイトは国内最大級の写真データを保有しており、そのデータとアプリケーションを絶賛AWSに移行中です。
アプリケーションの移行は単純に載せ替えるのではなく、クラウドネイティブに再設計しながら進めており、日々よりよい設計と新しい技術にトライしています。

また、サーバーレスと並んで毎年関心が高まっているML関連の発表を[レコチョクさんとの合同のre:Invent報告イベント](https://recochoku.connpass.com/event/104410/)でお話しますので、興味がある方はぜひご参加ください。

フォトクリエイトではAWSをフル活用してサービスを構築したいエンジニアの[ご応募をお待ちしております](https://recruit.photocreate.co.jp/entry/?utm_source=qiita&utm_medium=advc2018&utm_campaign=3c57e1b963d0761b08b9)。

<!--
明日の記事は @{アカウント} の {タイトル}(Photocreate Advent Calendar 8日目)です。
-->