![](/img/trans.png)
[英]How to run Fargate task after database instance is created with AWS CDK?
[英]Running AWS CDK custom resource for database setup after RDS instance is created
在 RDS 實例啟動后,如何使用 AWS CDK 觸發 Lambda function?
我正在使用 AWS CDK 和 Typescript 設置具有 RDS 實例和 EKS 集群的系統。 創建RDS實例后,我想在數據庫實例中設置一些用戶,供EKS上的微服務使用。
為此,我創建了一個由 Lambda function 支持的自定義資源,也在 Typescript 中實現。 lambda function 檢索 CDK 為 RDS 實例生成的密碼以及我的數據庫用戶的一些密碼,連接到數據庫並創建數據庫用戶。 理想情況下,自定義資源在數據庫實例啟動之后和微服務安裝之前運行。 我怎樣才能做到這一點?
我還沒有找到明確聲明依賴項的方法,而且我的 Lambda 在技術上不需要依賴項(除了使用secret.grantRead(lambda)
)。 由於創建時間長,僅在 Lambda 中運行重試循環直到一切就緒可能無法正常工作。 非常感謝任何代碼片段/示例/...,到目前為止,我只找到了有關一般方法的參考資料。
更新詳細信息以回復@jogold:與
const database = new rds.DatabaseInstance(this, 'db', {
instanceIdentifier: conf.systemName,
engine: rds.DatabaseInstanceEngine.POSTGRES,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.MICRO),
masterUsername: MASTER_USER,
allocatedStorage: 20, maxAllocatedStorage: 100,
multiAz: conf.isProduction,
storageEncrypted: true,
backupRetention: cdk.Duration.days(7),
deletionProtection: false,
vpc, securityGroups: [ rdsSG ]
});
CDK 將使用數據庫的訪問憑據生成具有或多或少隨機名稱的秘密。 我嘗試將秘密直接附加到我的 Lambda:
new cdk.CustomResource(this, 'preinstall', {
serviceToken: preinstallProvider.serviceToken,
properties: { secret: database.secret }
});
但這給了我
Error: Resolution error: Resolution error: Trying to resolve() a Construct at /Resources/${Token[td000.preinstall.Default.LogicalID.221]}/Properties/dbSecret/node/_actualNode.
此外,看起來ISecret
接口沒有密鑰的 ID/名稱,所以我不知道在 Lambda 中如何處理它。
CDK 通常會嘗試為您猜測依賴項並確保它們以正確的順序創建。 如果這不起作用(如您的示例中),您可以明確聲明一個資源依賴於另一個資源。 例如:
const customResource = new cdk.CustomResource(this, 'preinstall', {
serviceToken: preinstallProvider.serviceToken,
properties: { secret: database.secret }
});
customResource.node.addDependency(database);
有關更多詳細信息,請參閱文檔https://docs.aws.amazon.com/cdk/api/latest/docs/core-readme.html#construct-dependencies
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.