【问题标题】:Unable to add lambda target in scheduled rule in AWS cloudwatch无法在 AWS cloudwatch 的计划规则中添加 lambda 目标
【发布时间】:2020-02-05 17:18:08
【问题描述】:

我实际上是在 .net 中的 aws cloudwatch 中创建一个预定规则作为 lambda 目标,但我无法将我的 lambda 添加为目标。

这里有什么问题

   `var region = RegionEndpoint.GetBySystemName("us-east-2");`
        `AmazonCloudWatchEventsClient client = new AmazonCloudWatchEventsClient(region);`
        `AmazonLambdaClient lambda = new AmazonLambdaClient();`
        `var putRuleRequest = new PutRuleRequest`
        `{`
           ` Name = "Rule1check",`
            `ScheduleExpression = "cron(0 11 24 * ? 2020)",`
            `State = RuleState.ENABLED,`

        `};`
        `//var putTargetRequest =  "EC2 RebootInstances API call`
        `var putRuleResponse = client.PutRuleAsync(putRuleRequest);`
        `AddPermissionRequest lambdaparam = new AddPermissionRequest`
        `{`
           ` Action = "lambda:InvokeFunction",`
            `FunctionName = "stop_ec2",`
            `Principal = "events.amazonaws.com",`
            `SourceArn = putRuleResponse.ToString(),`
            `StatementId = "ID-1"`
        `};`
       `lambda.AddPermissionAsync(lambdaparam);`
        `var putTargetRequest = new PutTargetsRequest`
       ` {`
            `Rule = "Rule1check",`
            `Targets =`
            `{`
                `new Target { Arn = "arn:aws:lambda:us-east-2:394451858625:function:stop_ec2",` 
                    `Id = "myCloudWatchEventsTarget",`
                    `Input = "{\"region\": \"us-east-2\",\"instances\": \"*******\"}"`
               ` }`
               ` }`
            `};`
        `client.PutTargetsAsync(putTargetRequest);`

【问题讨论】:

标签: c# amazon-web-services lambda amazon-cloudwatch


【解决方案1】:

这里有一些问题。

  1. SourceArn = putRuleResponse.ToString()PutRuleResponse 对象包含 RuleArn 属性。这就是你应该使用的。 SourceArn = putRuleResponse.RuleArn
  2. client.PutRuleAsync(putRuleRequest) 是一个async 电话,但你不是awaiting。因此,您得到的是 Task<PutRuleResponse>,而不是 PutRuleResponse,而且您在操作可能完成之前就得到了它。
  3. 你没有awaiting 任何东西,这在处理依赖项时可能是个问题。

【讨论】:

  • 嗨,但我没有规则 arn 属性
  • 那是因为您没有在通话中使用await(请参阅第二点)。所以你得到的对象是Task<PutRuleResponse>。如果您添加await,您将获得PutRuleResponse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2021-05-13
  • 2017-11-01
  • 2019-11-18
相关资源
最近更新 更多