VPC環境でLambdaを100同時実行してプライベートIPアドレスを確認した
2019年9月発表のLambda 関数が VPC 環境で改善されます以降に、VPC環境でLambdaを実行したことなかったので、動作を確認しておきました。
結果、当たり前ですが、記事に書いている通りの動作となりました。
1つのENI、1つのプライベートIPアドレスを使用していました。
目次
テスト環境
Lambda関数を100同時実行して、同じVPC内のEC2 Apacheに curl コマンドを実行します。
Apacheのaccess_logに記録されるプライベートIPアドレスが全部同じか確認します。
VPCサブネットの設定
デフォルトVPCに追加でサブネットを作成しました。
使用できるIPアドレスを少なくして検証したかったので、/28で作成しました。
VPC環境のLambda
ランタイムはPython3.7です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import json import time import subprocess def lambda_handler(event, context): args = ['curl', 'http://172.31.56.6'] response = subprocess.check_output(args) print(response) time.sleep(60) return { 'statusCode': 200, 'body': '' } |
curl 実行後に 60秒待ってる間に他のLambdaが実行されるようにしました。
Lambdaのネットワーク設定で、VPCとサブネットを指定しました。
LambdaをVPC環境で起動するには、LambdaのIAMロールに次のIAMポリシーが必要でした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*" } ] } |
ENI
VPC環境のLambdaを作成すると、ENIができていました。
IPアドレスは172.31.200.13 でした。
Lambdaを100個実行するLambda
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import json import boto3 def lambda_handler(event, context): for i in range(100): boto3.client('lambda').invoke( FunctionName='lambda_vpc_test', InvocationType='Event', ) print(i) |
VPC環境のLambdaを100回実行するLambdaを作って実行しました。
実行
全部 172.31.200.13 からのGETリクエストになりました。
古い環境がないので試しようがないのですが、アップデート前はプライベートIPアドレスが足りなくなってサブネットを追加したことがあったと思いました。
便利になってますね。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
CUSTOMINEを使ってkintoneからAWS Lambdaを実行する(Cognito認証付き)
先日の記事「kintoneのカスタマイズ開発を超速にするCUSTOMINE」で書 …
-
-
X-Ray SDK for Python でライブラリへのパッチ適用
boto3でのAWS呼び出しとrequestsでの外部API呼び出しにパッチ適用 …
-
-
AWSアカウント内特定リージョン内のDynamoDBテーブルを全削除するLambda(Python)
やりたいこと タイトル通りですが、特定アカウントの特定リージョン内のDynamo …
-
-
試そうとしてたらSavings Plans買っちゃいました
Savings Plansの購入画面を確認していました。 画面遷移も確認しようと …
-
-
AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
-
-
リザーブドインスタンス推奨事項を確認した
マネジメントコンソールで[AWSコスト管理]カテゴリの[AWS Cost Exp …
-
-
ECR(Amazon Elastic Container Registry)にコンテナイメージをアップロードする
「Pandocサーバーのコンテナイメージを作成する」で作成したイメージをAWS …
-
-
S3 Intelligent-Tieringのオブジェクトの階層移動をCloudWatchメトリクスで確認
CloudWatchメトリクスの保存期間は現時点で15ヶ月(455日)なのでそろ …
-
-
RDS ProxyをAurora MySQLで
Lambda関数をたくさん同時実行してMySQLにアクセスしても大丈夫なようにR …
-
-
AWSエンコードされたエラーメッセージをデコードするコマンドのメモ
Stdout: couldn’t create ENI: Unaut …