Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用AWS CDK时Lambda函数无法实例化_Amazon Web Services_Aws Lambda_Python 3.7_Aws Cdk - Fatal编程技术网

Amazon web services 使用AWS CDK时Lambda函数无法实例化

Amazon web services 使用AWS CDK时Lambda函数无法实例化,amazon-web-services,aws-lambda,python-3.7,aws-cdk,Amazon Web Services,Aws Lambda,Python 3.7,Aws Cdk,我试图使用AWS CDK部署一个Lambda函数,该函数将由S3上载事件触发。当我尝试执行cdk ls或cdk synth时,我得到了错误: Traceback (most recent call last): File "app.py", line 14, in <module> S3TosqsStack(app, "S3TosqsStack", env=core.Environment(account=os.getenv('CD

我试图使用AWS CDK部署一个Lambda函数,该函数将由S3上载事件触发。当我尝试执行
cdk ls
cdk synth
时,我得到了错误:

Traceback (most recent call last):
  File "app.py", line 14, in <module>
    S3TosqsStack(app, "S3TosqsStack", env=core.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')))
  File "/home/ec2-user/s3tosqs/.venv/lib64/python3.7/site-packages/jsii/_runtime.py", line 83, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/ec2-user/s3tosqs/s3tosqs/s3tosqs_stack.py", line 37, in __init__
    bucket=s3.IBucket(bucket_name=lambda_deployment_bucket),
  File "/home/ec2-user/s3tosqs/.venv/lib64/python3.7/site-packages/typing_extensions.py", line 1548, in _no_init
    raise TypeError('Protocols cannot be instantiated')
TypeError: Protocols cannot be instantiated
Subprocess exited with error 1

您是否尝试过使用bucket和from_bucket_name使用bucket引用

        lambda_function = _lambda.Function(
        self, 'S3toSQS',
        runtime=_lambda.Runtime.PYTHON_3_8,
        code=_lambda.Code.from_bucket(
            bucket=s3.Bucket.from_bucket_name(self, "id",bucket_name=lambda_deployment_bucket),
            key='S3toSQS.zip'),
        handler='handler.publish_SQS_message',
        environment={'SOURCE_BUCKET': trigger_bucket,
                     'REGION': region,
                     'QUEUE_NAME': queue.queue_name}
    )

您遇到的问题可能有两个原因

  • 修改代码,如下所示。修改在第4行,以调用“from_bucket”方法的参数的方式进行
  • lambda\u函数=\u lambda.function(
    self,'S3toSQS',
    runtime=\u lambda.runtime.PYTHON\u 3\u 8,
    code=\u lambda.code.from\u bucket(s3.IBucket(bucket\u name=lambda\u deployment\u bucket),'S3toSQS.zip'),
    handler='handler.publish_SQS_message',
    环境={'SOURCE_BUCKET':触发器_BUCKET,
    "地区":地区,,
    “队列名称”:队列名称}
    )
    
  • 您正在使用Python 3.7运行CDK代码。据我所知,该版本的Python不支持协议类型,因此出现了错误。尝试升级到Python 3.8
  •         lambda_function = _lambda.Function(
            self, 'S3toSQS',
            runtime=_lambda.Runtime.PYTHON_3_8,
            code=_lambda.Code.from_bucket(
                bucket=s3.Bucket.from_bucket_name(self, "id",bucket_name=lambda_deployment_bucket),
                key='S3toSQS.zip'),
            handler='handler.publish_SQS_message',
            environment={'SOURCE_BUCKET': trigger_bucket,
                         'REGION': region,
                         'QUEUE_NAME': queue.queue_name}
        )