我正在尋找一個 TypeScript 代碼,以使用 lambda 和 API 網關從另一個堆疊更新在一個堆疊中創建的 DynamoDB。兩個堆疊都在相同的環境中。請建議,如果這是可行的。
uj5u.com熱心網友回復:
我對您的要求的理解:您之前部署了一個帶有 DynamoDB 表的 CDK 應用程式(我們稱之為應用程式堆疊DynamoStack)。現在你有了一個新的堆疊——比如說APIStack——有一個由 Lambda 目標支持的 API 網關。您如何APIStack訪問表,DynamoStack以便您的 Lambda 可以讀取/寫入表?
首選多堆疊應用程式
理想情況下,您將添加APIStack到具有您的DynamoStack. 將相關堆疊分組到單個 CDK 應用程式中通常很好。如果這樣做,在堆疊之間傳遞資源就很簡單了。只需將其匯出dynamodb.Table為類欄位DynamoStack并將其APIStack作為道具傳遞給即可。
單獨的應用程式
如果由于某種原因將堆疊分組在單個應用程式中不可行,則連接跨堆疊參考需要更多步驟。
在 中DynamoStack,創建一個 CloudFormation 輸出,其匯出名稱可以匯入到其他堆疊中:
// DynamoStack.ts
new cdk.CfnOutput(this, 'TableArn', { value: table.tableArn, exportName: 'DemoTableArn' });
在 中APIStack,使用匯入的 ARN進行ITable參考。使用它來設定 Lambda env var 并授予 lambda 對表的讀寫訪問權限:
// ApiStack.ts
const tableArn = cdk.Fn.importValue('DemoTableArn');
const table: dynamodb.ITable = dynamodb.Table.fromTableArn(this, 'ITable', tableArn);
const func = new nodejs.NodejsFunction(this, 'MyHandlerFunction', {
entry: path.join(__dirname, 'func.ts'),
environment: {
TABLE_NAME: cdk.Arn.extractResourceName(tableArn, 'table'),
},
});
table.grantReadWriteData(func);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419437.html
標籤:
