簡體   English   中英

在創建 RDS 實例后運行 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.

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