src/Aspire.Hosting.AWS/Provisioning/CDKStackResourceProvisioner.cs (39 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. using Amazon.CDK.CXAPI; using Amazon.CloudFormation; using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.AWS.CDK; using Microsoft.Extensions.Logging; namespace Aspire.Hosting.AWS.Provisioning; internal sealed class CDKStackResourceProvisioner( ResourceLoggerService loggerService, ResourceNotificationService notificationService) : CloudFormationTemplateResourceProvisioner<StackResource>(loggerService, notificationService) { protected override async Task GetOrCreateResourceAsync(StackResource resource, CancellationToken cancellationToken) { var logger = LoggerService.GetLogger(resource); await ProvisionCDKStackAssetsAsync((StackResource)resource, logger).ConfigureAwait(false); await base.GetOrCreateResourceAsync(resource, cancellationToken).ConfigureAwait(false); } private static Task ProvisionCDKStackAssetsAsync(StackResource resource, ILogger logger) { // Currently CDK Stack Assets like S3 and Container images are not supported. When a stack contains those assets // we stop provisioning as it can introduce unwanted issues. if (!resource.TryGetStackArtifact(out var artifact)) { throw new AWSProvisioningException("Failed to provision stack assets. Could not retrieve stack artifact."); } if (!artifact.Dependencies .OfType<AssetManifestArtifact>() .Any(dependency => dependency.Contents.Files?.Count > 1 || dependency.Contents.DockerImages?.Count > 0)) { return Task.CompletedTask; } logger.LogError("File or container image assets are currently not supported"); throw new AWSProvisioningException("Failed to provision stack assets. Provisioning file or container image assets are currently not supported."); } protected override void HandleTemplateProvisioningException(Exception ex, StackResource resource, ILogger logger) { if (ex.InnerException is AmazonCloudFormationException inner && inner.Message.StartsWith(@"Unable to fetch parameters [/cdk-bootstrap/")) { logger.LogError("The environment doesn't have the CDK toolkit stack installed. Use 'cdk boostrap' to setup your environment for use AWS CDK with Aspire"); } } }