Amazon web services 如何获取AWS RDS DbInstance资源ID?

Amazon web services 如何获取AWS RDS DbInstance资源ID?,amazon-web-services,aws-lambda,amazon-rds,amazon-iam,aws-cdk,Amazon Web Services,Aws Lambda,Amazon Rds,Amazon Iam,Aws Cdk,我试图提出在使用AWS CDK部署堆栈期间检索AWS RDS DbInstance资源ID的选项 lambda需要资源ID才能对RDS实例使用IAM身份验证- 看起来,即使是CF也无法使用ref或getAtt函数返回资源ID值- 运行cdk deploy部署整个应用程序,包括rds数据库实例和lambdas,那么如何将资源ID提供给Lambda策略以进行IAM身份验证 我感兴趣的是,是否有人已经解决了这个问题,或者使用了哪些变通方法。是否需要使用单独的CDK部署命令或应用程序分多个阶段进行部署

我试图提出在使用AWS CDK部署堆栈期间检索AWS RDS DbInstance资源ID的选项

lambda需要资源ID才能对RDS实例使用IAM身份验证-

看起来,即使是CF也无法使用ref或getAtt函数返回资源ID值-

运行
cdk deploy
部署整个应用程序,包括rds数据库实例和lambdas,那么如何将资源ID提供给Lambda策略以进行IAM身份验证

我感兴趣的是,是否有人已经解决了这个问题,或者使用了哪些变通方法。是否需要使用单独的CDK部署命令或应用程序分多个阶段进行部署

非常感谢大家的帮助

谢谢


Sam

如果我正确理解您的要求,则以下CDK代码应获得您的Lambda函数
rds db:connect
权限

让vpc=new ec2.vpc(这是“vpc”)
让db=new rds.DatabaseInstance(这个'db'{
专有网络:专有网络,
引擎:rds.DatabaseInstanceEngine.mysql({version:rds.MysqlEngineVersion.VER_8_0})
})
设func=new lambda.Function(这个'lambda'{
专有网络:专有网络,
代码:lambda.code.fromInline(`exports.handler=function(event,ctx,cb){return cb(null,\'hi\');}`),
运行时:lambda.runtime.NODEJS_12_X,
处理程序:“index.handler”
})
db.grantConnect(功能)

Hey@Pistazie非常感谢您的回答。我非常兴奋地读了它,但后来发现这个函数似乎不起作用(如预期的那样)。这与CloudFormation的基本问题相同:它不公开RDS db实例的资源ID。请看这里-Hey@SamBrick,我在生产中所做的(使用DBCluster和无服务器MySQL数据库)是让cdk为数据库创建一个秘密附件。然后,创建的秘密是一个JSON,其中包含主机、用户、密码等。然后,当我的应用程序引导(fargate容器中的Spring引导)并配置我的连接时,我获取这个秘密。这里记录了这一点:中还允许安全组从fargate容器访问dbCluster。我从来没有在Lambdas上这样做过。另一个想法是:可能使用RDS代理,它应该可以很好地与Lambdas和RDS配合使用。感谢@Pistazie的建议-我想我们将把CDK应用程序分为两个应用程序-一个用于db,一个用于Lambdas。部署db应用程序后,我们将通过Jenkins使用CLI查询资源ID,并在lambda应用程序部署时将其提供给lambda应用程序。