AWS LambdaでVPC利用!?
はじめに
今回はAWS LambdaをVPC利用についての功罪について紹介していきます。AWS Lambdaについては、過去の記事にて記載していますので参考にしていただければ嬉しいです。
VPC内にLambdaを配置してもメリットがない?
AWSは、AWS LambdaにVPC(Amazon Virtual Private Cloud)を設置することはあまりメリットがないという見解を示しています。
しかし、場合によってはメリットとなることもありますので、不要な場合はVPC環境外で実行する方が良いでしょう。今回はその場合の功罪について解説していきます。
VPC内にあるリソースを活用できる
VPCに設置済みのリソースへ接続することができます。
Lambdaから直接Amazon EC2(インスタンス)やAmazon RDS(リレーショナルデータベース)に接続することがある場合には必ず必要になる設定です。
サブネット・セキュリティグループを設定することができる
Lambdaを設定する際に、VPCのアクセス設定をすることができます。その際に、セキュリティグループを選択すると、設定できます。また、既存のLambda関数に対してもセキュリティグループを設定することができます。
VPCを作成時に設定する方法↓
- Lambdaのコンソールの関数ページ(Functions)を開きます。
- 「関数の作成」をクリックします。
- 「基本的な情報」>「関数名」に、任意の名前を記入します。
- 「詳細設定」を開きます。(Advances settings)
- セキュリティグループを選択します。
- 関数を作成します。
既存LambdaにVPCを設定する方法↓
- Lambdaのコンソールの関数ページ(Functions)を開きます・
- 任意の関数を選択します・
- 「設定」>「VPC」を選択します。
- 「VPC」>「編集」を開きます。
- セキュリティグループを選択します。
- 保存(Save)をクリックします。
外部接続時に固定IPアドレスを設定する
NATゲートウェイ(VPCに設置したプライベートサブネットからインターネットに接続する)経由にすることで、Lambdaから外のネットワークに接続する際、固定IPアドレスを使用することができます。セキュリティに対する要件など、接続元IPアドレスを指定する必要がある場合に有効な手段です。
サブネットやセキュリティグループなどは設定するための手順をいくつか踏まないとできません。それゆえに前述した通り、シンプルにAmazon Lambdaを実行するだけであれば、VPCに配置するメリットは正直ありません。
外部ネットワーク接続時の固定IPアドレスや、プライベートサーバーに対して接続したいなどの用途がある場合には、VPCに配置する必要がある場合のみ設定してみると良いかもしれません。
LambdaをVPCに配置する際の注意点
ここでは、LambdaをVPC内設置する際の注意点を説明します。VPC環境にLambdaを設置することで、普段のLambda関数とは別の処理が行われるようになります。
VPCを設定するとインターネットにアクセスできなくなる
Lambda関数にVPC設定を追加した場合、関数でアクセスできるのはそのVPC内のリソースのみになりますので、インターネットへのアクセスができません。
Lambda関数からVPCリソースと公共な(パブリックな)インターネットの両方に接続する必要がある場合、VPC内にNAT(Network Address Translation)インスタンスが必要になります。VPC内にNAT インスタンスを設定するか、Amazon VPC NAT gatewayを使うことでインターネットにも接続可能です。
AWSリソース、サービスへのアクセスもできなくなる
S3、KMS、SNSなどもインターネット経由で行うので、上記と同じようにNATの設定が必要になりますが、VPCのEndpointの設定をすることで回避することが可能です。Endpoints設定の仕方は、VPCページからEndpointsを選択し、使いたいサービスのEndpointを選択することで設定ができます。
ENIを作成する権限が必要
LambdaをVPCに配置するとENI(Elastic Network Interface)が付与されます。仮想的なNIC(Network Interface Card)を結びつけることで、LambdaがVPC内と通信する仕組みです。
そのため、ENI(Elastic Network Interface)の作成権限をLambdaに与える必要があります。詳細としては、AWS Lambda VPC Access Execution RoleのIAMロールをLambdaに付与することで、ENIの作成権限をLambdaに与えることができます。
立ち上がり(起動)が遅くなる
Lambdaの起動時にENI(Elastic Network Interface)を作成する処理が入るため、システムが立ち上がるまでの時間が長くなります。ENIは再利用される仕組みがあるため、短期間で連続起動をする場合でも問題ないです。
AWSLambdaをVPCに配置する活用事例
Redis・memcachedとの組み合わせ
Lambdaの処理においてキャッシュ(システム内で一時的に保存されているデータ)を利用する場合です。VPCに配置することによって、Amazon ElastiCache(エラスティキャッシュ)との接続が可能になります。
Amazon ElastiCache(エラスティキャッシュ)については、「Amazon RDSとは?ElastiCacheとは?」でも解説していますので参考にしてみてください。
短時間起動バッチの実行環境として利用する
RDS(リレーショナルデータベース)やインスタンスのEC2と連動した短時間起動で済むバッチを実行する用途で使うことができます。今まで5分ほどの制限があったLambdaは、2018年のアップデートで15分まで実行可能になりました。15分以内で実行可能な短時間起動バッチであれば、Lambdaで組むメリットはあります。
また、課金の単位が1ミリ秒(以前は100ミリ秒に対して)に変わったので、実行時間が短い場合は使いやすくなりました。
関数実行時にサーバ内で認証を行う
関数の実行前に事前認証を行いたい場合、VPC内サーバーと連携することができます。
まとめ
ここまで、AWS LambdaをVPC利用についてお話しさせていただきました。AWS LambdaのVPC利用は、特異的な場面で力を発揮するでしょう。セキュリティグループを設定できることによって、セキュリティ観点としては良い効果が得られる方法です。
2019年にLambda関数がVPC内で改善されたことによって、より良い使い方ができるようになりました。この記事を読んで、是非活用してみてはいかがでしょうか。
参考文献
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc.html