Open35

aws saaの勉強

あかさたなあかさたな

AWS Elastic Beanstalkについて

あかさたなあかさたな

AWS Elastic Beanstalk は、AWS でウェブアプリケーションを立ち上げて稼動させるのに最も速い方法です。アプリケーションのコードをアップロードするだけで、リソースのプロビジョニング、ロードバランシング、オートスケーリング、モニタリングなどの細かい作業はサービスが自動的に処理します。

あかさたなあかさたな

デプロイが簡単、監視もしてくれる、ロードバランシングとオートスケーリングもしてくれる
っていうマネージドサービス
パッチも適用してくれるらしい

→webアプリの開発に注力することができる(インフラのことを考える必要が少ない)

あかさたなあかさたな

AWS Elastic Beanstalk で追加料金は発生しません。アプリケーションの保存、実行に必要な AWS リソース (EC2 インスタンス、S3 バケットなど) に対してのみ料金が発生します。実際に使用した分に対してのみ料金が発生します。最低料金や前払いの義務はありません。

beanstalk自体の料金は発生しないのは驚き

あかさたなあかさたな

https://qiita.com/shinkai_/items/096e0ee5f9c2f3c76c2b

AWS Elastic Beanstalkの裏側ではEC2インスタンスが生成されますが、そのEC2インスタンスがリソースを持て余して『リソースの無駄』が発生することがあります。
例えば「Dockerプラットフォーム」を利用している場合、AWS Elastic Beanstalkでは1台のEC2インスタンスに対して1コンテナが立ち上がります。もし1つのコンテナがリソースをそんなに使わない場合はリソースを効率的に利用するために1台のEC2インスタンスに対して複数のコンテナを立ち上げる方が無駄のないリソース利用が出来ます。

https://zenn.dev/tech4anyone/articles/ae0e3ef8670508

Amplify同様、作りこみにくいというデメリットがあるのでエンタープライズな実プロジェクトで使うことはほとんどありませんが、試験向けにはデプロイ手法がよく聞かれるので知っておいて損はありません。

デメリットはこんな感じかな...
個人開発とか小規模のものだったら使う価値はありそう

あかさたなあかさたな

ECS/EKS/ECRについて

あかさたなあかさたな

ECSとEKSはそれぞれコンテナ環境を運用するサービス

  • ECS : Docker、使用可能なコンピューティングサービスはEC2, Fargate
  • EKS:k8s、使用可能なコンピューティングサービスはEC2だけ

ECRはコンテナイメージのアップロード、管理をしてくれるサービス

あかさたなあかさたな
  • タスク:EC2,Fargate上で実行されるコンテナを管理する単位
  • サービス:複数のタスクをまとめて管理する単位(サービス内で4つのタスクを実行する、1つ落ちた場合は復旧するみたいな)
  • クラスター:タスクまたはサービスをまとめて管理する単位

タスク定義

  • 実行するコンテナイメージ
  • CPUやメモリのスペック
  • タスクロール(IAMロール)

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/clusters.html

あかさたなあかさたな

EKSでポッド数を自動的に増減させる方法

  • Horizontal Pod Autoscaler (HPA)を使用
    • CPU利用率やメモリ使用量に応じてポッド数を増減させる
  • Metrics Serverを導入
    • HPAで使用するメトリクスを収集する
あかさたなあかさたな

EC2について

あかさたなあかさたな

ハードウェア占有インスタンスとDedicated Hostsの違い

ハードウェア占有インスタンス

ハードウェア専有インスタンスとは、単一の AWS アカウント専用のハードウェア上で動作する EC2 インスタンスです。つまり、ハードウェア専有インスタンスは、それらのアカウントが単一の支払者アカウントにリンクされている場合でも、他の AWS アカウント に属するインスタンスからホストハードウェアレベルで物理的に分離されています。ただし、ハードウェア専有インスタンス は、同じ AWS アカウント に属する、ハードウェア専有インスタンスではない他のインスタンスとはハードウェアを共有できます。

Dedicated Hosts

専有ホストは、インスタンスの配置を可視化および制御し、ホストアフィニティをサポートします。つまり、特定のホストでインスタンスを起動して実行でき、インスタンスが特定のホストでのみ実行されるようにできます。詳細については、「Amazon EC2 専有ホストの自動配置とホストアフィニティ」を参照してください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/dedicated-instance.html
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html

あかさたなあかさたな

つまり、ハードウェア占有インスタンスは、インスタンスが配置されるホストに他のAWSアカウントに属するインスタンスが存在しないことを保証してくれるもの
Dedicated Hostsはインスタンスを配置する時にホストを指定することが可能なもの

Dedicated Hostsの方が加えられる制限が大きい

ハードウェア占有インスタンスは他組織とホストを共有したくない時に使って、Dedicated Hostsは既存ライセンスの持ち込み(BYOL)を行いたい時などに使う

