簡體   English   中英

如何使用 aws_cdk 將資源參數從一個堆棧傳遞到另一個堆棧

[英]How to pass resource parameter from one stack to another using 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 時,我收到一條錯誤消息

類型錯誤:堆棧。 init () 得到了一個意外的關鍵字參數“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,
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM