概要
Lambdaの料金は「実行した時間」に対して課金されます。
作り方
Lambda関数を作成する場合は「プログラムをそのままデプロイする(ZIP)」「ECRに登録したコンテナを紐づける」の2種類の方法から選択します。
ZIPファイルをデプロイする場合は、コンソールからアップロードするよりはS3にZIPファイルを保存しS3からデプロイすることが可能です。
この形にすると、S3のZIPファイルを更新するとLambdaのプログラムが自動的に更新されます。
Lambda デプロイパッケージ
ECRのコンテナを使用する場合、設定を行うIAMユーザーは「GetRepositoryPolicy」「SetRepositoryPolicy」が必要になります。
Lambdaに割り当てるIAMロールを考慮します。
自動的に作成されるロールではCloudWatch Logsにログを出力できる権限が付与されます。
LambdaからS3へのアクセスをしたい場合はIAMロールにS3アクセス用のポリシーを付与します。
AWS Lambda 実行ロール
インフラ面での管理項目
プロジェクトとして動く場合「インフラ」「アプリ」で担当が分かれることが多いと思います。
その場合、Lambdaは「インフラでありながらアプリも関与する」という状態になります。
そのため、アプリ担当にもLambdaの操作権限を割り当てる必要があります。
フルアクセス権限を割り当てても良いですが、セキュリティポリシーの問題がある場合は割り当てる権限を絞る必要があります。
Lambda のアイデンティティベースの IAM ポリシー
別のAWSアカウントからLambda関数を実行したい場合はリソースベースのポリシーで設定します。
AWS Lambda のリソースベースのポリシーを使用する
Lambda関数はトリガーからの呼び出しにより動作します。
処理が終わらない状態でトリガーからの呼び出しが行われた場合は1つの関数はもう1つ実行環境を起動し処理を行います。
この時点で同時実行数が「2」になっています。
デフォルトでは同時実行数の上限は1000になっています。
「予約された同時実行数」は関数単位で同時実行数の上限を指定し他の関数が起動できなくなることを防止します。
Lambda 関数の同時実行数の管理
LambdaからRDS等のVPC内リソースにアクセスする必要がある場合はLambdaをVPC/サブネットに紐づけます
この場合、Lambda用にENIが作成されIPアドレスが割り当てられます。
同じサブネットに接続されている複数の関数は同じENIを使用します。
このENIは実行されているLambdaのメモリ量が3GBごとに増えていきます。
そのため、サブネットのIPアドレスが枯渇しないように設計しましょう。
LambdaをVPCに紐づける場合、Lambdaに割り当てるポリシーとして以下が必要となっています。
「AWSLambdaVPCAccessExecutionRole」がベースとなっているようですが、ENIを作成/削除する権限が必要となります。
ec2:CreateNetworkInterface ec2:DescribeNetworkInterfaces ec2:DeleteNetworkInterface
LambdaをVPCに紐づけた段階でEC2と同じような扱いになります。
SecurityGroupの考慮も必要になりますし、インターネットと通信したい場合はNatGateway経由などでアクセスする形になります。
VPC 内のリソースにアクセスするための Lambda 関数の設定
Lambdaでサーバーレス構成のシステムを作る場合、同時実行数が増える場合がほとんどです。
そうするとRDSを使用している場合に同時セッション数が増えて接続できなくなる状態が出てきます。
それを防ぐためにRDS Proxyを設置しRDSへの接続数が増えないようにします。
Lambdaランタイム
Lambdaはどこで実行されているかというとEC2上で実行されています。
Lambdaランタイム
コメント