Amazon web services Lambda@Edge直通式SDK

Amazon web services Lambda@Edge直通式SDK,amazon-web-services,go,aws-lambda,amazon-cloudfront,aws-lambda-edge,Amazon Web Services,Go,Aws Lambda,Amazon Cloudfront,Aws Lambda Edge,我想把一个Lambda@Edge函数使用AWS Go SDK 在控制台中手动创建函数,并使用SDK=>将其分配给Cloudfront发行版 在代码中创建函数(使用与1相同的IAM角色),不分配给cloudfront=>有效 从2分配创建的函数。在控制台手动=>失败 从2分配创建的函数。通过SDK=>失败 正在部署从2创建的函数。在lambda控制台中手动(操作=>部署到lambda@edge)=>有效=>在此之后,可以手动和代码分配功能,而不存在任何问题 3中的错误。四,。是一样的: Inval

我想把一个Lambda@Edge函数使用AWS Go SDK

  • 在控制台中手动创建函数,并使用SDK=>将其分配给Cloudfront发行版

  • 在代码中创建函数(使用与1相同的IAM角色),不分配给cloudfront=>有效

  • 从2分配创建的函数。在控制台手动=>失败

  • 从2分配创建的函数。通过SDK=>失败

  • 正在部署从2创建的函数。在lambda控制台中手动(操作=>部署到lambda@edge)=>有效=>在此之后,可以手动和代码分配功能,而不存在任何问题

  • 3中的错误。四,。是一样的:

    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的错误并没有真正起到帮助作用


    希望这能帮助任何人

    出于好奇,如果在添加权限和分配函数之间添加延迟,会有帮助吗?“我会尝试最多5分钟,以防最终出现一致性问题。@BenWhaley说得对.”。。经常发生在w/AWS。。但是,是的,我确实试着推迟了。。还是不走运。