serverless.yml中用于Lambda @ Edge的无服务器功能ARN

时间:2018-10-25 00:11:59

标签: amazon-web-services serverless-framework serverless

我正在尝试确定是否有可能获取在serverless.yml文件中定义的Lambda函数的ARN,以在CloudFront发行版的Lambda @ Edge的同一文件中使用。

我的代码在下面,就在底部,我想指定我在同一无服务器文件中定义的Lambda函数的ARN。

谢谢。

functions:

    myLambdaFunction:
        handler: handler.myLambdaFunction

resources:
    Resources:

        WebsiteS3Bucket:
            Type: AWS::S3::Bucket
            Properties: 
                BucketName: website-bucket
                WebsiteConfiguration:
                    ErrorDocument: index.html
                    IndexDocument: index.html

        WebsiteCloudFrontOriginAccessIdentity:
            Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
            Properties:
                CloudFrontOriginAccessIdentityConfig:
                    Comment: website-bucket-cloudfront-origin-access-identity

        WebsiteS3BucketPolicy:
            Type: AWS::S3::BucketPolicy
            Properties: 
                Bucket: 
                    Ref: WebsiteS3Bucket
                PolicyDocument: 
                    Statement: 
                        - 
                            Action: 
                                - "s3:GetObject"
                                - "s3:ListBucket"
                            Effect: "Allow"
                            Resource: 
                                - Fn::Join: 
                                    - ""
                                    - 
                                        - Fn::GetAtt: [ WebsiteS3Bucket, Arn ]
                                        - "/*"
                                - Fn::Join: 
                                    - ""
                                    - 
                                        - Fn::GetAtt: [ WebsiteS3Bucket, Arn ]
                            Principal:
                                AWS:
                                    Fn::Join:
                                        - ""
                                        -
                                            - "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity "
                                            - Ref: WebsiteCloudFrontOriginAccessIdentity

        WebsiteCloudFront:
            Type: AWS::CloudFront::Distribution
            Properties:
                DistributionConfig: 
                    Enabled: true
                    Origins:
                        -
                            DomainName:
                                Fn::Join:
                                    - ""
                                    -
                                        - Ref: WebsiteS3Bucket
                                        - ".s3.amazonaws.com"
                            Id:
                                Ref: WebsiteS3Bucket
                            S3OriginConfig:
                                OriginAccessIdentity:
                                    Fn::Join:
                                        - ""
                                        -
                                            - "origin-access-identity/cloudfront/"
                                            - Ref: WebsiteCloudFrontOriginAccessIdentity
                    CustomErrorResponses:
                        -
                            ErrorCode: 404
                            ResponseCode: 200
                            ResponsePagePath: /index.html
                    DefaultRootObject: /index.html
                    DefaultCacheBehavior:
                        ForwardedValues:
                            QueryString: true
                        TargetOriginId:
                            Ref: WebsiteS3Bucket
                        ViewerProtocolPolicy: redirect-to-https
                        LambdaFunctionAssociations:
                            -
                                EventType: origin-response
                                LambdaFunctionARN: ## Lambda function ARN here

1 个答案:

答案 0 :(得分:1)

Ref: myLambdaFunction

您似乎已经在模板中引用了Ref。这是关于在Lambda函数上使用Ref时的值的参考:

Ref Documentation

我通常通过以下方式引用它们:

!GetAtt [LambdaResourceName, Arn]