daikiojm’s diary

ブログを書くときがやってきたどん!

フロントエンドエンジニアのAWSとの付き合い方について

この記事は、ex-handslab Advent Calendar 2018 16日目の記事です(大分遅れています)。 私が以前在籍していたハンズラボはAWS関連技術に強みを持った会社だったので、今回はAWS関連の小ネタを書きたいと思います。

adventar.org

対象の読者

ざーっと、書いてみて以下のような方が対象の読者になるのではないかと思っています。

  • AWS以外のクラウドサービスを使って開発を行っているフロントエンドエンジニア
  • これからAWSをやっていく気持ちを持っているフロントエンドエンジニア

※ 普段からAWSを使って開発している人にとっては当たり前の内容ばかりかもしれないです

この記事を書こうと思ったきっかけ

フロントエンドエンジニアと一口に言ってもいろいろなバックエンドを持つ人がいる

ここでは、言葉の定義を深掘りすることはしないが、以下のようにフロントエンドエンジニアと言ってもいろいろなバックエンドを持つ人がいるなぁという印象を受けている。

  • サーバーサイドインジニア
  • Webコーダー
  • デザイナー
  • プログラミングスクールを経てフロントエンドエンジニアとして働き始めたばかりの人
  • などなど

自分自身も、新卒で入社した会社ではWindowsのネイティブアプリケーションの開発/インフラの保守のような仕事を行っていた後、exしたハンズラボでは、AWSのマネージドサービス/アプリケーションサービスを使い、主にフロントエンド仕事をしてきた経緯がある。

フロントエンド/バックエンドともに専門性が増している

フロントエンド(特にSPA)フレームワーク/ライブラリのが普及していることや、ツールチェーン周りのエコシステムの発達などで、フロントエンドエンジニアの備範囲が広がっている印象がある。 一方サーバーサイドインジニアもまた、マイクロサービスアーキテクチャAWSなどのクラウドサービスに依存するアプリケーションサービスのキャッチアップなど、それぞれの領域で求められる専門性が増している印象がある。 専門性と同時に多少性もましている気がしていて、これに関してはすごく共感できる記事を書いている方がいた。

note.mu

今回は、上記を踏まえてAWS上に構築されるWebアプリケーションを開発するフロントエンドエンジニアが最低限知っておきたいAWSサービスに関する内容をざっくりまとめていきたいと思う。

関わりが深そうなAWSサービス一覧

フロントエンドエンジニアと関わりが深そうなAWSサービス一覧とユースケースを並べていく。

S3

Cloud Front

  • Webフロントエンド配信CDNとして
    • エッジキャッシュサーバーを利用してオリジンからのレスポンスをキャッシュする
    • オリジンのアクセス削減
    • エッジサーバーを利用するため地理的に離れた環境でも高速な読み込みを実現
    • 上記で挙げたS3と合わせて使われることが多い

参考

http://aws.clouddesignpattern.org/index.php/CDP:Cache_Distribution%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Lambda (Lambda@Edge)

  • SSRレンダリングサーバとして使う
    • EC2などの常駐型サーバーではCPU負荷が高く同時にさばけるリクエスト数が少ないといった問題が起きることも
    • APIを提供しviewは持たないWebサーバーと、SPAの構成でSSRを実現する際にLambdaを構成に追加するだけなので導入が手軽
  • Lambda@Edgeでコンテンツヘッダーのカスタマイズ
    • CloudFront の Behaviorに対してLambda@EdgeをトリガーすることでCloudFrontのレスポンスヘッダーを操作することができる
    • セキュリティ関連ヘッダー(CSPなど)の不可やキャッシュコントロールなども行える

参考 https://dev.classmethod.jp/cloud/aws/lambda-edge-design-best-practices/ https://tech-blog.abeja.asia/entry/front-engineer-re-invent

Route53

  • S3 + CloudFrontで配信するコンテンツに独自のDNS名を付ける必要がある際に利用する
    • AWSとの親和性が高いのが特徴だが単純なDNSサービスなのでバックエンドが必ずしもAWSである必要はないので他のクラウドサービスなどと組み合わせることも可能

Cognito

  • フロントエンドアプリケーションとAWSだけで完結する認証/認可
    • AWSから提供されいてるCognitoのSDKをフロントエンドアプリケーションに組み込むことで、アプリケーションの認証/認可を行うことができる

API Gateway

  • Lambdaと組み合わせてWebフロントエンドアプリケーション用のAPIの構築に利用
  • サーバーレスアーキテクチャの文脈でLambdaと組わせて使われることが多い

Code Build

  • フロントエンドアプリケーションのビルド・テスト

circle CIを使ったことがあれば、同じ感覚でyamlを書けばAWS上でCodeのビルド・テスト(デプロイ)が可能 ソースコードホスティングまで含めてAWSで行っている場合、AWSに閉じた環境で一貫したフロントエンドアプリの開発・デプロイができるので便利っぽい

AppSync

  • GraphQLでサーバーレスバックエンドを提供するアプリケーションサービス
    • ネイティブアプリの他にWebフロントエンド向けのSDKを提供しているので、最新のSPAフレームワークにも組み込みやすい

Amplify Console

  • WebフロントエンドアプリケーションのCI/CDを簡単に構築出るサービス
    • 今年のre:Inventで発表されたらしい

参考

https://dev.classmethod.jp/cloud/aws/amplify-console/

フロントエンド周りのAWS構築/運用は誰がやるのか問題

上記で挙げたようなフロントエンドアプリケーションを構築するために利用するAWSサービスは様々。 チームの規模感なんかによっても、変わってくるとはいもうけど、AWS特有のアプリケーションサービスが多いので、インフラの管理を行うチームでは対応しきれずフロントエンドエンジニアがここらへんの面倒を見るパターンも多そうというという印象。 AWSに限らず、ある程度の規模感をもって開発しているチームでフロントエンド配信CDNの運用とかをどうやっているかは単純に興味がある。

最後に

ここまで挙げてきたように、AWSではフロントエンド開発にも欠かせないツールを数多く提供している印象。 上記で挙げたようなアプリケーションサービスはサーバーレスアーキテクチャの文脈で話に出ることも多い。 サーバーサイドの開発経験がないフロントエンドエンジニアでもこのようなAWSサービスを組み合わせることで簡単にWebアプリケーション全体を構築することができたりする。

(とりあえず書いてみた感が否めないのとかなり遅れてしまったけど、書けたのでほっとしている😇)