🥰
Lambda&NATGatewayの連携方法
参考
・VPC構築周りは以下辺りを参照
→VPC内のLambdaからインターネットにアクセスする
→【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる
本題
結論、Lambda関数内でNATGatewayの作成やルーティング、削除などを行う。
※ 例えば、NATGatewayの作成〜ルーティングの流れは以下となる。
python
[python]
…(インポートの省略)
# クライアントを作成
client = boto3.client('ec2')
# エラスティックIPとパブリックサブネットIDを元に、NATGatewayを作成
response = client.create_nat_gateway(AllocationId="eipalloc-37fc1a52",SubnetId="subnet-1a2b3c4d")
# レスポンスからナットゲートウェイIdを抽出
natgw_id = response['NatGateway']['NatGatewayId']
# サイダーブロック、ナットゲートウェイId、ルートテーブルIDを元に、
# ナットゲートウェイとルートテーブルをルーティング
client.create_route(DestinationCidrBlock = '0.0.0.0/0', NatGatewayId = natgw_id, RouteTableId = "rtb-22574640")
go
[go]
…(インポートの省略)
// クライアントを作成
client := ec2.New(session.New())
// エラスティックIPとパブリックサブネットIDを元に、NATGatewayを作成
createNatGatewayInput := &ec2.CreateNatGatewayInput{
AllocationId: aws.String("eipalloc-37fc1a52"),
SubnetId: aws.String("subnet-1a2b3c4d"),
}
result, err := client.CreateNatGateway(createNatGatewayInput)
createRouteInput := &ec2.CreateRouteInput{
DestinationCidrBlock: aws.String("0.0.0.0/0"),
GateWayId: aws.String(""),
RouteTableId: aws.String("rtb-22574640"),
}
// レスポンスからナットゲートウェイIdを抽出し、CreateRouteInputのGateWayIdにセット
createRouteInput.GateWayId := result.NatGatewayId
// サイダーブロック、ナットゲートウェイId、ルートテーブルIDを元に、
// ナットゲートウェイとルートテーブルをルーティング
client.create_route(createRouteInput)
各メソッドは公式APIリファレンスを参照
→Boto3(for Python API Reference)
→AWS SDK for Go API Reference
※作成したクライアントは、AWSリソースを操作する為のオブジェクトに過ぎない。(EC2インスタンスを新規作成しているわけではない)
※サブネットIDやルートテーブルIDなどは環境変数での保持も可能。
Discussion