0
0

More than 1 year has passed since last update.

AWS Serverless デジタルバッジを取得する② Lambda編

Posted at

このデジタルバッジ取得のために、AWS Skill Builderのこのコースを学習している記録

自分のスキルレベルは以下。

  • SAAは取得
    • 4年前ぐらい
  • 実務利用なし
    • 趣味レベルではあり

AWS Lambda Foundations (Japanese) 日本語実写版

アクセス許可の概要

  • IAMリソースポリシー・関数ポリシー
    • Lambdaにアクセスするための許可
  • IAM実行ロールポリシー
    • Lambdaからアクセスするための許可
  • NW周りの注意点
    • Lambdaのある場所
      • AWSの所有するVPCにある
      • そのため、自分のVPC内にアクセスするためにENIの許可を実行ロールに付与する必要がある。
    • 一つのENIにしかアクセスすることしかできない。
      • そのため、複数のVPCにアクセスするようにNATする必要あり。
    • VPC側にも留意点あり
      • オートスケールさせるために、IPアドレス空間を確保するとか。

参考資料

仕組み

  • イベントソース

    • トリガーする呼び出し元
      • データストア
      • エンドポイント
      • リポジトリ
      • メッセージサービス
    • イベント
      • プッシュ型
        • 同期プッシュイベント
        • 非同期プッシュイベント
      • ポーリング型
        • ストリームベース
          • シーケンス処理を重視してるので、以下終わるまで先に進まない。
            • エラー解消される
            • 有効期限切れる。
        • 非ストリームベース
          • メッセージの順序性が保証されるわけではない。
  • ライフサイクル

    • 動作の流れ

      • 呼び出し
      • コンテナ起動
      • ブートストラップ
        • この辺までがコールドスタート
      • コード実行
        • ウォームスタート状態
        • リクエストが来るたび即実行
      • リクエストがないとコンテナ停止
        • コールドスタートスタートに戻る
    • 常にウォームスタートにしたい場合

      • プロビジョニングされた同時実行を有効化する
      • 留意事項も多数あり
        • 関数初期化されない等。
    • AWS X-rayで分析することも可能

  • あて先指定

    • 成功時・失敗時などであて先を変更できる

参考資料

関数の作成

  • プログラミングモデル・ベストプラクティス
    • 設計
      • ハンドラメソッド
        • 呼び出すために必要
          • Handler(event,context)method
          • イベントオブジェクト
          • コンテキストオブジェクト
      • 関数をステートレスとする
        • /tmpのキャッシュはコールドスタートで消失
        • 別の場所に保存しておく
          • DynamoDBは状態情報
          • ElastiCacheは関数をVPCに配置する場合
          • S3は速度が重要でない場合
      • 必要なもののみを含める
        • 起動時間に影響する
    • コード記述
      • ログ記録ステートメントを含める
        • CloudWatcheに書き込める
      • 結果情報を含める
        • 関数では、関数の実行結果に関する情報を Lambda に渡す必要がある
      • 環境変数を利用する
      • 再帰的なコードは回避する
  • コード作成
    • マネジメントコンソール
      • カスタムライブラリのない単純なもの。
      • 記載して保存すると即実行可能な関数となるため、無効化をしておく
    • Lambdaコンソールにアップロード
      • SAM CLIを使ってローカルテスト・デバッグ可能
      • 10MBの制限あり
    • S3経由でアップロード
      • 10MB制限なし。
      • CI/CD管理されてる場合。

参考資料

関数の設定

  • メモリとタイムアウト
    • メモリの設定をすると、比例してCPUが利用される
    • 実行時間も価格に影響するため、メモリ・CPUを大きくしたほうがコスト削減される場合もある。
    • Power Tuningを使用しての最適化
  • 同時実行とスケーリング
    • デフォルトはアカウントレベルで1000
      • サポートに引き上げリクエストで増やせる
    • 関数単位で予約・制限設定することもできる
    • 同時実行予約されていない枠が最低100保持される
    • 同時実行バーストの管理
      • 同時実行の即時増加量、という設定もある
        • リージョンによって異なる
      • 同時実行の即時増加量<アカウントの同時実行の上限の場合、1分ずつ評価して、不足していると500ずつ同時実行数を増やす
      • 関数に上限設定した場合はその設定に従う
  • 同時実行の予測
    • 非ポーリングイベント
    • ストリームポーリングイベント
      • リクエスト頻度=同時実行数 (シャード数)÷関数の平均実行時間
    • 非ストリームポーリングイベント(SQS)
  • 同時実行に関する CloudWatch のメトリクス
    • ConcurrentExexcutions
    • UnreservedConcurrentExecutions:
  • プロビジョニングされた同時実行
    • 常にウォームスタートすることができる。

参考資料

サーバレスアプリケーションのデプロイとテスト

  • デプロイの違い
    • CloudFormation テンプレートを使ってデプロイ
    • アカウント含めて必要
    • ローカルテストデバッグができない
      • SAM CLIを利用
  • SAM
    • SAMテンプレートからCloudFormationテンプレートを作ってくれる
  • SAM CLI
    • Dockerをローカル起動し、テストできる
  • バージョンニング・エイリアス
    • バージョンにARNの$LATESTで指定可能
    • エイリアスで新旧のバージョンを指定することができる
      • 重みづけ・時間をずらしてデプロイすることで影響を限定する
    • LambdaはCodeDeployと統合されている。

参考資料

モニタリングとトラブルシュート

  • CloudWatch
    • モニタリング
  • デッドレターキュー
    • Lambdaコンソールから設定
    • 失敗を分析
      • SNS トピック
      • SQS キュー
  • CloudTrail
    • 分析・監査
  • X-Ray
    • パフォーマンスチューニング
    • APIコールの呼び出しフローの特定

まとめ・その他。

サービス概要からスタートしたので、初心者も安心。
以下みたいな資料の説明がめっちゃ見やすかったです。

image.png

動画・資料のどちらかでしか説明してない内容もあるので、その点は注意。
画像ファイルとしても保存することもできるので、スクラップしてもいいかも。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0