簡體   English   中英

如何在 AWS CDK Python 中將隊列 object 從一個堆棧引用到另一個堆棧?

[英]How to refer an queue object from one stack to another stack in AWS CDK Python?

每當Acct 中存在EC2 終止時,我試圖將一個賬戶(Acct. 1)中的EC2 終止事件發送到另一個賬戶(Acct. 2)中的SQS 隊列。 1.

我正在使用 AWS CDK 來實現此功能。

  • 堆棧 A 用於構建事件橋規則以將終止事件發布到 Acct 中的 SQS 隊列。 1.
  • Stack B 用於在 Acct 中構建 SQS 隊列。 2.

我面臨的問題是將 SQS 隊列 object 從堆棧 B 獲取到堆棧 A,因此我可以將其添加為事件橋規則的目標。

以下是我嘗試過的代碼:

堆棧 B

# This is the Queue
    TerminationQueue = sqs.Queue(
        self,
        'Queue',
        queue_name = 'TerminationQueue',
        delivery_delay = cdk.Duration.seconds(300),
        visibility_timeout = cdk.Duration.seconds(300),
        retention_period=cdk.Duration.seconds(7200)

    )
    
# Output
  cdk.CfnOutput(self, 'TerminationQueueOutput', value = TerminationQueue)

堆棧 A

# This is Termination Event
    TerminationEventRule = events.Rule(
        self,
        'EventRule',
        event_pattern = events.EventPattern(
            detail_type=["Termination Event Notification"],
            source=["aws.ec2"],
            detail = {
                "state": ["terminated"]
                 }
        ),
        enabled=True,
    )
 
# Import
  EventsQueue = cdk.Fn.import_value('TerminationQueueOutput')

當我嘗試上述操作時,我收到錯誤“期望一個字符串,得到 {"$jsii.byref":"@aws-cdk/aws-sqs.Queue@10026"}"

然后我嘗試通過 TerminationQueue.queue_name 發送隊列名稱,但出現以下錯誤“jsii.errors.JSIIError: Expected object reference, got "${Token[TOKEN.437]}"

CfnOutput總是輸出一個字符串。 您可以 output 隊列的 ARN(可在TerminationQueue.queueArn獲得),然后使用Queue.fromQueueArn在另一個堆棧中創建隊列

但是,這樣做的慣用方法是將隊列公開為實例變量,然后將其傳遞給堆棧 A 的構造函數。 CDK 將在后台執行上述操作,將其抽象化。 這是文檔中的一個示例:

prod = cdk.Environment(account="123456789012", region="us-east-1")

stack1 = StackThatProvidesABucket(app, "Stack1", env=prod)

# stack2 will take a property "bucket"
stack2 = StackThatExpectsABucket(app, "Stack2", bucket=stack1.bucket, env=prod)

你可以用同樣的方式傳遞你的隊列。

暫無
暫無

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

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