【问题标题】:CDK Unable to create a CloudWatch Logs SubscriptionFilterCDK 无法创建 CloudWatch Logs SubscriptionFilter
【发布时间】:2020-01-05 13:04:54
【问题描述】:

我尝试使用 CDK 框架创建 Cloud Watch Logs 订阅过滤器,但没有成功。

from aws_cdk import (
    aws_kinesis,
    aws_iam,
    aws_logs,
    core
)


class LambdaStack(core.Stack):
    def __init__(self, app: core.App, id: str, **kwargs) -> None:
        super().__init__(app, id, **kwargs)

        stream = aws_kinesis.Stream(
            self,
            "datalake-stream",
            stream_name="datalake-stream"
        )

        role = aws_iam.Role(
            self,
            "datalake-role",
            role_name="datalake-role",
            assumed_by=aws_iam.ServicePrincipal('logs.eu-west-1.amazonaws.com')
        )

        role.add_to_policy(aws_iam.PolicyStatement(
            actions=['kinesis:PutRecord'],
            resources=[stream.stream_arn],
        ))

        role.add_to_policy(aws_iam.PolicyStatement(
            actions=['iam:PassRole'],
            resources=[role.role_arn],
        ))

        log_group = aws_logs.LogGroup(
            self,
            "datalake-logroup",
            log_group_name="/test")

        aws_logs.SubscriptionFilter(
            self,
            "-datalake-subscriptionfilter",
            log_group=log_group,
            filter_pattern=aws_logs.FilterPattern().all_events,
            destination=stream
        )


app = core.App()
LambdaStack(app, "cwllogstos3", env={'region': 'eu-west-1'})
app.synth()

我收到了这些错误:

$ cdk 部署

Traceback(最近一次调用最后一次):文件“infra.py”,第 52 行,在 LambdaStack(app, "cwllogstos3", env={'region': 'eu-west-1'}) 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_runtime.py", 第 66 行,在 调用 inst = super().call(*args, **kwargs) 文件“infra.py”,第 47 行,在 init 目的地=流文件“/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_runtime.py”, 第 66 行,在 调用 inst = super().call(*args, **kwargs) 文件“/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/aws_cdk /aws_logs/init.py", 第 2060 行,在 init 中 jsii.create(SubscriptionFilter, self, [scope, id, props]) 文件“/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/初始化.py", 第 207 行,在创建中 args=_make_reference_for_native(self, args), 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init.py ", 第 119 行,在 _make_reference_for_native 返回 [_make_reference_for_native(kernel, i) for i in d] 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init强>.py", 第 119 行,在 返回 [_make_reference_for_native(kernel, i) for i in d] 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init强>.py", 第 124 行,在 _make_reference_for_native 返回 _make_reference_for_native(kernel, struct_data) 文件“/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init.py”, 第 117 行,在 _make_reference_for_native 返回 {k: _make_reference_for_native(kernel, v) for k, v in d.items()} 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init.py", 第 117 行,在 返回 {k: _make_reference_for_native(kernel, v) for k, v in d.items()} 文件 "/Users/enrico.pesce/Documents/GitHub/cwllogstos3/venv/lib/python3.7/site-packages/jsii/_kernel/init.py", 第 130 行,在 _make_reference_for_native d.jsii__type = "Object" AttributeError: 'method' object has no attribute 'jsii__type' Subprocess exited with error 1

【问题讨论】:

    标签: python aws-cdk


    【解决方案1】:

    我认为问题出在这一行:

    filter_pattern=aws_logs.FilterPattern().all_events
    

    您正在传递对方法 all_events 的引用。但是你应该传递一个IFilterPattern 接口的实例。

    尝试将其更改为:

    filter_pattern=aws_logs.FilterPattern().all_events()
    

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2020-11-10
      • 1970-01-01
      • 2020-11-28
      • 2021-04-09
      • 2021-10-03
      • 2020-12-05
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多