AWS DVA デベロッパー Lambdaを簡単にまとめてみた
Lambda
「AWS Lambdaを使用すれば、サーバのプロビジョニングや管理なしでコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。」(公式サイト参照)Lambda関数の暗号化はKMSを使用して、環境変数(関数の動作を調整する)を暗号化する。
「伝送中に暗号化するKMSキー」設定
「保管時に暗号化するKMSキー」設定
「伝送中の暗号化のためのヘルパーの有効化」にチェックを入れる
◉DynamoDBテーブルに何か書き込まれた時、Lambdaを関数を実行したい。
・DynamoDBストリームを用いて、トリガーする
・Lambda側の設定も必要で、DynamoDBストリームのARN(リソースネーム)を関連づけることも必要。
◉LambdaをCloudFormationでデプロイしたい場合、ZipFileに直接コードを書き込んでデプロイする。
依存関係がある場合は、依存関係とLambda関数をまとめてS2にアップロード、それをCloudFormationから参照する必要がある。
Lambda関数の同時実行数は1000までだが、上限引き上げリクエストをすれば引き上げてくれる。
Lambda関数の同時実行数を超えてリクエストを受けた場合、RateExceededエラーを受け取る。Throttlesメトリクス で確認することも可能。
◉Lambda関数のパフォーマンスが芳しくない。
→割り当てるメモリの量を指定することでパフォーマンスを向上させることができる。
Lambdaでは、関数の実行と保存に使用できるコンピューティングおよびストレートリソース量が制限される。展開パッケージのサイズ制限は250MB、これを超えた場合は、/tmpディレクトリ に保存される。
Lambda関数のファイルを一時的に保存する場所として、ローカルディレクトリ/tmpを使用する。Lambda関数の最大容量は512MBなので、すぐ足りなくなる。
◉低レイテンシーでプレミムユーザー以外のアクセスを拒否したい
Lambda@Edge エンドユーザーに近い場所で、コードを実行できる。これをCognitoのアクセス認証時のイベントで呼び出すことで、認証を実行することができる。
Lambda関数でCloudWatch Logに出力されるもの
必ず出力される項目→START,END,REPORT
Duration Lambda関数の実行時間Billied Duration 課金対象の時間
Memory Size Lambda関数に設定しているメモリサイズ
Memory Used 実際のメモリ最大メモリ最大使用量。
Lambdaレイヤー 複数のLambda関数で外部ライブラリやビジネスロジックを共有できる仕組み。外部ライブラリーなどの依存関係を共有化することができる。レイテンシを抑えることができる。依存関係によって発生するエラーを回避することができる。デプロイパッケージを削減することができる。
Lambdaエイリアス 関数の特定のバージョンに対するポインタ(目録みたいな)のようなもの。
Lambda環境変数 変更の可能性があるパラメータを環境変数にしておけば、コードの変更をすることなく更新できる。『チームでコードを共有しあいたいが、セキュリティを万全にしたい=コード内に書きたいパスワードとかは変数にして自身で管理』最大512KBしか入らないので、それ以上の暗号化したい場合は、暗号化SDKを使う。
暗号化ヘルパー 環境変数の値をLambdaに送信する前に、クライアント側で暗号化できる(暗号化多すぎ!)
Lambdaで同期処理にしておくことで、Lambdaでエラーが起こったことを呼び出し元で検知できる。
◉Lambdaを非同期処理にしたい場合、Invoke APIを使用して、Lambda関数を呼び出し、InvocationTypeをEventに設定することが必要。
※Invoke APIには、3つのInvocationTypeがある。
・RequestResponse(デフォルト) 関数を同期的に呼び出す。関数が応答を返すかタイムアウトになるまで接続を開いたままにする。
・Event 関数を非同期的に呼び出す。キューイングされたのちに関数がじっこうされる。
・DryRun 権限確認。パラメータ値を検証し、ユーザーまたはロールに関数を呼び出す権限があることを確認。
Lambdaプロキシ統合 APIへのリクエストに含まれる情報を自動でLambda関数に渡すことができる。
Lambda 非プロキシ統合 より複雑なマッピングをしたい時に用いる。
◉Lambda関数にLambda関数を重ねると再帰的な実行が行われるので、マジで気をつける。(莫大なコストがかかる)
Lambdaのメトリクス
・Invocations 呼び出し実行数・ConcurrentExecutions 実行された関数インスタンスの数
・Errors タイムアウトなどのランタイムエラー
・Throttles ConcurrentExecutionsが同時実行数に達して、スロットリングされた数(通信制限みたいな感じ)
・Duration 関数が実行された時間
504エラー(INTEGRATION_TIMEOUTエラー)
Lambda関数が基本的には正常に処理しているが、時々処理が遅れていることを示している。→実行中のLambdaファンクションが29秒以上処理にかかってしまうとAPIGatewayのタイムアウトエラーが発生してしまう。
INTEGRATION_FAILUREは統合失敗の応答。応答タイプが指定されていない場合、DEFAULT_5xxが返される。
Lambdaの設定画面で、X-rayのトレースを有効にすると、自動的にロールが作成され、Lambdaへのアクセスができるようになる。
xray:PutTraceSegment
xray:PutTelemetryRecord
この2つのポリシーが追加される。
◉さらにLambda関数内の様々なリクエストを分析したい場合は、X-ray SDKをコードに含める必要がある。
◉CloudFormationでLambda関数を設定する方法
・依存関係がある場合 AWS::Lambda::Functionを使用することでLambda関数のデプロイパッケージをCloudFormationにおいて参照することができる。
・依存関係がない場合 AWS::Lambda::Functionに直接コードを記述する。
◉Lambda関数とコードの依存関係をバンドル(まとめる)するには⇨ZIP化する
◉デプロイパケージが50MBを超えるLambda関数のデプロイ
・S3からアップロードする必要がある。
・同じリージョンからでないとダメだよ
デプロイパッケージ 関数のコードをLambdaにデプロイするために使用する。
非同期呼び出し処理の試みが3回とも失敗した場合、LambdaはSQSキューまたはSNSにイベントを送信できる。
Lambdaの作成時に、SQSやSNSのARN(リソース名)をDeadLetterConfigという項目に設定しておくことによって、非同期呼び出しの処理が3回失敗してもSQSやSNSに送信することができる。(失敗したらどこに送るのか設定しておくもの)
◉APIリクエストにクエリ文字列パラメータを含める必要がある場合の、Lambda+API Gatewayの設定方法
GetCustomerリソースを作成
GETメソッドを公開してLambda関数を呼び出し
JSON形式でDynamoDBからデータリストを取得
Lambdaは自動的にLambda関数をモニタリングして、CloudWatchにメトリクス を報告する。
Lambdaオーソライザー
Lambdaを利用して、APIメソッドへのアクセスを制御する機能。APIの実行を許可することができる。独自の認証APIを利用する際に使用する。ポータルサイトで使用される。 ・トークンベース JSONトークンやOAuthトークン、などのベアラートークン(形式がきまってないトークン)で発信者のIDを取得する方式 ・リクエストパラメータベース ヘッダー、クエリ文字列パラメータ、stageVariable、$context変数の組み合わせで発信者IDを受け取る。デベロッパーアソシエイト(DVA) オリジナルテスト01
デベロッパーアソシエイト(DVA) オリジナルテスト02
デベロッパーアソシエイト(DVA) オリジナルテスト03
デベロッパーアソシエイト(DVA) オリジナルテスト04
デベロッパーアソシエイト(DVA) オリジナルテスト05
デベロッパーアソシエイト(DVA) オリジナルテスト06
デベロッパーアソシエイト(DVA) オリジナルテスト07
デベロッパーアソシエイト(DVA) オリジナルテスト08
デベロッパーアソシエイト(DVA) オリジナルテスト09
デベロッパーアソシエイト(DVA) オリジナルテスト10
デベロッパーアソシエイト(DVA) オリジナルテスト11
デベロッパーアソシエイト(DVA) オリジナルテスト12
コメントや要望があれば、下記のツイッターにDMをください。
Tweets by wallofmind2