如何在Pulumi中让Function App引用SQL Server数据库的连接字符串?
解决Pulumi中Function App引用SQL Server连接字符串的问题
问题根源:Output无法直接同步拼接
你当前代码的问题在于,sqlServer.FullyQualifiedDomainName、sqlDatabase.Name这些属性都是Output
正确的连接字符串构建方式
方式1:嵌套Apply解析拼接
通过Output的Apply方法逐个解析异步值,再拼接成完整连接字符串:
var sqlServer = server as Pulumi.Azure.Sql.SqlServer; var connectionString = sqlServer.FullyQualifiedDomainName.Apply(fqdn => sqlDatabase.Name.Apply(dbName => sqlServer.AdministratorLogin.Apply(login => sqlServer.AdministratorLoginPassword.Apply(password => $"Server=tcp:{fqdn},1433;Initial Catalog={dbName};Persist Security Info=False;User ID={login};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" ) ) ) );
方式2:用Output.Tuple简化多层嵌套
通过Output.Tuple将多个Output打包,一次解析后拼接,代码更简洁:
var sqlServer = server as Pulumi.Azure.Sql.SqlServer; var connectionString = Output.Tuple( sqlServer.FullyQualifiedDomainName, sqlDatabase.Name, sqlServer.AdministratorLogin, sqlServer.AdministratorLoginPassword ) .Apply(t => $"Server=tcp:{t.Item1},1433;Initial Catalog={t.Item2};Persist Security Info=False;User ID={t.Item3};Password={t.Item4};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" );
Pulumi中是否有内置的SQL Server连接字符串属性?
有更规范的内置方式生成连接字符串,无需手动拼接格式。可以使用Pulumi.Azure.Sql.GetDatabaseConnectionString函数,它会自动生成符合Azure SQL规范的连接字符串:
var sqlServer = server as Pulumi.Azure.Sql.SqlServer; var connectionString = Output.Tuple( sqlServer.Name, sqlDatabase.Name, sqlServer.AdministratorLogin, sqlServer.AdministratorLoginPassword ) .Apply(async t => { var connStrResult = await Pulumi.Azure.Sql.GetDatabaseConnectionString.InvokeAsync( new Pulumi.Azure.Sql.GetDatabaseConnectionStringArgs { ServerName = t.Item1, DatabaseName = t.Item2, Login = t.Item3, Password = t.Item4 } ); return connStrResult.ConnectionString; });
这种方式能避免手动拼接时可能出现的格式错误,同时更贴合Pulumi的异步资源模型。
内容的提问来源于stack exchange,提问作者Scott Nimrod
相关产品推荐
相关产品推荐

