t_hazawaの日記

株式投資とWebエンジニアリングのブログです。株式投資の目次は→です。 https://t-hazawa.hatenablog.com/entry/2021/02/12/220933

RDSを自動で止めたいのでAWS Lambdaを学ぶ

経緯・目的

  • 検証環境のRDSがある (たまにしか使わない)
  • RDSは停止しても7日間で勝手に起動する
  • Lambdaで止めるのがよくあるパターン。止めたい

AWS Lambda を学ぶ

AWS Lambda とは

AWS Lambda(イベント発生時にコードを実行)| AWS を読む

  • lambdaを使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。

  • サーバーレスの総本山
  • lambda関数をお気に入りの言語(node.js、python、go、javaなど)で記述 - うーん node か pythonだとは思うが…

  • インフラストラクチャのプロビジョニングや管理は必要ありません。

  • aws lambdaでは、消費したコンピューティング時間に対してのみ料金を支払う - エコ

  • 関数に適切なメモリサイズを選択することにより、コード実行時間を最適化できます i

  • プロビジョニングされた同時実行を有効にすることで、関数を初期化し、2桁のミリ秒以内に応答するようにハイパー対応できる - オーラバトラー

  • amazon s3を使用してaws lambdaをトリガーし、アップロードしたデータを直ちに処理することができます

  • リアルタイムストリーム処理。。aws lambdaとamazon kinesisを使用してリアルタイムのストリーミングデータを処理することで - リアルタイムストリームにも使える lambda ウェブアプリケーション。。デベロッパーは、aws lambdaをawsの他のサービスと組み合わせることで、スケールアップまたはスケールダウンを自動的に行う強力なウェブアプリケーションを構築し、複数のデータセンターにわたって可用性の高い設定で実行できます。 - ウェブアプリケーションにもつかえるらしい 2021/10/09 21:05 18m

  • サーバーレスアーキテクチャでは、bustleでインフラストラクチャを管理する必要は一切ないため、すべてのエンジニアは新しい機能の構築や新規開発に集中できます

チュートリアルしてみた

サーバーレスコードを実行する方法 – アマゾン ウェブ サービス (AWS)

  • 現在、java、node.js、c#、goまたはpythonのlambda関数コードを作成できます

  • やった

料金チェック

料金 - AWS Lambda |AWS

  • AWS が設計した Arm ベースのプロセッサアーキテクチャを使用する Graviton2 で実行される AWS Lambda 関数は、x86 プロセッサで実行される関数と比較して、最大 34% 優れた料金パフォーマンスを実現します。 - 4割パフォーマンスがよいみたい

  • Arm 料金 GB-秒あたり 0.0000133334USD リクエスト 100 万件あたり 0.20USD - ◎まぁ、無いも同然な料金 (一日に何回か起動停止をするだけなら)

AWS Amplify を話にデてきたので学ぶ

