in src/Aspire.Hosting.AWS/CloudFormation/CloudFormationExtensions.cs [151:188]
public static IResourceBuilder<TDestination> WithReference<TDestination>(this IResourceBuilder<TDestination> builder, IResourceBuilder<ICloudFormationResource> cloudFormationResourceBuilder, string configSection = Constants.DefaultConfigSection)
where TDestination : IResourceWithEnvironment, IResourceWithWaitSupport
{
if (!cloudFormationResourceBuilder.Resource.Annotations.Any(x => x is CloudFormationReferenceAnnotation cf && string.Equals(cf.TargetResource, builder.Resource.Name, StringComparison.Ordinal)))
{
cloudFormationResourceBuilder.WithAnnotation(new CloudFormationReferenceAnnotation(builder.Resource.Name));
}
builder.WaitFor(cloudFormationResourceBuilder);
builder.WithEnvironment(ctx =>
{
if (ctx.ExecutionContext.IsPublishMode)
{
return;
}
if (cloudFormationResourceBuilder.Resource.AWSSDKConfig != null)
{
SdkUtilities.ApplySDKConfig(ctx, cloudFormationResourceBuilder.Resource.AWSSDKConfig, false);
}
if (cloudFormationResourceBuilder.Resource.Outputs == null)
{
return;
}
configSection = configSection.ToEnvironmentVariables();
foreach (var output in cloudFormationResourceBuilder.Resource.Outputs)
{
var envName = $"{configSection}__{output.OutputKey}";
ctx.EnvironmentVariables[envName] = output.OutputValue;
}
});
return builder;
}