LazyStack

Building the PetStore Solution

In this lesson step we will build the initial PetStore solution using the .NET CLI LazyStack Tool.

2.1 Create PetStore solution

  1. Configure your developer workstation with the LazyStack .NET CLI Tool
  2. Open a terminal window and CD into the LazyStackTutorial folder.
  3. Use .NET CLI to create a solution with a WebApi project in it.
    mkdir PetStore
    cd PetStore
    dotnet new sln
    dotnet new webapi -o PetStore
    Windows:
    dotnet sln add PetStore\PetStore.csproj
    MacOS/Linux:
    dotnet sln add PetStore/PetStore.csproj
    You now have a PetStore Solution with a PetStore WebApi project in it.
  4. Build the solution.
    dotnet build
    The solution compiles successfully.
  5. Download ConfigureSvcs.cs and place it into the PetStore project folder.
  6. Edit the WebApi project to use ConfigureSvcs.cs.
      Edit PetStore\Startup.cs and replace it's content with the following: Note line number 29 - which we add to the standard startup to "hook" in service registrations generated by LazyStack.
      using Microsoft.AspNetCore.Builder;
      using Microsoft.AspNetCore.Hosting;
      using Microsoft.AspNetCore.Http;
      using Microsoft.Extensions.Configuration;
      using Microsoft.Extensions.DependencyInjection;
      using Microsoft.Extensions.Hosting;
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Threading.Tasks;
      
      namespace PetStore
      {
          public partial class Startup
          {
      
              public Startup(IConfiguration configuration)
              {
                  Configuration = configuration;
              }
      
              public IConfiguration Configuration { get; }
      
      
              // This method gets called by the runtime. Use this method to add services to the container.
              // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
              public void ConfigureServices(IServiceCollection services)
              {
                  ConfigureSvcs(services);
                  services.AddControllers();
                  services.AddSwaggerGen(c =>
                  {
                      c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "PetStoreAPI", Version = "v1" });
                  });
              }
      
              // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
              {
                  if (env.IsDevelopment())
                  {
                      app.UseDeveloperExceptionPage();
                  }
      
                  app.UseRouting();
      
                  app.UseEndpoints(endpoints =>
                  {
                      endpoints.MapControllers();
                  });
      
                  app.UseSwagger();
                  app.UseSwaggerUI(c =>
                  {
                      c.SwaggerEndpoint("/swagger/v1/swagger.json", "PetStore V1");
                  });
      
                  app.Run(async (context) => await Task.Run(() => context.Response.Redirect("/swagger")));
      
              }
          }
      }
      
  7. Remove the PetStore\Controllers\WeatherForecastController.cs file.
  8. Remove the PetStore\WeatherForecast.cs file.
  9. CD into the solution folder (LazyStackTutorial\PetStore). Rebuild the solution.
    dotnet build
    The solution compiles successfully.

2.2 Add External LazyStack Projects

dotnet sln add ..\LazyStack\LazyStackAuth\LazyStackAuth.csproj
dotnet sln add ..\LazyStack\LazyStackDynamoDBRepo\LazyStackDynamoDBRepo.csproj

2.3 Download PetStore.yaml and run LazyStack Generator

  1. Download the PetStore.yaml file and place it into the PetStore solution folder
  2. CD into the solution folder (LazyStackTutorial\PetStore) and run the LazyStack generator:
    lazystack projects
    Multiple projects and configuration files are created.
    • Controllers folder
      • OrderController project
      • PetController project
    • Lambdas folder
      • Order project
      • Pet project
    • "Solution Items" folder (files are in the solution's root folder)
      • LazyStack.yaml
      • LocalApis.json
      • PetStore.yaml
      • SAM_Review.yaml
    • Stacks folder
      • Dev folder
        • serverless.template
      • Test folder
        • serverless.template
      • Prod folder
        • serverless.template
    • PetStoreClientSDK project
    • PetStoreSchema project

2.4 Review the LazyStack.yaml file

The "lazystack projects" command created a default LazyStack.yaml file in your solution's root folder. The top of the LazyStack.yaml file should look like this:


LazyStackDirectivesVersion: 1.1.0
Stacks:
  Dev:
    ProfileName: default
    RegionName: us-east-1
    StackName: PetStoreDev 
    Stage: Dev
    UriCodeTarget: Debug/net6.0
  Test:
    Stage: Test
    UriCodeTarget: Release/net6.0
  Prod:
    Stage: Prod
    UriCodeTarget: Release/net6.0
ProjectOptions: 
  NugetPackageVersions:
    Amazon.Lambda.AspNetCoreServer: 7.2.0
    AWSSDK.Extensions.NETCore.Setup: 3.7.2
    JsonSubTypes: 1.9.0
    LazyStackAuth: 3.0.0
    Newtonsoft.Json: 13.0.1
    Swashbuckle.AspNetCore: 6.4.0
    System.ComponentModel.Annotations: 5.0.0
    System.IdentityModel.Tokens.Jwt: 6.22.0
  ClientSDKProjects:
    PackageReferences:
      LazyStackAuth: ''
      System.ComponentModel.Annotations: ''
      JsonSubTypes: ''
      Newtonsoft.Json: ''
  SchemaProjects:
    PackageReferences:
      Newtonsoft.Json: ''
  LambdaProjects:
    Runtime: dotnet6
    PackageReferences:
      AWSSDK.Extensions.NETCore.Setup: ''
      Amazon.Lambda.AspNetCoreServer: ''
  WebApiProjects:
    PackageReferences:
      AWSSDK.Extensions.NETCore.Setup: ''
      Swashbuckle.AspNetCore: ''
  ControllerProjects:
    PackageReferences:
      System.IdentityModel.Tokens.Jwt: ''

2.5 Review the SAM_Review.yaml

The SAM_Review.yaml file was generated in the solution folder. This file contains the stack configuration without stack environment specific content inserted. Stack environments might include Dev, Test and Prod. Fully constituted templates are placed in the serverless.template files placed in the stack environment folder. For instance, the Stacks\Dev\serverless.template file is the template you will later use to publish the PetStoreDev stack to AWS.

You never edit the SAM_Review.yaml file directly.

  • Open the SAM_Review.yaml file.
  • Review contents. No need to understand all this content now.
  • The SAM_Review.yaml file will be updated with new content as we add and configure AWS stack resources during the tutorial. This file is regenerated each time you execute "lazystack projects".

    2.6 Review serverless.template file

    The "lazystack projects" commands generates one serverless.template file for each environment. In this case, we have one Stacks Environment called "Dev" so a serverless.template file is generated in the Stacks\Dev folder.

    You want to review the SAM template we will later publish to AWS. You never edit this file directly.

    1. Open the Stacks\Dev\serverless.template file.
    2. Review contents. No need to understand all this content now.

    The serverless.template file will be updated with new content as we add and configure AWS stack resources during the tutorial. This file is regenerated each time you execute "lazystack projects".

    Step Summary

    In this lesson step we created a PetStore solution using the WebApi project template, downloaded a OpenApi Specification called PetStore.yaml and then used the .NET CLI Tool "lazystack projects" to generate projects and configuration files for our stack. We then updated the LazyStack.yaml file AWS ProfileName and RegionName.