Amazon web services 云观察事件触发云形成
我在为cloudwatch事件触发器编写cloudformation脚本以启动lambda脚本时遇到了一些问题,我知道我可以通过控制台来完成,但我的要求是我需要在cloudformation中提供所有内容。我遵循了文档,但它仍然不适用于我,我不断地发现错误: 模板包含错误。模板属性或属性无效 [rPermissionForEventsToInvokeLambda,rlambda Scheduledrule] 有人能指出我的cloudformation脚本的这部分有什么问题吗?我几乎完全按照文档进行操作,但仍然有错误,即使文档中的示例在我尝试验证它时也有相同的错误。我的cloudformation代码如下,任何帮助都将不胜感激Amazon web services 云观察事件触发云形成,amazon-web-services,yaml,amazon-cloudformation,Amazon Web Services,Yaml,Amazon Cloudformation,我在为cloudwatch事件触发器编写cloudformation脚本以启动lambda脚本时遇到了一些问题,我知道我可以通过控制台来完成,但我的要求是我需要在cloudformation中提供所有内容。我遵循了文档,但它仍然不适用于我,我不断地发现错误: 模板包含错误。模板属性或属性无效 [rPermissionForEventsToInvokeLambda,rlambda Scheduledrule] 有人能指出我的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::RuleTargets属性需要资源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"
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
2) 创建CloudWatch事件时,需要将步骤1中创建的lambda函数的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"
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。
您需要在模板中纠正的一些问题:
- 更正资源
的目标属性rLambdaScheduledRule
- 从资源
中删除Action属性rLambdaScheduledRule
- 更正resource
rPermissionForEventsToInvokeLambda的FunctionName属性
保留以上示例作为参考,更正模板并重试。这是完整的cloudformation模板吗?既然它在抱怨rLambdaScheduledRule和rppermissionforeventsinvokelambda,也许它们没有被置于“资源”之下?只是一个猜测。。。