![](/img/trans.png)
[英]AWS lambda function ConnectionError when configured with VPC
[英]AWS Lambda Function not joining VPC
我正在嘗試連接到我的AWS Aurora數據庫。 按照文檔指南3次,我在mysql連接上收到了相同的超時錯誤。 深入研究之后,看來我的lambda函數根本就沒有加入VPC。
我將列出一些輸出(刪除了不必要的行)以顯示我是如何得出這個結論的。
如果有人可以指出我的配置哪里出了問題。 請告訴我。 在任何人提到它之前,是的,我已經多次檢查了db程序變量。 它必須是配置問題。
角色:
$ aws lambda get-function-configuration --function-name "test" --output json
{
"FunctionName": "test",
"VpcConfig": {
"SubnetIds": [
"subnet-560b810e",
...
],
"VpcId": "vpc-c3e2f3a7",
"SecurityGroupIds": [
"sg-e029969a"
]
},
"Role": "arn:aws:iam::141066641105:role/test"
}
隨附政策清單:
$ aws iam list-attached-role-policies --role-name test --output json
{
"AttachedPolicies": [
{
"PolicyName": "AWSLambdaVPCAccessExecutionRole",
"PolicyArn": "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
}
]
}
VPC:
$ aws ec2 describe-vpcs --vpc-ids "vpc-c3e2f3a7" --output json
{
"Vpcs": [
{
"VpcId": "vpc-c3e2f3a7",
"State": "available",
"CidrBlock": "172.31.0.0/16",
}
]
}
安全組:
$ aws ec2 describe-security-groups --group-ids "sg-e029969a" --output json
{
"SecurityGroups": [
{
"IpPermissionsEgress": [],
"IpPermissions": [
{
"PrefixListIds": [],
"FromPort": 0,
"IpRanges": [],
"ToPort": 65535,
"IpProtocol": "tcp",
"UserIdGroupPairs": [
{
"UserId": "141066641105",
"GroupId": "sg-e029969a"
}
]
},
],
"GroupName": "db-access",
"VpcId": "vpc-c3e2f3a7",
"OwnerId": "141066641105",
"GroupId": "sg-e029969a"
}
]
}
IP地址python代碼:
import socket
response = socket.gethostbyname('test.db')
logger.log("test.db IP: " + response)
import subprocess
command = "/sbin/ip addr show"
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True)
response = process.communicate()
logger.error("IP command: " + response[0])
IP地址輸出:
test.db IP: 172.31.29.170
IP command: 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
57: vinternal_19@if58: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 8a:ae:cc:86:d7:e7 brd ff:ff:ff:ff:ff:ff link-netnsid 2
inet 169.254.76.37/23 scope global vinternal_19
valid_lft forever preferred_lft forever
60: vtarget_10@if59: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 72:6b:24:a0:47:d4 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet 169.254.79.1/32 scope global vtarget_10
valid_lft forever preferred_lft forever
如您所見,由於某種原因,我得到的地址是169.254.xx
而不是VPC的172.31.xx
還需要注意的是,DB在同一VPC中屬於同一安全組。
您的安全組顯示為空IpPermissionsEgress
。
{
"SecurityGroups": [
{
"IpPermissionsEgress": [],
...
如果我正確閱讀它,則意味着所有出站流量都被阻止 。
傳統上,假設您可以信任Amazon EC2實例上正在運行的內容,則對所有流量都開放出口規則。 因此,您可以對所有流量打開它,或者至少對您希望通信的系統打開它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.