From c6c728d3554ec4bb12e6a5fd686398e317b384f7 Mon Sep 17 00:00:00 2001 From: aws-sdk-dotnet-automation Date: Thu, 10 Mar 2022 19:14:51 +0000 Subject: [PATCH 1/8] build: version bump to 0.37 --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 5e160c17d..422ab96e2 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "0.36", + "version": "0.37", "publicReleaseRefSpec": [ ".*" ], From fa70196c2b75739d0813c0ef9a1603da19531a2c Mon Sep 17 00:00:00 2001 From: Alex Shovlin Date: Wed, 23 Mar 2022 15:22:32 -0400 Subject: [PATCH 2/8] fix: Remove duplicate URLs from system capability messages. --- src/AWS.Deploy.CLI/Commands/DeployCommand.cs | 2 +- src/AWS.Deploy.Orchestration/SystemCapabilities.cs | 7 ++++++- src/AWS.Deploy.Orchestration/SystemCapabilityEvaluator.cs | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/AWS.Deploy.CLI/Commands/DeployCommand.cs b/src/AWS.Deploy.CLI/Commands/DeployCommand.cs index 43a01089e..9a7ed1ad7 100644 --- a/src/AWS.Deploy.CLI/Commands/DeployCommand.cs +++ b/src/AWS.Deploy.CLI/Commands/DeployCommand.cs @@ -240,7 +240,7 @@ public async Task EvaluateSystemCapabilities(Recommendation selectedRecommendati var missingCapabilitiesMessage = ""; foreach (var capability in systemCapabilities) { - missingCapabilitiesMessage = $"{missingCapabilitiesMessage}{capability.GetMessage()}{Environment.NewLine}"; + missingCapabilitiesMessage = $"{missingCapabilitiesMessage}{Environment.NewLine}{capability.GetMessage()}{Environment.NewLine}"; } if (systemCapabilities.Any()) diff --git a/src/AWS.Deploy.Orchestration/SystemCapabilities.cs b/src/AWS.Deploy.Orchestration/SystemCapabilities.cs index 93037d2db..102fe1cf5 100644 --- a/src/AWS.Deploy.Orchestration/SystemCapabilities.cs +++ b/src/AWS.Deploy.Orchestration/SystemCapabilities.cs @@ -48,7 +48,12 @@ public SystemCapability(string name, bool installed, bool available) public string GetMessage() { if (!string.IsNullOrEmpty(Message)) - return Message; + { + if (!string.IsNullOrEmpty(InstallationUrl)) + return $"{Message} {InstallationUrl}"; + else + return Message; + } var availabilityMessage = Available ? "and available" : "but not available"; var installationMessage = Installed ? $"installed {availabilityMessage}" : "not installed"; diff --git a/src/AWS.Deploy.Orchestration/SystemCapabilityEvaluator.cs b/src/AWS.Deploy.Orchestration/SystemCapabilityEvaluator.cs index eff889504..ae7096cda 100644 --- a/src/AWS.Deploy.Orchestration/SystemCapabilityEvaluator.cs +++ b/src/AWS.Deploy.Orchestration/SystemCapabilityEvaluator.cs @@ -92,14 +92,14 @@ public async Task> EvaluateSystemCapabilities(Recommendat { capabilities.Add(new SystemCapability("NodeJS", false, false) { InstallationUrl = "https://nodejs.org/en/download/", - Message = "The selected deployment uses the AWS CDK, which requires Node.js. The latest LTS version of Node.js is recommended and can be installed from https://nodejs.org/en/download/. Specifically, AWS CDK requires 10.13.0+ to work properly." + Message = $"The selected deployment uses the AWS CDK, which requires Node.js. AWS CDK requires {MinimumNodeJSVersion} of Node.js or later, and the latest LTS version is recommended." }); } else if (systemCapabilities.NodeJsVersion < MinimumNodeJSVersion) { capabilities.Add(new SystemCapability("NodeJS", false, false) { InstallationUrl = "https://nodejs.org/en/download/", - Message = $"The selected deployment uses the AWS CDK, which requires version of Node.js higher than your current installation ({systemCapabilities.NodeJsVersion}). The latest LTS version of Node.js is recommended and can be installed from https://nodejs.org/en/download/. Specifically, AWS CDK requires 10.3+ to work properly." + Message = $"The selected deployment uses the AWS CDK, which requires a version of Node.js higher than your current installation ({systemCapabilities.NodeJsVersion}). AWS CDK requires {MinimumNodeJSVersion} of Node.js or later, and the latest LTS version is recommended." }); } } @@ -111,7 +111,7 @@ public async Task> EvaluateSystemCapabilities(Recommendat capabilities.Add(new SystemCapability("Docker", false, false) { InstallationUrl = "https://docs.docker.com/engine/install/", - Message = "The selected deployment option requires Docker, which was not detected. Please install and start the appropriate version of Docker for your OS: https://docs.docker.com/engine/install/" + Message = "The selected deployment option requires Docker, which was not detected. Please install and start the appropriate version of Docker for your OS." }); } else if (!systemCapabilities.DockerInfo.DockerContainerType.Equals("linux", StringComparison.OrdinalIgnoreCase)) From 2298e89d5c090816c61660b89b4a8f81ec53e23b Mon Sep 17 00:00:00 2001 From: Phil Asmar Date: Thu, 24 Mar 2022 14:12:55 -0400 Subject: [PATCH 3/8] fix: cdk bootstrap using globally installed version of cdk --- src/AWS.Deploy.Constants/CDK.cs | 2 +- src/AWS.Deploy.Orchestration/CdkProjectHandler.cs | 1 + .../CDK/CDKVersionDetectorTests.cs | 8 ++++---- .../CDK/CSProjFiles/MixedReferences | 8 ++++---- .../CDK/CSProjFiles/SameReferences | 6 +++--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/AWS.Deploy.Constants/CDK.cs b/src/AWS.Deploy.Constants/CDK.cs index e2a7dcc2e..2dc62315f 100644 --- a/src/AWS.Deploy.Constants/CDK.cs +++ b/src/AWS.Deploy.Constants/CDK.cs @@ -21,6 +21,6 @@ internal static class CDK /// /// Default version of CDK CLI /// - public static readonly Version DefaultCDKVersion = Version.Parse("1.107.0"); + public static readonly Version DefaultCDKVersion = Version.Parse("2.13.0"); } } diff --git a/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs b/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs index a73cfdfcd..f252198e5 100644 --- a/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs +++ b/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs @@ -81,6 +81,7 @@ public async Task DeployCdkProject(OrchestratorSession session, CloudApplication // Ensure region is bootstrapped await _commandLineWrapper.Run($"npx cdk bootstrap aws://{session.AWSAccountId}/{session.AWSRegion}", + workingDirectory: cdkProjectPath, needAwsCredentials: true); var appSettingsFilePath = Path.Combine(cdkProjectPath, "appsettings.json"); diff --git a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CDKVersionDetectorTests.cs b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CDKVersionDetectorTests.cs index eb677d40e..a56493566 100644 --- a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CDKVersionDetectorTests.cs +++ b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CDKVersionDetectorTests.cs @@ -18,9 +18,9 @@ public CDKVersionDetectorTests() } [Theory] - [InlineData("MixedReferences", "1.109.0")] - [InlineData("SameReferences", "1.108.0")] - [InlineData("NoReferences", "1.107.0")] + [InlineData("MixedReferences", "2.15.0")] + [InlineData("SameReferences", "2.14.0")] + [InlineData("NoReferences", "2.13.0")] public void Detect_CSProjPath(string fileName, string expectedVersion) { var csprojPath = Path.Combine("CDK", "CSProjFiles", fileName); @@ -38,7 +38,7 @@ public void Detect_CSProjPaths() "NoReferences" }.Select(fileName => Path.Combine("CDK", "CSProjFiles", fileName)); var version = _cdkVersionDetector.Detect(csprojPaths); - Assert.Equal("1.109.0", version.ToString()); + Assert.Equal("2.15.0", version.ToString()); } } } diff --git a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/MixedReferences b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/MixedReferences index 4bf1d90d6..b4de98cd1 100644 --- a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/MixedReferences +++ b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/MixedReferences @@ -1,10 +1,10 @@ - - - - + + + + diff --git a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/SameReferences b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/SameReferences index 3c08c5aa8..e520be87a 100644 --- a/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/SameReferences +++ b/test/AWS.Deploy.Orchestration.UnitTests/CDK/CSProjFiles/SameReferences @@ -1,9 +1,9 @@ - - - + + + From faba4c31f019f0e5e5514367179d233f6b9df79b Mon Sep 17 00:00:00 2001 From: Philippe El Asmar Date: Fri, 25 Mar 2022 13:22:21 -0400 Subject: [PATCH 4/8] docs: add link to AWS Reinvent 2021 Deploy tool session --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1dcc31333..0e42046e2 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,7 @@ We welcome community contributions and pull requests. See [CONTRIBUTING](https:/ * [AWS Developer Guide](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/deployment-tool.html) Find additional information about developing, deploying, and maintaining your applications using the AWS .Net deployment tool. * [AWS Developer Center - Explore .NET on AWS](https://aws.amazon.com/developer/language/net/) Find all the .NET code samples, step-by-step guides, videos, blog content, tools, and information about live events that you need in one place. * [AWS Developer Blog - .NET](https://aws.amazon.com/blogs/developer/category/programing-language/dot-net/) Come see what .NET developers at AWS are up to! Learn about new .NET software announcements, guides, and how-to's. +* [AWS re:Invent 2021 - What’s new with .NET development and deployment on AWS](https://www.youtube.com/watch?v=UvTJ_Inb634) New deployment tooling incorporates best AWS practices right from the start, providing you with recommendations and the optimal deployment option for your .NET application. * [@dotnetonaws](https://twitter.com/dotnetonaws) Follow us on twitter! * Deployment tool blog posts * [Reimagining the AWS .NET deployment experience](http://aws.amazon.com/blogs/developer/reimagining-the-aws-net-deployment-experience/) From 86256814d18c0cd9af7414167e5103a9f189b165 Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 31 Mar 2022 18:01:14 -0700 Subject: [PATCH 5/8] feat: Add .NET 6 support for Elastic Beanstalk --- AWS.Deploy.sln | 7 +++++++ .../ASP.NETAppElasticBeanstalk.recipe | 2 +- .../RecommendationTests.cs | 20 +++++++++++++++++++ testapps/WebApiNET6/Program.cs | 12 +++++++++++ testapps/WebApiNET6/WebApiNET6.csproj | 9 +++++++++ .../WebApiNET6/appsettings.Development.json | 8 ++++++++ testapps/WebApiNET6/appsettings.json | 9 +++++++++ 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 testapps/WebApiNET6/Program.cs create mode 100644 testapps/WebApiNET6/WebApiNET6.csproj create mode 100644 testapps/WebApiNET6/appsettings.Development.json create mode 100644 testapps/WebApiNET6/appsettings.json diff --git a/AWS.Deploy.sln b/AWS.Deploy.sln index ff251ec3f..04e822fed 100644 --- a/AWS.Deploy.sln +++ b/AWS.Deploy.sln @@ -68,6 +68,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AWS.Deploy.ServerMode.Clien EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkerServiceExample", "testapps\WorkerServiceExample\WorkerServiceExample.csproj", "{7C330493-9BF7-4DB6-815B-807C08500AC6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiNET6", "testapps\WebApiNET6\WebApiNET6.csproj", "{B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\AWS.Deploy.Constants\AWS.Deploy.Constants.projitems*{3f7a5ca6-7178-4dbf-8dad-6a63684c7a8e}*SharedItemsImports = 5 @@ -173,6 +175,10 @@ Global {7C330493-9BF7-4DB6-815B-807C08500AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C330493-9BF7-4DB6-815B-807C08500AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C330493-9BF7-4DB6-815B-807C08500AC6}.Release|Any CPU.Build.0 = Release|Any CPU + {B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -203,6 +209,7 @@ Global {F2266C44-C8C5-45AD-AA9B-44F8825BDF63} = {11C7056E-93C1-408B-BD87-5270595BBE0E} {74444ED0-9044-4DF7-A111-7D9F81ADF0FD} = {BD466B5C-D8B0-4069-98A9-6DC8F01FA757} {7C330493-9BF7-4DB6-815B-807C08500AC6} = {C3A0C716-BDEA-4393-B223-AF8F8531522A} + {B2EA65BD-9FFE-4452-B2DC-574EB1A9FAF1} = {C3A0C716-BDEA-4393-B223-AF8F8531522A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5A4B2863-1763-4496-B122-651A38A4F5D7} diff --git a/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppElasticBeanstalk.recipe b/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppElasticBeanstalk.recipe index f92cfca1f..04b9e25c5 100644 --- a/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppElasticBeanstalk.recipe +++ b/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppElasticBeanstalk.recipe @@ -32,7 +32,7 @@ "Type": "MSProperty", "Condition": { "PropertyName": "TargetFramework", - "AllowedValues": [ "netcoreapp2.1", "netcoreapp3.1", "net5.0" ] + "AllowedValues": [ "netcoreapp2.1", "netcoreapp3.1", "net5.0", "net6.0" ] } } ], diff --git a/test/AWS.Deploy.CLI.UnitTests/RecommendationTests.cs b/test/AWS.Deploy.CLI.UnitTests/RecommendationTests.cs index 43b77c4f1..a4c58a27d 100644 --- a/test/AWS.Deploy.CLI.UnitTests/RecommendationTests.cs +++ b/test/AWS.Deploy.CLI.UnitTests/RecommendationTests.cs @@ -64,6 +64,26 @@ public async Task WebAppNoDockerFileTest() .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID); } + [Fact] + public async Task WebApiNET6() + { + var engine = await BuildRecommendationEngine("WebApiNET6"); + + var recommendations = await engine.ComputeRecommendations(); + + recommendations + .Any(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID) + .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); + + recommendations + .Any(r => r.Recipe.Id == Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID) + .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID); + + recommendations + .Any(r => r.Recipe.Id == Constants.ASPNET_CORE_APPRUNNER_ID) + .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_APPRUNNER_ID); + } + [Fact] public async Task WebAppWithDockerFileTest() { diff --git a/testapps/WebApiNET6/Program.cs b/testapps/WebApiNET6/Program.cs new file mode 100644 index 000000000..a1f9c1834 --- /dev/null +++ b/testapps/WebApiNET6/Program.cs @@ -0,0 +1,12 @@ +var builder = WebApplication.CreateBuilder(args); + +var app = builder.Build(); + +app.UseHttpsRedirection(); + +app.MapGet("/", () => +{ + return "Hello"; +}); + +app.Run(); diff --git a/testapps/WebApiNET6/WebApiNET6.csproj b/testapps/WebApiNET6/WebApiNET6.csproj new file mode 100644 index 000000000..c78c9c7e8 --- /dev/null +++ b/testapps/WebApiNET6/WebApiNET6.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/testapps/WebApiNET6/appsettings.Development.json b/testapps/WebApiNET6/appsettings.Development.json new file mode 100644 index 000000000..0c208ae91 --- /dev/null +++ b/testapps/WebApiNET6/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/testapps/WebApiNET6/appsettings.json b/testapps/WebApiNET6/appsettings.json new file mode 100644 index 000000000..10f68b8c8 --- /dev/null +++ b/testapps/WebApiNET6/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} From 0644203f3a8afd04942c6172cf04bc354970c138 Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 31 Mar 2022 18:02:22 -0700 Subject: [PATCH 6/8] fix: Fixed issue running CDK bootstrap missing context parameter --- src/AWS.Deploy.Orchestration/CdkProjectHandler.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs b/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs index f252198e5..f4c1a26b8 100644 --- a/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs +++ b/src/AWS.Deploy.Orchestration/CdkProjectHandler.cs @@ -79,13 +79,13 @@ public async Task DeployCdkProject(OrchestratorSession session, CloudApplication _interactiveService.LogMessageLine("Deploying AWS CDK project"); + var appSettingsFilePath = Path.Combine(cdkProjectPath, "appsettings.json"); + // Ensure region is bootstrapped - await _commandLineWrapper.Run($"npx cdk bootstrap aws://{session.AWSAccountId}/{session.AWSRegion}", + await _commandLineWrapper.Run($"npx cdk bootstrap aws://{session.AWSAccountId}/{session.AWSRegion} -c {Constants.CloudFormationIdentifier.SETTINGS_PATH_CDK_CONTEXT_PARAMETER}=\"{appSettingsFilePath}\"", workingDirectory: cdkProjectPath, needAwsCredentials: true); - var appSettingsFilePath = Path.Combine(cdkProjectPath, "appsettings.json"); - var deploymentStartDate = DateTime.Now; // Handover to CDK command line tool // Use a CDK Context parameter to specify the settings file that has been serialized. From 5b8355f950e99cfb92ea19cf8fa1713a1a0a47f5 Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 31 Mar 2022 18:05:20 -0700 Subject: [PATCH 7/8] feat: Add .NET 6 support for deploying to Elastic Beanstalk environments create outside of the deploy tool --- .../ASP.NETAppExistingBeanstalkEnvironment.recipe | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppExistingBeanstalkEnvironment.recipe b/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppExistingBeanstalkEnvironment.recipe index 5d1fa5f69..373e982f6 100644 --- a/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppExistingBeanstalkEnvironment.recipe +++ b/src/AWS.Deploy.Recipes/RecipeDefinitions/ASP.NETAppExistingBeanstalkEnvironment.recipe @@ -24,7 +24,7 @@ "Type": "MSProperty", "Condition": { "PropertyName": "TargetFramework", - "AllowedValues": [ "netcoreapp2.1", "netcoreapp3.1", "net5.0" ] + "AllowedValues": [ "netcoreapp2.1", "netcoreapp3.1", "net5.0", "net6.0" ] } } ], From 8495595c82e08461f43a208b149b64a3454a8cb2 Mon Sep 17 00:00:00 2001 From: Philippe El Asmar Date: Fri, 1 Apr 2022 14:45:19 -0400 Subject: [PATCH 8/8] fix: add missing constant for unit tests --- test/AWS.Deploy.CLI.UnitTests/Constants.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/AWS.Deploy.CLI.UnitTests/Constants.cs b/test/AWS.Deploy.CLI.UnitTests/Constants.cs index eabd23414..c03a5ac4b 100644 --- a/test/AWS.Deploy.CLI.UnitTests/Constants.cs +++ b/test/AWS.Deploy.CLI.UnitTests/Constants.cs @@ -7,6 +7,7 @@ internal static class Constants { public const string ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID = "AspNetAppEcsFargate"; public const string ASPNET_CORE_BEANSTALK_RECIPE_ID = "AspNetAppElasticBeanstalkLinux"; + public const string ASPNET_CORE_APPRUNNER_ID = "AspNetAppAppRunner"; public const string CONSOLE_APP_FARGATE_SERVICE_RECIPE_ID = "ConsoleAppEcsFargateService"; public const string CONSOLE_APP_FARGATE_SCHEDULE_TASK_RECIPE_ID = "ConsoleAppEcsFargateScheduleTask";