インフラエンジニアがAWSサーバレスアーキテクチャを初構築!概要・所感の備忘録

こんにちはますのです。
先日より勉強がてら、こちらで公開されているAWS環境のサーバレスアーキテクチャをいじっておりました。
【VueSlsApp】開発・運用ノウハウを詰め込んだサーバーレスアプリのサンプルを作りました

サンプルのアプリが公開されていましたが、どんなWebアプリなのかが概要を掴めずとりあえずやってみるべと構築した状況になります。
各AWSの機能を利用してのサーバレスで構築するアプリとなるため、どのサービスと設定として繋げるか概要を把握するには良かったです。わたしには難易度ちょい高めでしたが、各種AWSサービス触れたので良い機会になりました。

結論

  • Lambdaで利用されるPythonやNode.jsはインフラ屋でも分かるようかじりたい
  • 自動構成ツール(terraform、Ansible、CloudFormation)も使っておきたい
  • サーバレス開発が増えるようであれば一般的なWebフレームワークについて確認する
    参考:AWS サーバーレス向け開発者用ツール
今回の構築で感じたのはこの3つであります。
Webフレームワーク以外の2点はインフラエンジニアで必要になりそうなので、もう少し確認したいと思います。

構築で扱うAWSのサービス

わたしが構築して主に確認で触った箇所は9か所です。
処理については所感混じり、感じたままに記載しましたが概ねあっているかと思っています。

サービス名 備考
IAM Lambda実行用のロール作成、シークレットアクセスキーの扱い等で利用
Route53 独自ドメイン設定、CloudFront・S3への静的サイトアクセス設定で利用
Certificate Manager SSL通信設定、API Gateway構築で利用
Cognito ユーザ認証のWebアプリやユーザ管理で利用
S3 静的サイトのWebデータ格納
CloudFront S3の静的サイトへのアクセスをSSL通信化で利用
APIGateway ユーザログイン後の動作の肝、REST APIで利用
Lambda APIGatawayで登録された処理を実行(動的処理を全て担う)
DynamoDB Lambdaで実行された処理のデータを格納する

※APIGateway以降の処理はちょっと自信なしです。

構築後のWebアプリで何が出来るようになるのか

デモページは作者様のサイト内にあるのでそちらを確認くださいませませ。
https://note.com/thiroyoshi/n/n2560c21cd6b9?magazine_key=m500477771e76

  • ユーザ認証周り(アカウント作成、ログイン、ログアウト、アカウント削除)の動作確認
  • ユーザ登録情報の変更
  • AWSとServerlessFrameworkを利用したサーバレスアプリの構築
  1. S3に置いてある「index.html」へ独自ドメインでアクセスする
  2. AWS Cognito経由でユーザ認証周りを実行
  3. ユーザ認証後、ユーザ情報の変更をLambda経由でDynamoDBへ登録

構成図(筆者オリジナル)

作者様の構成図とはちょっと違いますが、いじってみて感じたわたしの理解となります。
※Cognitoまでの動作はうまくいきましたが、どうやってもDynamoDBへの登録が出来ずいったん断念しております。

作者様のnoteに記載されている通り、認証周りのWebサイトのパーツをサーバレスで構築出来るようになるよ!サーバレスアプリ構築理解に利用できるよ!という状態を認識しました。
Lambdaに登録するコード部分は作者様が既に用意してくれているため、ServerlessFrameworkで自動デプロイしただけなのです。Lambdaに登録されている内容見たけど、わたしにはまだ早い領域でありました。

構築にかかった費用

合計150円くらいでしょうか。AWSの無料利用枠内に収まっているみたいです。

  • ドメイン代:\50(.work:更新しない予定)
  • AWS料金:$0.55

今のところ「Route53のホストゾーンの作成」のみで課金されています。

S3:2000データの配置等々が65%まで上がっていますね。
テストと切り分けで2回くらいデプロイしなおしてました。その時にS3のデータ削除&再登録をしてたので、何回かやり直す場合は無料枠超えないように注意ですね。
万が一超えても「$0.005/1000リクエスト」なので、爆死することは稀かなとは思います。

環境を構築していて詰まった点

    Python:pip-toolsインストール

    SSL Authenticationのエラーが出てしまい、あれこれ対処法を確認するが解決に至らず。
    別の勉強でインストールした時に、Python実行環境でPycharmを導入・設定していたのでPycharmで実行したらうまくいったのです。環境変数とかも登録したので謎です。

    デプロイ後にアクセスしてもAccessDenyになる

    Route53にS3の静的サイトを指定されていたが、S3のアクセス許可設定がされていなかった様子。
    S3のアクセス設定を手動でやったらアクセス出来るようにはなりました。
    SSL通信でのアクセスが出来ない
    CloudFrontを噛まさないとS3へのアクセスはSSL通信が出来ない様子。
    別記事で紹介されていたので、CloudFrontを構築・設定してRoute53の設定を変更したところ解消しました。
    ユーザ認証後の情報登録が出来ない
    恐らくLambda→DynamoDBへの登録箇所の動作が上手くいっていないものと予想です。
    Chromeのディベロッパーツールでエラーを見たところCORSの部分で行けていない様子。
    Access to XMLHttpRequest at ‘https://dev-api-vueslsapp.soypocket.work/users’ from origin ‘https://dev-vueslsapp.soypocket.work’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
    API GatewayでCORS有効化して、Lambdaの中身にあれこれ書いてねって記事を見たけど、Lambdaの構成について理解が追い付かず触れなかったので断念しました。
    参考:Lambda + API GatewayでCORSを有効にしているのにCORSでエラーになる

    実施してみての感想

    エラーが出たりうまくいかなかったりとで調べながら実施しました。調査含めて所要時間は20時間くらいでしょうか…。
    ただ、あれこれエラーが出てくれたおかげでRoute53やCloudFrontの設定については深堀出来た気がします。

    ServerlessFrameworkを使っての自動デプロイとなっているので、気付いたらAWSのサービスがあちこちで立ち上がっております。Lambda周りに関してが特にサービス間の繋がりが見えづらくてDynamoDBのエラー解決に至らずでした。

    アプリケーション部分のコードについてはインフラ屋さんが触ることは無いとは思っていますが、今後サーバレス構成の管理を任される可能性もあるためPythonやNode.jsについては知っておいて損は無いかなと感じた次第です。

    開発関係に行くか、社内SE関係に行くかで主軸は変わってきますが、今後の糧にしていければと思います。

    最新情報をチェックしよう!