在 CloudFormation 中,如何在 Events::Rule 中定位 Lambda 别名
In CloudFormation, how do I target a Lambda alias in Events::Rule
我正在尝试按计划触发 Lambda:alias(别名在这里很关键)。以下代码错误
"SampleLambdaLiveAlias is not valid. Reason: Provided Arn is not in
correct format. (Service: AmazonCloudWatchEvents; Status Code: 400;
Error Code: ValidationException;"
如何在 CloudFormation 中正确定位 lambda:alias?我试过 !Ref
、!Sub
和逻辑名称。
我检索最新 lambda 版本的自定义资源方法似乎是设置“实时”别名的必要之恶,因为 AWS 维护旧的 lambda 版本,即使在您删除 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
您的错误出现在您共享的配置的最后一行。为了获取资源 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
请注意,Ref 内部函数对于不同类型的资源可能 return 不同。对于 Lambda 别名,它 return 是 ARN,正是您所需要的。
您可以查看 official documentation 了解更多详情。
我正在尝试按计划触发 Lambda:alias(别名在这里很关键)。以下代码错误
"SampleLambdaLiveAlias is not valid. Reason: Provided Arn is not in correct format. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException;"
如何在 CloudFormation 中正确定位 lambda:alias?我试过 !Ref
、!Sub
和逻辑名称。
我检索最新 lambda 版本的自定义资源方法似乎是设置“实时”别名的必要之恶,因为 AWS 维护旧的 lambda 版本,即使在您删除 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
您的错误出现在您共享的配置的最后一行。为了获取资源 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
请注意,Ref 内部函数对于不同类型的资源可能 return 不同。对于 Lambda 别名,它 return 是 ARN,正是您所需要的。
您可以查看 official documentation 了解更多详情。