通过 Go SDK 的 Lambda@Edge
Lambda@Edge through Go SDK
我正在尝试使用 AWS Go SDK 关联 Lambda@Edge 函数。
在控制台中手动创建函数 并 使用 SDK 将其分配给 Cloudfront 发行版 => 有效.
在代码中创建函数(使用与 1. 相同的 IAM 角色)w/o 分配给云端 => works.
在控制台中手动分配 2. 创建的函数 => 失败.
通过 SDK 分配 2. 创建的函数 => 失败.
在 lambda 控制台中手动部署从 2. 创建的函数(操作 => 部署到 lambda@edge)=> works。 => 在此之后,可以手动和通过代码分配函数 w/o 问题...
3.和4.的错误是一样的:
InvalidLambdaFunctionAssociation: Lambda@Edge cannot retrieve the specified Lambda function. Update the IAM policy to add permission: lambda:GetFunction for resource: arn:aws:lambda:us-east-1:123456789:function:example:1 and try again.
让我感到困惑的是,我正在重用在 1 期间创建的相同角色。
这是我通过代码创建函数的方式:
lam := lambda.New(session)
lam.CreateFunction(&lambda.CreateFunctionInput{
FunctionName: aws.String("example"),
Handler: aws.String("index.handler"),
Runtime: aws.String("nodejs12.x"),
Role: aws.String("arn:aws:iam::123456:role/service-role/existing-role"),
Code: &lambda.FunctionCode{
S3Bucket: aws.String("bucket-xyz"),
S3Key: aws.String("source.zip"),
},
}) // works w/o issues
lam.AddPermission(&lambda.AddPermissionInput{
FunctionName: aws.String("example"),
StatementId: aws.String("AllowExecutionFromCloudFront"),
SourceArn: aws.String("arn:aws:cloudfront::12333456:distribution/CDNID1234"),
Principal: aws.String("edgelambda.amazonaws.com"),
Action: aws.String("lambda:GetFunction"),
}) // also works w/o error
// assigning the created lambda function would now fail
使用
1.13
github.com/aws/aws-sdk-go v1.31.8
我发现了问题。
该错误与实际问题完全无关。如果你问我,这是非常具有误导性的错误。
所缺少的只是手头的 lambda 函数的发布版本。
要使用 Go SDK 实现这一点,您必须执行以下操作:
lam := lambda.New(session)
lam.PublishVersion(&lambda.PublishVersionInput{
FunctionName: aws.String("example"),
Description: aws.String("Dont forget to publish ;)"),
})
使用 CLI,您需要执行以下操作:
aws lambda publish-version --function-name example --description "Dont forget to publish"
未发布的功能不能使用其实是有道理的。然而,AWS 的错误并没有真正帮助那里。
希望这可以帮助到任何人!
我正在尝试使用 AWS Go SDK 关联 Lambda@Edge 函数。
在控制台中手动创建函数 并 使用 SDK 将其分配给 Cloudfront 发行版 => 有效.
在代码中创建函数(使用与 1. 相同的 IAM 角色)w/o 分配给云端 => works.
在控制台中手动分配 2. 创建的函数 => 失败.
通过 SDK 分配 2. 创建的函数 => 失败.
在 lambda 控制台中手动部署从 2. 创建的函数(操作 => 部署到 lambda@edge)=> works。 => 在此之后,可以手动和通过代码分配函数 w/o 问题...
3.和4.的错误是一样的:
InvalidLambdaFunctionAssociation: Lambda@Edge cannot retrieve the specified Lambda function. Update the IAM policy to add permission: lambda:GetFunction for resource: arn:aws:lambda:us-east-1:123456789:function:example:1 and try again.
让我感到困惑的是,我正在重用在 1 期间创建的相同角色。
这是我通过代码创建函数的方式:
lam := lambda.New(session)
lam.CreateFunction(&lambda.CreateFunctionInput{
FunctionName: aws.String("example"),
Handler: aws.String("index.handler"),
Runtime: aws.String("nodejs12.x"),
Role: aws.String("arn:aws:iam::123456:role/service-role/existing-role"),
Code: &lambda.FunctionCode{
S3Bucket: aws.String("bucket-xyz"),
S3Key: aws.String("source.zip"),
},
}) // works w/o issues
lam.AddPermission(&lambda.AddPermissionInput{
FunctionName: aws.String("example"),
StatementId: aws.String("AllowExecutionFromCloudFront"),
SourceArn: aws.String("arn:aws:cloudfront::12333456:distribution/CDNID1234"),
Principal: aws.String("edgelambda.amazonaws.com"),
Action: aws.String("lambda:GetFunction"),
}) // also works w/o error
// assigning the created lambda function would now fail
使用
1.13
github.com/aws/aws-sdk-go v1.31.8
我发现了问题。
该错误与实际问题完全无关。如果你问我,这是非常具有误导性的错误。
所缺少的只是手头的 lambda 函数的发布版本。
要使用 Go SDK 实现这一点,您必须执行以下操作:
lam := lambda.New(session)
lam.PublishVersion(&lambda.PublishVersionInput{
FunctionName: aws.String("example"),
Description: aws.String("Dont forget to publish ;)"),
})
使用 CLI,您需要执行以下操作:
aws lambda publish-version --function-name example --description "Dont forget to publish"
未发布的功能不能使用其实是有道理的。然而,AWS 的错误并没有真正帮助那里。
希望这可以帮助到任何人!