Designing your products

Your products are AWS Service Catalog Products and so you are confined to the conventions of Service Catalog.

Product Versions

In Service Catalog, each product has one or more versions. Versions represent changes to your products. When you make a change to a published product it is recommended to make a new version and make it available to your users.

Users can provision multiple versions of your product at the same time or they may choose to update a product from one version to another. It is good to communicate to your users whether you would like them to update a product or provision a new product when you issue a change.

Product Right-Sizing

Right-sizing your product is difficult. Try to create products that achieve a business outcome and that can be deployed independently. If something is reusable try to make it independent using AWS SSM Parameters or exporting the values from the AWS CloudFormation templates.

Including your product in multiple portfolios

Note

This was added in version 0.2.0

You may want to include a product in more than one portfolio. This is possible with aws-service-catalog-factory. To do this you must specify the product in a Products attribute at the root of the portfolio:

Schema: factory-2019-04-01

Products:
  - Name: account-iam-standalone
    Owner: central-it@customer.com
    Description: The iam roles needed for you to do your jobs
    Distributor: central-it-team
    SupportDescription: Contact us on Chime for help #central-it-team
    SupportEmail: central-it-team@customer.com
    SupportUrl: https://wiki.customer.com/central-it-team/self-service/account-iam
    Portfolios:
      - central-it-team-portfolio
      - my-other-portfolio
    Tags:
      - Key: product-type
        Value: iam
    Versions:
      - Name: v1
        Description: The iam roles needed for you to do your jobs
        Active: True
        Source:
          Provider: CodeCommit
          Configuration:
            RepositoryName: account-iam
            BranchName: v1

Adding associations to a portfolio

Within the products specification you can list the portfolios it should be associated with. The values for the portfolios should be the display name of the portfolio as specified in the portfolio file:

Schema: factory-2019-04-01

Products:
  - Name: account-iam-standalone
    ...
    Portfolios:
      - my-other-portfolio
    Versions:
      - Name: v1
        Description: The iam roles needed for you to do your jobs
        Active: True
        Source:
          Provider: CodeCommit
          Configuration:
            RepositoryName: account-iam
            BranchName: v1
Portfolios:
  - DisplayName: my-other-portfolio
    Description: A place for self service products ready for your account
    ProviderName: central-it-team
    ...

Adding launch role constraints to a product

Note

This was added in version 0.39.0

Within the product specification you can also specify a LocalRoleName for a LaunchRoleConstraint:

Schema: factory-2019-04-01

Products:
  - Name: account-iam-standalone
    Owner: central-it@customer.com
    Distributor: central-it-team
    Constraints:
        Launch:
            LocalRoleName: ServiceCatalogLaunchRole

The rolename you specify must exist in the puppet account and should exist in any spoke account where you want the association to take affect. The role must be assumable by the Service Catalog principal and should have the permissions needed to provision your product.

Deleting a Product Version

Note

This was added in version 0.42.0

Add “Status: terminated” to your product version. The product version will be delete from AWS Service Catalog and the AWS CloudFormation stack will be deleted also - deleting the AWS CodePipeline it created.

Schema: factory-2019-04-01

Products:
  - Name: account-iam-standalone
    Versions:
    Versions:
      - Name: v1
        Description: The iam roles needed for you to do your jobs
        Status: terminated
        Active: True
        Source:
          Provider: CodeCommit
          Configuration:
            RepositoryName: account-iam
            BranchName: v1

Deleting a Product

Note

This was added in version 0.42.0

Add “Status: terminated” to your product. Any products matching this product Name will be disassociated from any portfolios, then deleted.

This will also delete all Product Version pipelines relating to this product and any portfolios it is associated with from AWS CloudFormation

Schema: factory-2019-04-01

Products:
  - Name: account-iam-standalone
    Status: terminated