Lambda から EC2 へ TCP 疎通を確認する
概要
セキュリティグループのインバウンドルールで TCP を許可している EC2 に対して、
VPC 内にアクセス可能にした Lambda、そうでない Lambda からの疎通確認をしてみました。
Lambda のランタイムは Go です。
Lambda のコード
package main import ( "log" "net" "time" "github.com/aws/aws-lambda-go/lambda" ) func main() { lambda.Start(func() { ip := "x.x.x.x" port := "xxxx" conn, err := net.DialTimeout("tcp", ip+":"+port, 3*time.Second) if err != nil { log.Fatal(err) } defer conn.Close() log.Print("Connected.") }) }
ip を EC2 インスタンスの パブリックIP/プライベートIP に変えて TCP の疎通を試します。
VPC 内にアクセスできない Lambda から確認
Lambda を作成
コードをアップロード(パブリックIP)
// ビルド GOOS=linux GOARCH=amd64 go build -o hello ./hello // zip化 zip handler.zip ./hello
AWS マネジメントコンソールから zip をアップロード
テストを実行
テスト成功。ログに 'Connected' が表示されている
続いて、ip をプライベートIPに変更し、ビルド&アップロード
テストを実行
VPC 内にアクセス可能な Lambda から確認
Lambda を VPC アクセス可能に変更する
IAM -> ロールから AWSLambdaVPCAccessExecutionRole
ポリシーをアタッチ
lambda 関数のネットワークの設定(VPC,サブネット,セキュリティグループ)を更新
テストを実行(ip はプライベートIP)
テスト成功