python - 如何使用 aws_cdk 将资源参数从一个堆栈传递到另一个堆栈

标签 python amazon-web-services aws-cloudformation aws-cdk

我正在尝试为 2 个资源(即 lambda 函数和 API 网关)创建两个单独的堆栈。下面是我的 app.py 中的代码

import aws_cdk as cdk
from Stack.lambda_function.hello_handler_stack import HelloHandlerStack
from Stack.apigateway.hello_handler_apigateway_handler import HelloHandlerApigatewayStack
app = cdk.App()

Stack1 = HelloHandlerStack(app, "HelloHandlerStack", env=cdk.Environment(Account="**",Region="*"))

Stack2 = HelloHandlerApigatewayStack(app, "HelloHandlerApigatewayStack", env=cdk.Environment(Account="**",Region="*"), temp_lambda = Stack1.my_lambda)

app.synth()

hello_handler_stack.py

from constructs import Construct
from aws_cdk import (
    Stack,
    aws_lambda as _lambda,
)

class HelloHandlerStack(Stack):

    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        my_lambda = _lambda.Function(
            self, 'HelloHandler',
            runtime=_lambda.Runtime.PYTHON_3_7,
            code=_lambda.Code.from_asset('lambda'),
            handler='hello.handler',
        )
        self.my_lambda = my_lambda

hello_handler_apigateway_handler.py

from constructs import Construct
from aws_cdk import (
    Stack,
    aws_lambda as _lambda,
    aws_apigateway as apigw,
)


class HelloHandlerApigatewayStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        apigw.LambdaRestApi(
          self, 'Endpoint',
          handler=kwargs["test_lambda"],
        )

但是当我执行 cdk ls 时,我收到一条错误消息

TypeError: Stack.init() got an unexpected keyword argument 'test_lambda'

我应该能够将关键字参数传递给第二个堆栈并使用它来构建 api 网关,在调用类时我还应该提供任何其他引用吗?

感谢任何帮助。

最佳答案

已调试问题。必须在构造函数调用内部传递的构造函数参数定义中写入关键字参数。

hello_handler_apigateway_handler.py

from constructs import Construct
from aws_cdk import (
    Stack,
    aws_lambda as _lambda,
    aws_apigateway as apigw,
)


class HelloHandlerApigatewayStack(Stack):
    def __init__(self, scope: Construct, id: str, test_lambda, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
    apigw.LambdaRestApi(
      self, 'Endpoint',
      handler=test_lambda,
    )

关于python - 如何使用 aws_cdk 将资源参数从一个堆栈传递到另一个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72699856/

相关文章:

aws-cloudformation - Cloudformation 中有没有办法让 IAM 策略使用条件资源

python - PyQT 图形用户界面测试

python - 如何覆盖 python 应用引擎模型上的 put() 方法?

amazon-web-services - AWS 事件规则不起作用

postgresql - 在 AWS RDS PostgreSQL 实例中启用地理数据库

amazon-web-services - "Basic health checks must not have an metric region specified."

amazon-web-services - Lambda 函数不适用于云形成部署

python - 如何使用 selenium 在 firefox 中禁用 javascript?

python - 为什么 .isascii() 在 google colab 上不起作用?

amazon-web-services - 无法访问 ec2 上新连接的网络接口(interface) ip