在 CloudFormation 中,如何在 Events::Rule 中定位 Lambda 别名

rai*_*bba 5 aws-cloudformation aws-lambda aws-sam

我正在尝试按计划触发 Lambda:alias(别名是此处的关键)。以下代码错误

“SampleLambdaLiveAlias 无效。原因:提供的 Arn 格式不正确。(服务:AmazonCloudWatchEvents;状态代码:400;错误代码:ValidationException;”

如何在 CloudFormation 中正确定位 lambda:alias?我试过了!Ref!Sub只是逻辑名称。

我检索最新 lambda 版本的自定义资源方法似乎是设置“实时”别名的必要之恶,因为即使在删除 lambda 和堆栈并且新别名需要有效版本之后,AWS 仍会维护旧的 lambda 版本。如果有人知道解决该问题的更优雅的方法,请参阅:how-to-use-sam-deploy-to-get-a-lambda-with-autopublishalias-and-additional-alises

SampleLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: SampleLambda
        AutoPublishAlias: staging
        CodeUri: src/
        Handler: SampleLambda.handler
        MemorySize: 512
        Runtime: nodejs12.x
        Role: !GetAtt SampleLambdaRole.Arn
SampleLambdaLiveAlias:
    Type: AWS::Lambda::Alias
    Properties:
        FunctionName: !Ref SampleLambdaFunction
        FunctionVersion: !GetAtt SampleLambdaGetMaxVersionFunction.version
        Name: live
SampleLambdaFunctionScheduledEvent:
    Type: AWS::Events::Rule
    Properties:
        State: ENABLED
        ScheduleExpression: rate(1 minute) # same as cron(0/1 * * * ? *)
        Description: Run SampleLambdaFunction once every 5 minutes.
        Targets:
        - Id: EventSampleLambda
            Arn: SampleLambdaLiveAlias
Run Code Online (Sandbox Code Playgroud)

Kri*_*iev 5

您的错误位于您共享的配置的最后一行。为了获取资源 ARN,您需要使用 Ref 内部函数,例如!Ref SampleLambdaLiveAlias

SampleLambdaFunctionScheduledEvent:
    Type: AWS::Events::Rule
    Properties:
        State: ENABLED
        ScheduleExpression: rate(1 minute) # same as cron(0/1 * * * ? *)
        Description: Run SampleLambdaFunction once every 5 minutes.
        Targets:
        - Id: EventSampleLambda
            Arn: !Ref SampleLambdaLiveAlias
Run Code Online (Sandbox Code Playgroud)

请注意,Ref 内部函数可能会针对不同类型的资源返回不同的内容。对于 Lambda 别名,它返回 ARN,正是您所需要的。

您可以查看官方文档以了解更多详细信息。