AWS Amplify - 静的ウェブホスティング - アマゾン ウェブ サービス

  • 静的配信らしい
  • 静的ウェブアプリケーションをグローバルにデプロイおよびホストするためのフルマネージドサービスを提供し、信頼性の高い Amazonコンテンツ配信ネットワークを介して、世界中に数百の POP (Point Of Presence) で配信

  • Amplify コンソールでアプリケーションのコードリポジトリを接続するだけで、コードコミットを行う度に、フロントエンドとバックエンドへの変更を単一のワークフローにデプロイします。

  • プルリクエストのプレビュー。本稼働に影響を与えずに新機能を扱います。プルリクエストから新しい環境を作成します

  • シングルクリックでamazon route53で管理されるカスタムドメインを設定し、無料のhttps証明書を受け取ります - 安全安心な証明書がもらえそう (Let's Encrypt が最近大変だった)

  • パスワードの保護。ユーザー名とパスワードを設定して、まだリリースされていない機能を内部関係者と共有します。

CloudFront との違いは?

Amplifyを使って完全サーバレスなWebアプリを作る|F Lab|Fixel株式会社

  • AWS Amplify は、Amazon CloudFront のグローバルエッジネットワークを活用して、ウェブアプリをグローバルに配信します

  • Amplify VS CloudFront ではなく、Amplify uses CloudFront だね。 Amplify は CloudFormation みたいなものっぽい
  • awsのインフラ構築をすることが多いですが、今まではコツコツcloudformationのコードを書いていました。amplifyを使うと、コマンドラインでいくつか対話形式で選択・入力するだけで、コードを書くことなく、勝手にやってくれます。

  • ※実際は裏でcloudformationが動いています。 - AWS CloudFromationのラッパーだった

  • amplifyはreact、vue.js、angularに対応していますが、今回はフロント実装にvue.jsを採用しています

  • amplifyに関わらず、cloudfront+s3の構成は反映にかなり時間が掛かる事があるので、accessdeniedが発生する時は、1?2時間ぐらい待つ必要があるかもしれません

GraphQLも話にデてきたので学ぶ

GraphQLはRESTの置き換えではない|こんぴゅ|note

  • GraphQLはRESTの部分の開発がいらなくなるんだよね
  • restではurlがひとつのリソースを表すため、複数のリソースが必要な複雑な画面では複数回のapiリクエストが必要になる。

  • フィールド指定も得意な GraphQL
  • graphqlサーバはスキーマ定義に対応するデータを複数のデータソースから引っ張るわけだが、直接dbを叩いてもいいし、既存のrestful apiを内部的に叩いてもokである。

  • キャッシュ効率。graphqlは単一エンドポイントなので、httpのcache-controllのようなurlベースのキャッシュ機構やcdnでのキャッシュはそのままでは使えない - 不便そう

  • graphqlではリクエストが通れば200で返し、何かエラーが発生した時はエラーオブジェクトに内容が吐かれる

  • まず、"使う"方として、githubapi v4が肌感を掴むのによさそうだ

AppSync も話に出てきたので学ぶ

AWS AppSync(アプリデータをリアルタイムで保存、同期)| AWS

  • こんな名前だけど、 GraphQL 専用サービスみたい (わかりにくい)
  • GraphQLはRESTの部分の開発がいらなくなるんだよね(重要事項)
  • AWS サービス群の中で、モバイルの下にある AWS AppSync
    • モバイル用APIみたいな感じで使われることが多いからかな?
  • オフラインのクライアントを簡単に同期できるようにするクライアント側のデータストア - ちょっと気になる 2021/10/11 18:47 4m

  • マネージド型のgraphqlサブスクリプションにより、aws appsyncでは、数百万のクライアントに対しwebsocketsを介して、データの更新をリアルタイムでプッシュできます - すごそう 2021/10/11 18:48 5m graphql apiを、aws cliやコンソール、amplify cli、もしくはcloudformation経由で、数秒の内に作成することができます。 - 俺は GraphQLをCF経由で数秒の内で作成することが可能なんだよ (ドローデーモン先生)

  • X-Ray 知らない 2021/10/11 18:50 7m
  • まぁ GraphQLのものだとわかった
  • AppSync というのは、モバイルアプリケーションをデータと同期する、という意味だろう
    • まぁ名前を素直に解釈すると、 モバイルアプリケーション(スマホアプリ)を最新版に同期させるものっぽいけど

AWS lambda の学習に戻る

というか、ここまでいうなら、80ポートでアクセスしたら hello world いう web サーバ作ってみたい 2021/10/09 21:07 20m

モジュール 1 - AWS で基本的なウェブアプリケーションを構築する

  • このチュートリアルでやろうとしてるのは、
  • 80を受けるの Amplify で作ったもの (多分cloudfront)
  • lambdaはそこに動的処理を加える じゃん
    • まぁ、餅は持ちやだね
    • (80は CloudFrontで受けるべき)
  • まぁ、Lambda を使うと、動的部分や更新部分を サーバなしでできるよ、ってことで。 2021/10/11 19:07 11m

というかそのものズバリ RDS lambda 落とす とかで調べてみたい

EC2ならあった

Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動する

  • amazon cloudwatch events も使うの?
  • aws instance scheduler - ☆そういうのもあるのね

  • 4.スケジュールに合わせこの関数をトリガーするよう、cloudwatch eventsのルールを作成します - 実は CloudWatch Events がcronみたいなものなのか?

  • 3 STEP

  • (1)権限
  • (2)関数つくりとテスト
  • (3)cloudWatch Events ルール

  • [fixed rate of]に、分、時間、もしくは日の単位で時間間隔を入力します。[cron expression]に、lambdaにインスタンスを停止させる時刻を表すスケジュール式を入力します。 - ◎本当に CloudWatch Events でcronだった 2021/10/11 19:31 23m

  • 最後に激ナがcFn テンプレートがついていた(時代は CDK)

これかな (LambdaでRDSを落とす)

https://go-journey.club/archives/11747

  • これをそのままやればできそう 2021/10/11 19:36 27m

せっかくなのでこれも (Lambdaで RDSや EC2を落とす)

Vol.25 AWS DBマイグレーション時のコスト削減アプローチ:AWSで実践!DBマイグレーション時のRDS利用コスト削減|システムズのマイグレーションコラム|SYSTEM'S マイグレーション2.0

  • 移行先の開発環境の利用中においても、従量課金型サービスであれば、使用しない時間帯を設定することで、コスト削減につなげることができるようになります。i - ◎確かに 2021/10/11 19:38 (やりたいかもリストに載せた)

時間まとめ

  • 2021/10/10にはじめた
  • 2021/10/11 21:52におわった
  • 40+44+53 = 137分かかった
    • ↑の内、このブログにまとめるのに20分かかった

この後

こういう風にRDSを落としていきたい

  • ルールは、夜の間に落とす感じにしようか 2021/10/11 21:24
    • 使ってるときに落ちると嫌なので 2021/10/11 21:24