Lambda 无法在 VPC 内为 CodePipeline 执行 putjobSuccess
Lambda can't execute putjobSuccess for CodePipeline inside a VPC
我正在尝试创建一个与 CodePipeline 一起使用的 Lambda 函数。问题是它无法将作业成功信息发送到 CodePipeline。
我正在使用 javascript aws-sdk,AWS.CodePipeline 对象中的函数 putJobSuccessResult 在生产环境中执行不正常。
const AWS = require('aws-sdk');
const codepipeline = new AWS.CodePipeline();
exports.config = (event, context) => {
// Retrieve the Job ID from the Lambda action
const jobId = event['CodePipeline.job'].id;
return codepipeline.putJobSuccessResult({ jobId }).promise();
};
当我放置我的管道的 jobId 时,这段代码在本地运行良好,但是当我将代码上传到 AWS 控制台和 运行 管道时,它不再工作了。
这是特定于 CodePipeline 部分的 Lambda 的 IAM 配置:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codepipeline:PutJobSuccessResult",
"codepipeline:PutJobFailureResult"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
对于为什么它在云上不起作用,您有什么想法吗?
您的 VPC 中的 lambda 超时的一个很可能的原因是它 无法访问互联网 因为它没有 public 知识产权。来自 docs:
Connect your function to private subnets to access private resources. If your function needs internet access, use NAT. Connecting a function to a public subnet does not give it internet access or a public IP address.
要纠正此问题,应检查以下:
- 是私有子网中的 lambda
- public 子网
中是否有 NAT gateway/instance
- 是否正确配置了从私有子网到 NAT 设备的路由表以启用互联网访问
或者,可以考虑为 CodePiepline 使用(或检查是否存在)VPC interface endpoint。该接口,如果正确设置,可以在没有互联网的情况下从 lambda 函数访问 CodePipeline。
我正在尝试创建一个与 CodePipeline 一起使用的 Lambda 函数。问题是它无法将作业成功信息发送到 CodePipeline。 我正在使用 javascript aws-sdk,AWS.CodePipeline 对象中的函数 putJobSuccessResult 在生产环境中执行不正常。
const AWS = require('aws-sdk');
const codepipeline = new AWS.CodePipeline();
exports.config = (event, context) => {
// Retrieve the Job ID from the Lambda action
const jobId = event['CodePipeline.job'].id;
return codepipeline.putJobSuccessResult({ jobId }).promise();
};
当我放置我的管道的 jobId 时,这段代码在本地运行良好,但是当我将代码上传到 AWS 控制台和 运行 管道时,它不再工作了。
这是特定于 CodePipeline 部分的 Lambda 的 IAM 配置:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codepipeline:PutJobSuccessResult",
"codepipeline:PutJobFailureResult"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
对于为什么它在云上不起作用,您有什么想法吗?
您的 VPC 中的 lambda 超时的一个很可能的原因是它 无法访问互联网 因为它没有 public 知识产权。来自 docs:
Connect your function to private subnets to access private resources. If your function needs internet access, use NAT. Connecting a function to a public subnet does not give it internet access or a public IP address.
要纠正此问题,应检查以下:
- 是私有子网中的 lambda
- public 子网 中是否有 NAT gateway/instance
- 是否正确配置了从私有子网到 NAT 设备的路由表以启用互联网访问
或者,可以考虑为 CodePiepline 使用(或检查是否存在)VPC interface endpoint。该接口,如果正确设置,可以在没有互联网的情况下从 lambda 函数访问 CodePipeline。