![](/img/trans.png)
[英]How to pass resource parameter from one stack to another using aws_cdk
[英]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 來實現此功能。
我面臨的問題是將 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.