あかさたなあかさたな

ユーザーデータ

  • インスタンス起動時に実行されるbashコードなどを指定できる(ブートストラップ)
あかさたなあかさたな

ストレージ

  • インスタンスボリューム:停止、終了したらデータ削除される。無料
  • EBS:停止、終了しても削除されない。S3にスナップショットを保存する。有料。
  • EFS:サーバーレスで完全に伸縮自在なファイルストレージ
あかさたなあかさたな

あるEC2インスタンスのAMIを作成→AutoScalingで増やすみたいな構成の時
EC2にアタッチされているEBSボリュームをルートボリュームとして設定することでEBSのデータも複製することが可能

あかさたなあかさたな

API Gatewayについて

あかさたなあかさたな

Amazon API Gateway を利用すれば、デベロッパーは規模にかかわらず簡単に API の作成、公開、保守、モニタリング、保護を行えます。

API Gateway では、トラフィック管理、CORS サポート、認可とアクセスコントロール、スロットリング、モニタリング、API バージョン管理など、最大数十万規模の同時 API コールの受け入れと処理に伴うすべてのタスクを取り扱います。
お支払いいただくのは、受け取った API 呼び出しと送出したデータ量の分だけです。

あかさたなあかさたな

利点

  • 効率的な API 開発:複数のバージョンのAPIを管理することが可能
  • 規模に応じたパフォーマンス:CloudFrontと相性〇
  • 大規模なコスト削減:APIリクエスト単位で段階的に課金(max 0.90USD/100万リクエスト)
  • 簡単なモニタリング:ダッシュボードで監視することが可能
  • 柔軟なセキュリティ管理:IAM, Cognitoを使うことで認証を管理することが可能
  • RESTful API オプション:HTTP API or REST APIを作成可能
あかさたなあかさたな

Lambdaについて

あかさたなあかさたな

Lambda関数はLambda専用のセキュアなVPCに配置される
このLambda専用のVPCからは、インターネットにのみアクセスすることが可能である
そのためパブリックサブネット内のAWSリソースにはインターネット経由でアクセス可能であるが、プライベートサブネット内のAWSリソースへのアクセスはできない。

直接AWSリソースにアクセスさせたい場合は、VPCアクセスの設定を行うことでLambdaがHyperplane Elastic Network Interface(ENI)を作成し、ENI経由でアクセスすることが可能となる
ENIはサブネット毎に作成される
ただしENIを作成したLambdaはインターネットへ直接アクセスすることができなくなる
(サブネット内のNATにアクセスさせることでアクセスすることは可能)

あかさたなあかさたな
あかさたなあかさたな

キューの種類

  • 標準キュー
    • 無制限の数の1秒当たりのトランザクションをサポート
    • 順序はベストエフォート
    • 少なくとも1回はメッセージが配信され、重複することもある
  • FIFOキュー
    • 1秒当たりバッチ処理なしで300件、バッチ処理で3000件、高スループットモードだと7000件(バッチ:最大10件、256KBのメッセージをまとめて送れる)
    • 順序が厳密に保持される(FIFO)
    • メッセージの重複は起きない

厳密にしたい場合はFIFO、高スループットを求めるときは標準って感じかな?

あかさたなあかさたな

メッセージの取得方法について

  • ショートポーリング
  • ロングポーリング

キュー内にメッセージが存在しない時の挙動が異なる。
ロングの場合は、設定されたタイムアウトのギリギリまでメッセージを返さない、ショートはすぐ返す
→ショートの場合はAPIの呼び出し回数が多くなる。基本的にはロングにした方がよい。
例外として、複数のキューを1つの処理で扱うときなどは、すぐに次のキューを見に行った方が良いため、ショートが使われる。

あかさたなあかさたな

セキュリティについて

アクセスはIPアドレスや時刻で制御することが可能
また、KMSで管理された鍵を使って、メッセージの内容を暗号化することも可能。

あかさたなあかさたな

可視性タイムアウトについて

キュー内のメッセージは削除指示を受けた場合に削除される。
そのため、1つのリソースがメッセージを受け取って処理している間に、他のリソースが同じメッセージを受け取ってしまうという懸念がある。
それを解決するため、一定期間はそのメッセージを受け取ることができないようにしている。
デフォルトは30秒、最大12時間。

あかさたなあかさたな

メッセージの配信遅延について

  • 遅延キュー
    • すべてのメッセージで、メッセージが追加されてから取得できるまでの遅延時間を生じさせる
  • メッセージタイマー
    • 個別のメッセージで、メッセージが追加されてから取得できるまでの遅延時間を生じさせる
あかさたなあかさたな

SQS + Lambda

LambdaのトリガーにSQSを設定することで、LambdaがSQSをポーリングしてくれる