AWS Lambda まとめ

AWS

AWS Black Belt Online SeminarからAWS Lambdaについてまとめてみたいと思います。

【AWS Black Belt Online Seminar】 AWS Lambda Part1

Developerの目的とは

価値を届けること

▹価値とは、自社のビジネスを差別化するもの

▹価値を生み出すビジネスロジックに集中したい

Undifferentiated Heavy Lifting

▹ビジネスの差別化につながらい重労働

ex) サーバーのセットアップ、キャパシティやスケーラビリティ管理、耐障害性のための冗長化構成

No more servers

▹More efficiency

▹More scalability

▹More agility(俊敏性)

Undifferentiated Heavy Liftingを避けるためにはサーバレスがよい仕組みだ

サーバーレスの特長

▹インフラのプロビジョニングが不要

▹自動でスケール

 ・lambdaファンクションはリクエスト数に応じて自動的に起動数がコントロールされる

▹事前コストは必要ない

 ・リクエスト数、処理の実行時間に対しての課金

▹高可用かつ安全

Lambdaは自由度が低いが管理の手間は少ない。

上記が典型的なサーバレスアプリケーションモデルとなる

イベントソースによる状態の変化を検知しLambdaファンクションが起動し、サービスに対して何等かの処理を行う。

AWS Lambdaの基本

Lambda関数(ファンクション)

▹AWS Lambdaで実行すうるアプリケーション

▹それぞれが隔離されたコンテナ内で実行される

▹利用する言語の関数もしくはメソッドをハンドラーとして指定し、実行の際に呼び出す

▹コードは依存関係も含めてビルド、パッケージングしたうえでアップロード

基本設定

▹メモリ

 ・64MBごとに128MBから3008MBの間で設定可能

 ・容量に応じてCPU能力なども比例

 ・メモリ容量が一定を超えると使用するコア数も増えるため、マルチコアを活用するようなコードを実装するとでより効率的な処理が可能

▹タイムアウト

 ・Lambdaファンクションの実行時間に関するタイムアウト

 ・最大900秒(15分)まで

▹実行ロール

 ・必要なAWSリソースへのアクセスを許可するIAMロール

 ・指定されたIAMロールに沿ってLambdaファンクションからAWSリソースへのアくセスが許可される

制限

▹インバウンドネットワークはブロックされる

▹アウトバウンドではTCP/IPとUDP/IPソケットのみ

▹ptraceシステムコールはブロックされる

▹TCP25番ポートのトラフィックはブロックされる

イベントソース

▹AWSのサービスないし、ユーザーが開発したアプリケーション

 ・Lambda関数の実行をトリガーする

▹イベントソースには3タイプがありそれぞれと特性が異なる

 ・ポーリングベース

   ・ストリームベース(キネシスなど)とそれ以外(SQS)がある

 ・それ以外(イベントソースから)

▹イベントソースによって呼び出しタイプが異なる

 ・非同期呼び出し

  ・InvocationTypeはEvent

 ・同期呼び出し

  ・InvocationTypeはRequestResponse

VPCアクセス

▹RDSやElasticacheなどVPC内のリソースへインターネットを経由せずにアクセス可能

▹VPC内リソースにアクセスさせたいLambdaファンクションに対してVPCサブネットおよびセキュリティーグループを指定

 ・新規作成時だけでなく既存のものを後から変更することも可能

 ・AZごとに1つ以上のサブネットを指定しておくのがおすすめ

▹ENIを利用して実現

 ・作成、削除はLambdaによって完全にコントロールされる

 ・ENIには指定したサブネットのIPがDHCPで動的に割り当てられる

 ・ファンクションに割り当てるIAM RoleにAWSLambdaVPCAccessExecutionRoleというポリシーをアタッチしておくこと

▹設定をしたタイミングからインターネットアクセスは不可となる

▹十分な数のENIまたはサブネットIPがない場合は、リクエスト数が増えた場合に失敗する

 ・非同期呼びだしの場合、このエラーはCloudWatch Logsには記録されない

アクセス許可-実行ロール

▹lambdaファンクションがAWSのサービスやリソースにアクセスするためのアクセス許可

 ・最低でもCloudWatch Logsへのアクセス許可が必要

 ・IAMを利用して作成

▹Lambdaのリソースを使用するためのアクセス許可を他のアカウントやAWSのサービスに付与するには、リソースベースのポリシーを使用

同時実行数

▹ある時点における実行中のLambda関数の数

▹セーフガードとしてアカウントに対してデフォルトでは1000で制限されている

▹許可された同時実行数を超えてリクエストされた場合、スロットリングエラー(エラーコード:429)が返却される

▹アカウントに許可された値を上限として関数単位で任意の割合で割り振ることも可能

自動スケーリング

▹トラフィックの増加にお応じて許可された同時実行数まで動的にスケール

▹初期レベルでバーストした後、負荷が落ち着くまでもしくは同時実行数の制限に到達するまで1分ごとに500ずつ同時実行していく(東京リージョンは初期値1000)

▹仮に制限緩和を行って同時実行数が10000まで引き上げられていたとしてもスパイク時にいきなり10000実行されることはない

Lambda関数のライフサイクル

  1. ENIの作成
  2. コンテナの作成
  3. デプロイパッケージのロード
  4. デプロイパッケージの展開
  5. ランタイム起動・初期化
  6. 関数・メソッドの実行
  7. コンテナの破棄

料金体系

▹リクエスト

 ・月間100万りくえすとまでは無料

 ・超過分は$0.2/100満リクエスト

▹実行時間

 ・100ms単位で課金となり、100ms以下は繰り上げて計算

 ・メモリー容量により単価および無料時間が異なる

コメント

タイトルとURLをコピーしました