gpt4 book ai didi

amazon-web-services - cloudwatch事件触发cloudformation

转载 作者:行者123 更新时间:2023-12-03 07:18:20 35 4
gpt4 key购买 nike

我在为 cloudwatch 事件触发器编写 cloudformation 脚本来启动 lambda 脚本时遇到一些麻烦,我知道我可以通过控制台来完成此操作,但我的要求是我需要在 cloudformation 中配置所有内容。我按照文档进行操作,但它仍然对我不起作用,而且我不断收到错误:

Template contains errors.: Invalid template property or properties [rPermissionForEventsToInvokeLambda, rLambdaScheduledRule]

有人可以指出我的 cloudformation 脚本的这一部分有什么问题吗?我几乎完全按照文档进行操作,但仍然有错误,即使文档中的示例在我尝试验证它时也有相同的错误。我的云信息代码如下,感谢任何帮助!

rLambdaScheduledRule:
Type: AWS::Events::Rule
Properties:
ScheduleExpression: rate(1 hour)
State: ENABLED
Targets:
Ref:
Fn::ImportValue:
Fn::Sub: rUploadLambda
Action: lambda:InvokeFunction
rPermissionForEventsToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName:
Ref:
Fn::ImportValue:
Fn::Sub: rUploadLambda
Action: lambda:InvokeFunction
Principal: events.amazonaws.com
SourceArn:
Fn::GetAtt:
- rLambdaScheduledRule
- Arn

最佳答案

1) 您必须在创建 lambda 函数的 CloudFormation 模板中导出 Lambda 函数 ARN。您需要将 Lambda 函数 ARN 作为输入传递给 cloudwatch 事件(AWS::Events::Rule Targets 属性需要资源 ARN )。

请参阅下面的示例脚本:

Resources:
# Create Controlled Lambda Function
myLambda:
Type: "AWS::Lambda::Function"
Properties:
Code:
S3Bucket: "lambda-bucket"
S3Key: "myhandler.zip"
Description: "Lambda handler"
FunctionName: "myhandler"
Handler: myhandler.myhandler
MemorySize: 128
Role: "arn:aws:iam::xxxxxxxxxxx:role/myLambdaExecutionRole-NC7FA7TUSZ5B"
Runtime: "python3.6"
Timeout: 10

# Output of the cf template
Outputs:
myLambdaArn:
Description: Arn of the my_lambda_function
Value: !GetAtt myLambda.Arn
Export:
Name: !Sub "${AWS::StackName}-LambdaArn"

2) 当您创建CloudWatch Event时,您需要传递在步骤1中创建的lambda函数的ARN作为>目标

请参阅下面的示例脚本:

Resources:
# Cloudwatch event to trigger lambda periodically
rLambdaScheduledRule:
Type: "AWS::Events::Rule"
Properties:
Description: "CloudWatch Event to trigger lambda fn"
ScheduleExpression: "rate(1 hour)"
State: "ENABLED"
Targets:
-
Arn:
Fn::ImportValue:
!Sub "${NetworkStackName}-LambdaArn"
Id: "targetevent_v1"

PermissionForEventsToInvokeLambda:
Type: "AWS::Lambda::Permission"
Properties:
FunctionName:
Fn::ImportValue:
!Sub "${NetworkStackName}-LambdaArn"
Action: "lambda:InvokeFunction"
Principal: "events.amazonaws.com"
SourceArn:
Fn::GetAtt:
- rLambdaScheduledRule
- Arn

${NetworkStackName} 的值应为步骤 1 中的StackName。您需要在模板中更正的一些问题:

  • 更正资源 rLambdaScheduledRuleTargets 属性。
  • 从资源 rLambdaScheduledRule 中删除 Action 属性。
  • 更正资源 rPermissionForEventsToInvokeLambdaFunctionName 属性。

保留上述示例作为引用,更正您的模板并重试。

关于amazon-web-services - cloudwatch事件触发cloudformation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47194910/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com