我有一个在 VPC 中运行的 lambda。我使用它查询 ElasticSearch 并在那里更新数据并删除过时的数据。为了方便这个调用,lambda 必须承担一个角色,并为此调用 STS Assume role API。但最近,每当我尝试获取凭据时,我都会看到间歇性超时。代码是:
final AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.build();
final STSAssumeRoleSessionCredentialsProvider credentials = new STSAssumeRoleSessionCredentialsProvider.Builder(
System.getenv(SIM_ROLE_KEY), SIM_SESSION_NAME
).withStsClient(stsClient)
.build();
final String sessionToken = credentials.getCredentials().getSessionToken();
确切的错误:
Unable to execute HTTP request: Connect to sts.amazonaws.com:443 [sts.amazonaws.com/209.54.180.124] failed: connect timed out: com.amazonaws.SdkClientException
com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to sts.amazonaws.com:443 [sts.amazonaws.com/209.54.180.124] failed: connect timed out
我想知道,这种间歇性故障背后的原因可能是什么,以及我们如何解决它。我还想知道间歇性超时是否是 STS 呼叫的常见问题?
我尝试过的事情:
1)。而不是 global end-point sts.amazonaws.com
,我将 end-point 配置为是sts.us-east-1.amazonaws.com
因为我在 us-east-1 区域中运行 lambda。我们仍然能够看到同样的错误。
2)。它没有 VPC 端点,所以我创建了 VPC 端点。现在它不会抛出超时错误。但我不确定这是否是预期的修复。如果是修复,那么 STS 调用将一直超时。如果没有 VPC 端点,那么大部分时间它如何能够与 sts.amazonaws.com 连接?
如果需要,我可以提供更多信息。
更多信息:Lambda 函数附加了 3 个子网。2个私人1个公共。所有子网的路由表。
VPCStack Private Route Table 1 :
Destination Target
10.0.0.0/16 local
0.0.0.0/0 nat-####1
pl-63a5400a vpce-####3
VPCStack Private Route Table 2 :
Destination Target
10.0.0.0/16 local
0.0.0.0/0 nat-####2
pl-63a5400a vpce-####4
VPCStack Public Route Table :
Destination Target
10.0.0.0/16 local
0.0.0.0/0 igw-####5
pl-63a5400a vpce-####
谢谢。