Skip to content
v2.274.0

AWS ServiceCatalogAppRegistry Construct Library ​

Version 2.274.0-alpha.0

Separate package

@aws-cdk/aws-servicecatalogappregistry-alpha is not part of aws-cdk-lib — install it separately:

sh
npm install @aws-cdk/aws-servicecatalogappregistry-alpha
pip install aws-cdk.aws-servicecatalogappregistry-alpha

This module is experimental (alpha): its API may change in any release, without a major version bump.


cdk-constructs: Experimental

The APIs of higher level constructs in this module are experimental and under active development. They are subject to non-backward compatible changes or removal in any future version. These are not subject to the Semantic Versioning model and breaking changes will be announced in the release notes. This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.


AWS Service Catalog App Registry enables organizations to create and manage repositories of applications and associated resources.

The @aws-cdk/aws-servicecatalogappregistry-alpha package contains resources that enable users to automate governance and management of their AWS resources at scale.

ts
import * as appreg from '@aws-cdk/aws-servicecatalogappregistry-alpha';
python
import aws_cdk.aws_servicecatalogappregistry_alpha as appreg
java
import software.amazon.awscdk.services.servicecatalogappregistry.alpha.*;
csharp
using Amazon.CDK.AWS.Servicecatalogappregistry.Alpha;
go
import appreg "github.com/aws/aws-cdk-go/awscdkservicecatalogappregistryalpha"

Application ​

An AppRegistry application enables you to define your applications and associated resources. The application name must be unique at the account level and it's immutable.

ts
const application = new appreg.Application(this, 'MyFirstApplication', {
  applicationName: 'MyFirstApplicationName',
  description: 'description for my application', // the description is optional
});
python
application = appreg.Application(self, "MyFirstApplication",
    application_name="MyFirstApplicationName",
    description="description for my application"
)
java
Application application = Application.Builder.create(this, "MyFirstApplication")
        .applicationName("MyFirstApplicationName")
        .description("description for my application")
        .build();
csharp
var application = new Application(this, "MyFirstApplication", new ApplicationProps {
    ApplicationName = "MyFirstApplicationName",
    Description = "description for my application"
});
go
application := appreg.NewApplication(this, jsii.String("MyFirstApplication"), &ApplicationProps{
	ApplicationName: jsii.String("MyFirstApplicationName"),
	Description: jsii.String("description for my application"),
})

An application that has been created outside of the stack can be imported into your CDK app. Applications can be imported by their ARN via the Application.fromApplicationArn() API:

ts
const importedApplication = appreg.Application.fromApplicationArn(
  this,
  'MyImportedApplication',
  'arn:aws:servicecatalog:us-east-1:012345678910:/applications/0aqmvxvgmry0ecc4mjhwypun6i',
);
python
imported_application = appreg.Application.from_application_arn(self, "MyImportedApplication", "arn:aws:servicecatalog:us-east-1:012345678910:/applications/0aqmvxvgmry0ecc4mjhwypun6i")
java
IApplication importedApplication = Application.fromApplicationArn(this, "MyImportedApplication", "arn:aws:servicecatalog:us-east-1:012345678910:/applications/0aqmvxvgmry0ecc4mjhwypun6i");
csharp
var importedApplication = Application.FromApplicationArn(this, "MyImportedApplication", "arn:aws:servicecatalog:us-east-1:012345678910:/applications/0aqmvxvgmry0ecc4mjhwypun6i");
go
importedApplication := appreg.Application_FromApplicationArn(this, jsii.String("MyImportedApplication"), jsii.String("arn:aws:servicecatalog:us-east-1:012345678910:/applications/0aqmvxvgmry0ecc4mjhwypun6i"))

Application-Associator ​

ApplicationAssociator defines an AppRegistry application to contain all the stacks in deployed through your cdk package. This helps to manage all the cdk deployed resources.

Create a new application to associate all the stacks in the cdk.App scope ​

If you want to create an Application named MyAssociatedApplication in account 123456789012 and region us-east-1 and want to associate all stacks in the App scope to MyAssociatedApplication, then use as shown in the example below:

ts
const app = new App();
const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.createApplicationStack({
    applicationName: 'MyAssociatedApplication',
    // 'Application containing stacks deployed via CDK.' is the default
    applicationDescription: 'Associated Application description',
    stackName: 'MyAssociatedApplicationStack',
    // AWS Account and Region that are implied by the current CLI configuration is the default
    env: { account: '123456789012', region: 'us-east-1' },
  })],
});
python
from aws_cdk import Environment
app = App()
associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.create_application_stack(
        application_name="MyAssociatedApplication",
        # 'Application containing stacks deployed via CDK.' is the default
        application_description="Associated Application description",
        stack_name="MyAssociatedApplicationStack",
        # AWS Account and Region that are implied by the current CLI configuration is the default
        env=Environment(account="123456789012", region="us-east-1")
    )]
)
java
App app = new App();
ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.createApplicationStack(CreateTargetApplicationOptions.builder()
                .applicationName("MyAssociatedApplication")
                // 'Application containing stacks deployed via CDK.' is the default
                .applicationDescription("Associated Application description")
                .stackName("MyAssociatedApplicationStack")
                // AWS Account and Region that are implied by the current CLI configuration is the default
                .env(Environment.builder().account("123456789012").region("us-east-1").build())
                .build())))
        .build();
csharp
var app = new App();
var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.CreateApplicationStack(new CreateTargetApplicationOptions {
        ApplicationName = "MyAssociatedApplication",
        // 'Application containing stacks deployed via CDK.' is the default
        ApplicationDescription = "Associated Application description",
        StackName = "MyAssociatedApplicationStack",
        // AWS Account and Region that are implied by the current CLI configuration is the default
        Env = new Environment { Account = "123456789012", Region = "us-east-1" }
    }) }
});
go
app := awscdk.NewApp()
associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_CreateApplicationStack(&CreateTargetApplicationOptions{
			ApplicationName: jsii.String("MyAssociatedApplication"),
			// 'Application containing stacks deployed via CDK.' is the default
			ApplicationDescription: jsii.String("Associated Application description"),
			StackName: jsii.String("MyAssociatedApplicationStack"),
			// AWS Account and Region that are implied by the current CLI configuration is the default
			Env: &Environment{
				Account: jsii.String("123456789012"),
				Region: jsii.String("us-east-1"),
			},
		}),
	},
})

This will create a stack MyAssociatedApplicationStack containing an application MyAssociatedApplication with the TagKey as managedBy and TagValue as CDK_Application_Associator.

By default, the stack will have System Managed Application Manager console URL as its output for the application created. If you want to remove the output, then use as shown in the example below:

ts
const app = new App();
const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.createApplicationStack({
    applicationName: 'MyAssociatedApplication',
    // 'Application containing stacks deployed via CDK.' is the default
    applicationDescription: 'Associated Application description',
    stackName: 'MyAssociatedApplicationStack',
    // Disables emitting Application Manager url as output
    emitApplicationManagerUrlAsOutput: false,
    // AWS Account and Region that are implied by the current CLI configuration is the default
    env: { account: '123456789012', region: 'us-east-1' },
  })],
});
python
from aws_cdk import Environment
app = App()
associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.create_application_stack(
        application_name="MyAssociatedApplication",
        # 'Application containing stacks deployed via CDK.' is the default
        application_description="Associated Application description",
        stack_name="MyAssociatedApplicationStack",
        # Disables emitting Application Manager url as output
        emit_application_manager_url_as_output=False,
        # AWS Account and Region that are implied by the current CLI configuration is the default
        env=Environment(account="123456789012", region="us-east-1")
    )]
)
java
App app = new App();
ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.createApplicationStack(CreateTargetApplicationOptions.builder()
                .applicationName("MyAssociatedApplication")
                // 'Application containing stacks deployed via CDK.' is the default
                .applicationDescription("Associated Application description")
                .stackName("MyAssociatedApplicationStack")
                // Disables emitting Application Manager url as output
                .emitApplicationManagerUrlAsOutput(false)
                // AWS Account and Region that are implied by the current CLI configuration is the default
                .env(Environment.builder().account("123456789012").region("us-east-1").build())
                .build())))
        .build();
csharp
var app = new App();
var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.CreateApplicationStack(new CreateTargetApplicationOptions {
        ApplicationName = "MyAssociatedApplication",
        // 'Application containing stacks deployed via CDK.' is the default
        ApplicationDescription = "Associated Application description",
        StackName = "MyAssociatedApplicationStack",
        // Disables emitting Application Manager url as output
        EmitApplicationManagerUrlAsOutput = false,
        // AWS Account and Region that are implied by the current CLI configuration is the default
        Env = new Environment { Account = "123456789012", Region = "us-east-1" }
    }) }
});
go
app := awscdk.NewApp()
associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_CreateApplicationStack(&CreateTargetApplicationOptions{
			ApplicationName: jsii.String("MyAssociatedApplication"),
			// 'Application containing stacks deployed via CDK.' is the default
			ApplicationDescription: jsii.String("Associated Application description"),
			StackName: jsii.String("MyAssociatedApplicationStack"),
			// Disables emitting Application Manager url as output
			EmitApplicationManagerUrlAsOutput: jsii.Boolean(false),
			// AWS Account and Region that are implied by the current CLI configuration is the default
			Env: &Environment{
				Account: jsii.String("123456789012"),
				Region: jsii.String("us-east-1"),
			},
		}),
	},
})

Import existing application to associate all the stacks in the cdk.App scope ​

If you want to re-use an existing Application with ARN: arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId and want to associate all stacks in the App scope to your imported application, then use as shown in the example below:

ts
const app = new App();
const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.existingApplicationFromArn({
    applicationArnValue: 'arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId',
    stackName: 'MyAssociatedApplicationStack',
  })],
});
python
app = App()
associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.existing_application_from_arn(
        application_arn_value="arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId",
        stack_name="MyAssociatedApplicationStack"
    )]
)
java
App app = new App();
ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.existingApplicationFromArn(ExistingTargetApplicationOptions.builder()
                .applicationArnValue("arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId")
                .stackName("MyAssociatedApplicationStack")
                .build())))
        .build();
csharp
var app = new App();
var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.ExistingApplicationFromArn(new ExistingTargetApplicationOptions {
        ApplicationArnValue = "arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId",
        StackName = "MyAssociatedApplicationStack"
    }) }
});
go
app := awscdk.NewApp()
associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_ExistingApplicationFromArn(&ExistingTargetApplicationOptions{
			ApplicationArnValue: jsii.String("arn:aws:servicecatalog:us-east-1:123456789012:/applications/applicationId"),
			StackName: jsii.String("MyAssociatedApplicationStack"),
		}),
	},
})

Associate attribute group to the application used by ApplicationAssociator ​

If you want to associate an Attribute Group with application created by ApplicationAssociator, then use as shown in the example below:

ts
import * as cdk from "aws-cdk-lib";

const app = new App();

const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.createApplicationStack({
    applicationName: 'MyAssociatedApplication',
    // 'Application containing stacks deployed via CDK.' is the default
    applicationDescription: 'Associated Application description',
    stackName: 'MyAssociatedApplicationStack',
    // AWS Account and Region that are implied by the current CLI configuration is the default
    env: { account: '123456789012', region: 'us-east-1' },
  })],
});

// Associate application to the attribute group.
associatedApp.appRegistryApplication.addAttributeGroup('MyAttributeGroup' , {
  attributeGroupName: 'MyAttributeGroupName',
  description: 'Test attribute group',
  attributes: {},
});
python
import aws_cdk as cdk


app = App()

associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.create_application_stack(
        application_name="MyAssociatedApplication",
        # 'Application containing stacks deployed via CDK.' is the default
        application_description="Associated Application description",
        stack_name="MyAssociatedApplicationStack",
        # AWS Account and Region that are implied by the current CLI configuration is the default
        env=cdk.Environment(account="123456789012", region="us-east-1")
    )]
)

# Associate application to the attribute group.
associated_app.app_registry_application.add_attribute_group("MyAttributeGroup",
    attribute_group_name="MyAttributeGroupName",
    description="Test attribute group",
    attributes={}
)
java
import software.amazon.awscdk.*;


App app = new App();

ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.createApplicationStack(CreateTargetApplicationOptions.builder()
                .applicationName("MyAssociatedApplication")
                // 'Application containing stacks deployed via CDK.' is the default
                .applicationDescription("Associated Application description")
                .stackName("MyAssociatedApplicationStack")
                // AWS Account and Region that are implied by the current CLI configuration is the default
                .env(Environment.builder().account("123456789012").region("us-east-1").build())
                .build())))
        .build();

// Associate application to the attribute group.
associatedApp.appRegistryApplication.addAttributeGroup("MyAttributeGroup", AttributeGroupAssociationProps.builder()
        .attributeGroupName("MyAttributeGroupName")
        .description("Test attribute group")
        .attributes(Map.of())
        .build());
csharp
using Amazon.CDK;

var app = new App();

var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.CreateApplicationStack(new CreateTargetApplicationOptions {
        ApplicationName = "MyAssociatedApplication",
        // 'Application containing stacks deployed via CDK.' is the default
        ApplicationDescription = "Associated Application description",
        StackName = "MyAssociatedApplicationStack",
        // AWS Account and Region that are implied by the current CLI configuration is the default
        Env = new Environment { Account = "123456789012", Region = "us-east-1" }
    }) }
});

// Associate application to the attribute group.
associatedApp.AppRegistryApplication.AddAttributeGroup("MyAttributeGroup", new AttributeGroupAssociationProps {
    AttributeGroupName = "MyAttributeGroupName",
    Description = "Test attribute group",
    Attributes = new Dictionary<string, object> { }
});
go
import cdk "github.com/aws/aws-cdk-go/awscdk"


app := awscdk.NewApp()

associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_CreateApplicationStack(&CreateTargetApplicationOptions{
			ApplicationName: jsii.String("MyAssociatedApplication"),
			// 'Application containing stacks deployed via CDK.' is the default
			ApplicationDescription: jsii.String("Associated Application description"),
			StackName: jsii.String("MyAssociatedApplicationStack"),
			// AWS Account and Region that are implied by the current CLI configuration is the default
			Env: &Environment{
				Account: jsii.String("123456789012"),
				Region: jsii.String("us-east-1"),
			},
		}),
	},
})

// Associate application to the attribute group.
associatedApp.appRegistryApplication.AddAttributeGroup(jsii.String("MyAttributeGroup"), &AttributeGroupAssociationProps{
	AttributeGroupName: jsii.String("MyAttributeGroupName"),
	Description: jsii.String("Test attribute group"),
	Attributes: map[string]interface{}{
	},
})

Associate stacks deployed by CDK pipelines ​

If you are using CDK Pipelines to deploy your application, the application stacks will be inside Stages, and ApplicationAssociator will not be able to find them. Call associateStage on each Stage object before adding it to the Pipeline, as shown in the example below:

ts
import * as cdk from "aws-cdk-lib";
import * as codepipeline from "aws-cdk-lib/pipelines";
import * as codecommit from "aws-cdk-lib/aws-codecommit";
declare const repo: codecommit.Repository;
declare const pipeline: codepipeline.CodePipeline;
declare const beta: cdk.Stage;
class ApplicationPipelineStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props: ApplicationPipelineStackProps) {
    super(scope, id, props);

   //associate the stage to application associator.
   props.application.associateStage(beta);
   pipeline.addStage(beta);
  }
};

interface ApplicationPipelineStackProps extends cdk.StackProps {
  application: appreg.ApplicationAssociator;
};

const app = new App();
const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.createApplicationStack({
    applicationName: 'MyPipelineAssociatedApplication',
    stackName: 'MyPipelineAssociatedApplicationStack',
    env: { account: '123456789012', region: 'us-east-1' },
  })],
});

const cdkPipeline = new ApplicationPipelineStack(app, 'CDKApplicationPipelineStack', {
    application: associatedApp,
    env: {account: '123456789012', region: 'us-east-1'},
});
python
import aws_cdk as cdk
import aws_cdk.pipelines as codepipeline
import aws_cdk.aws_codecommit as codecommit
# repo: codecommit.Repository
# pipeline: codepipeline.CodePipeline
# beta: cdk.Stage

class ApplicationPipelineStack(cdk.Stack):
    def __init__(self, scope, id, *, application, description=None, env=None, stackName=None, tags=None, notificationArns=None, synthesizer=None, terminationProtection=None, analyticsReporting=None, crossRegionReferences=None, permissionsBoundary=None, suppressTemplateIndentation=None, propertyInjectors=None):
        super().__init__(scope, id, application=application, description=description, env=env, stackName=stackName, tags=tags, notificationArns=notificationArns, synthesizer=synthesizer, terminationProtection=terminationProtection, analyticsReporting=analyticsReporting, crossRegionReferences=crossRegionReferences, permissionsBoundary=permissionsBoundary, suppressTemplateIndentation=suppressTemplateIndentation, propertyInjectors=propertyInjectors)

        # associate the stage to application associator.
        application.associate_stage(beta)
        pipeline.add_stage(beta)

app = App()
associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.create_application_stack(
        application_name="MyPipelineAssociatedApplication",
        stack_name="MyPipelineAssociatedApplicationStack",
        env=cdk.Environment(account="123456789012", region="us-east-1")
    )]
)

cdk_pipeline = ApplicationPipelineStack(app, "CDKApplicationPipelineStack",
    application=associated_app,
    env=cdk.Environment(account="123456789012", region="us-east-1")
)
java
import software.amazon.awscdk.*;
import software.amazon.awscdk.pipelines.*;
import software.amazon.awscdk.services.codecommit.*;
Repository repo;
CodePipeline pipeline;
Stage beta;

public class ApplicationPipelineStack extends Stack {
    public ApplicationPipelineStack(App scope, String id, ApplicationPipelineStackProps props) {
        super(scope, id, props);

        //associate the stage to application associator.
        props.application.associateStage(beta);
        pipeline.addStage(beta);
    }
}

public class ApplicationPipelineStackProps extends StackProps {
    private ApplicationAssociator application;
    public ApplicationAssociator getApplication() {
        return this.application;
    }
    public ApplicationPipelineStackProps application(ApplicationAssociator application) {
        this.application = application;
        return this;
    }
}

App app = new App();
ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.createApplicationStack(CreateTargetApplicationOptions.builder()
                .applicationName("MyPipelineAssociatedApplication")
                .stackName("MyPipelineAssociatedApplicationStack")
                .env(Environment.builder().account("123456789012").region("us-east-1").build())
                .build())))
        .build();

ApplicationPipelineStack cdkPipeline = new ApplicationPipelineStack(app, "CDKApplicationPipelineStack", new ApplicationPipelineStackProps()
        .application(associatedApp)
        .env(Environment.builder().account("123456789012").region("us-east-1").build())
        );
csharp
using Amazon.CDK;
using Amazon.CDK.Pipelines;
using Amazon.CDK.AWS.CodeCommit;
Repository repo;
CodePipeline pipeline;
Stage beta;
class ApplicationPipelineStack : Stack
{
    public ApplicationPipelineStack(App scope, string id, ApplicationPipelineStackProps props) : base(scope, id, props)
    {

        //associate the stage to application associator.
        props.Application.AssociateStage(beta);
        pipeline.AddStage(beta);
    }
}

class ApplicationPipelineStackProps : StackProps
{
    public ApplicationAssociator Application { get; set; }
}

var app = new App();
var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.CreateApplicationStack(new CreateTargetApplicationOptions {
        ApplicationName = "MyPipelineAssociatedApplication",
        StackName = "MyPipelineAssociatedApplicationStack",
        Env = new Environment { Account = "123456789012", Region = "us-east-1" }
    }) }
});

var cdkPipeline = new ApplicationPipelineStack(app, "CDKApplicationPipelineStack", new ApplicationPipelineStackProps {
    Application = associatedApp,
    Env = new Environment { Account = "123456789012", Region = "us-east-1" }
});
go
import "github.com/aws/aws-cdk-go/awscdk"
import codepipeline "github.com/aws/aws-cdk-go/awscdk"
import codecommit "github.com/aws/aws-cdk-go/awscdk"
var repo Repository
var pipeline CodePipeline
var beta Stage

type applicationPipelineStack struct {
	Stack
}

func newApplicationPipelineStack(scope App, id *string, props applicationPipelineStackProps) *applicationPipelineStack {
	this := &applicationPipelineStack{}
	cdk.NewStack_Override(this, scope, id, props)

	//associate the stage to application associator.
	*props.application.AssociateStage(beta)
	pipeline.AddStage(beta)
	return this
}

type applicationPipelineStackProps struct {
	StackProps
	application ApplicationAssociator
}

app := awscdk.NewApp()
associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_CreateApplicationStack(&CreateTargetApplicationOptions{
			ApplicationName: jsii.String("MyPipelineAssociatedApplication"),
			StackName: jsii.String("MyPipelineAssociatedApplicationStack"),
			Env: &Environment{
				Account: jsii.String("123456789012"),
				Region: jsii.String("us-east-1"),
			},
		}),
	},
})

cdkPipeline := NewApplicationPipelineStack(app, jsii.String("CDKApplicationPipelineStack"), &applicationPipelineStackProps{
	application: associatedApp,
	env: &Environment{
		Account: jsii.String("123456789012"),
		Region: jsii.String("us-east-1"),
	},
})

Associate cross-account stack ​

By default, ApplicationAssociator will not perform cross-account stack associations with the target Application, to avoid deployment failures for accounts which have not been setup for cross-account associations. To enable cross-account stack associations, make sure all accounts are in the same organization as the target Application's account and that resource sharing is enabled within the organization. If you wish to turn on cross-account sharing and associations, set the associateCrossAccountStacks field to true, as shown in the example below:

ts
const app = new App();
const associatedApp = new appreg.ApplicationAssociator(app, 'AssociatedApplication', {
  applications: [appreg.TargetApplication.createApplicationStack({
    associateCrossAccountStacks: true,
    applicationName: 'MyAssociatedApplication',
    env: { account: '123456789012', region: 'us-east-1' },
  })],
});
python
from aws_cdk import Environment
app = App()
associated_app = appreg.ApplicationAssociator(app, "AssociatedApplication",
    applications=[appreg.TargetApplication.create_application_stack(
        associate_cross_account_stacks=True,
        application_name="MyAssociatedApplication",
        env=Environment(account="123456789012", region="us-east-1")
    )]
)
java
App app = new App();
ApplicationAssociator associatedApp = ApplicationAssociator.Builder.create(app, "AssociatedApplication")
        .applications(List.of(TargetApplication.createApplicationStack(CreateTargetApplicationOptions.builder()
                .associateCrossAccountStacks(true)
                .applicationName("MyAssociatedApplication")
                .env(Environment.builder().account("123456789012").region("us-east-1").build())
                .build())))
        .build();
csharp
var app = new App();
var associatedApp = new ApplicationAssociator(app, "AssociatedApplication", new ApplicationAssociatorProps {
    Applications = new [] { TargetApplication.CreateApplicationStack(new CreateTargetApplicationOptions {
        AssociateCrossAccountStacks = true,
        ApplicationName = "MyAssociatedApplication",
        Env = new Environment { Account = "123456789012", Region = "us-east-1" }
    }) }
});
go
app := awscdk.NewApp()
associatedApp := appreg.NewApplicationAssociator(app, jsii.String("AssociatedApplication"), &ApplicationAssociatorProps{
	Applications: []TargetApplication{
		appreg.TargetApplication_CreateApplicationStack(&CreateTargetApplicationOptions{
			AssociateCrossAccountStacks: jsii.Boolean(true),
			ApplicationName: jsii.String("MyAssociatedApplication"),
			Env: &Environment{
				Account: jsii.String("123456789012"),
				Region: jsii.String("us-east-1"),
			},
		}),
	},
})

Associate cross-region stack ​

Currently, cross-region stack association is not supported.

Attribute Group ​

An AppRegistry attribute group acts as a container for user-defined attributes for an application. Metadata is attached in a machine-readable format to integrate with automated workflows and tools. The attribute group name must be unique at the account level and it's immutable.

ts
const attributeGroup = new appreg.AttributeGroup(this, 'MyFirstAttributeGroup', {
  attributeGroupName: 'MyFirstAttributeGroupName',
  description: 'description for my attribute group', // the description is optional,
  attributes: {
    project: 'foo',
    team: ['member1', 'member2', 'member3'],
    public: false,
    stages: {
      alpha: 'complete',
      beta: 'incomplete',
      release: 'not started'
    }
  }
});
python
attribute_group = appreg.AttributeGroup(self, "MyFirstAttributeGroup",
    attribute_group_name="MyFirstAttributeGroupName",
    description="description for my attribute group",  # the description is optional,
    attributes={
        "project": "foo",
        "team": ["member1", "member2", "member3"],
        "public": False,
        "stages": {
            "alpha": "complete",
            "beta": "incomplete",
            "release": "not started"
        }
    }
)
java
AttributeGroup attributeGroup = AttributeGroup.Builder.create(this, "MyFirstAttributeGroup")
        .attributeGroupName("MyFirstAttributeGroupName")
        .description("description for my attribute group") // the description is optional,
        .attributes(Map.of(
                "project", "foo",
                "team", List.of("member1", "member2", "member3"),
                "public", false,
                "stages", Map.of(
                        "alpha", "complete",
                        "beta", "incomplete",
                        "release", "not started")))
        .build();
csharp
var attributeGroup = new AttributeGroup(this, "MyFirstAttributeGroup", new AttributeGroupProps {
    AttributeGroupName = "MyFirstAttributeGroupName",
    Description = "description for my attribute group",  // the description is optional,
    Attributes = new Dictionary<string, object> {
        { "project", "foo" },
        { "team", new [] { "member1", "member2", "member3" } },
        { "public", false },
        { "stages", new Dictionary<string, string> {
            { "alpha", "complete" },
            { "beta", "incomplete" },
            { "release", "not started" }
        } }
    }
});
go
attributeGroup := appreg.NewAttributeGroup(this, jsii.String("MyFirstAttributeGroup"), &AttributeGroupProps{
	AttributeGroupName: jsii.String("MyFirstAttributeGroupName"),
	Description: jsii.String("description for my attribute group"),
	 // the description is optional,
	Attributes: map[string]interface{}{
		"project": jsii.String("foo"),
		"team": []interface{}{
			jsii.String("member1"),
			jsii.String("member2"),
			jsii.String("member3"),
		},
		"public": jsii.Boolean(false),
		"stages": map[string]*string{
			"alpha": jsii.String("complete"),
			"beta": jsii.String("incomplete"),
			"release": jsii.String("not started"),
		},
	},
})

An attribute group that has been created outside of the stack can be imported into your CDK app. Attribute groups can be imported by their ARN via the AttributeGroup.fromAttributeGroupArn() API:

ts
const importedAttributeGroup = appreg.AttributeGroup.fromAttributeGroupArn(
  this,
  'MyImportedAttrGroup',
  'arn:aws:servicecatalog:us-east-1:012345678910:/attribute-groups/0aqmvxvgmry0ecc4mjhwypun6i',
);
python
imported_attribute_group = appreg.AttributeGroup.from_attribute_group_arn(self, "MyImportedAttrGroup", "arn:aws:servicecatalog:us-east-1:012345678910:/attribute-groups/0aqmvxvgmry0ecc4mjhwypun6i")
java
IAttributeGroup importedAttributeGroup = AttributeGroup.fromAttributeGroupArn(this, "MyImportedAttrGroup", "arn:aws:servicecatalog:us-east-1:012345678910:/attribute-groups/0aqmvxvgmry0ecc4mjhwypun6i");
csharp
var importedAttributeGroup = AttributeGroup.FromAttributeGroupArn(this, "MyImportedAttrGroup", "arn:aws:servicecatalog:us-east-1:012345678910:/attribute-groups/0aqmvxvgmry0ecc4mjhwypun6i");
go
importedAttributeGroup := appreg.AttributeGroup_FromAttributeGroupArn(this, jsii.String("MyImportedAttrGroup"), jsii.String("arn:aws:servicecatalog:us-east-1:012345678910:/attribute-groups/0aqmvxvgmry0ecc4mjhwypun6i"))

Associations ​

You can associate your appregistry application with attribute groups and resources. Resources are CloudFormation stacks that you can associate with an application to group relevant stacks together to enable metadata rich insights into your applications and resources. A Cloudformation stack can only be associated with one appregistry application. If a stack is associated with multiple applications in your app or is already associated with one, CDK will fail at deploy time.

Associating application with a new attribute group ​

You can create and associate an attribute group to an application with the addAttributeGroup() API:

ts
declare const application: appreg.Application;
declare const attributeGroup: appreg.AttributeGroup;
application.addAttributeGroup('MyAttributeGroupId' , {
    attributeGroupName: 'MyAttributeGroupName',
    description: 'Test attribute group',
    attributes: {},
});
python
# application: appreg.Application
# attribute_group: appreg.AttributeGroup

application.add_attribute_group("MyAttributeGroupId",
    attribute_group_name="MyAttributeGroupName",
    description="Test attribute group",
    attributes={}
)
java
Application application;
AttributeGroup attributeGroup;

application.addAttributeGroup("MyAttributeGroupId", AttributeGroupAssociationProps.builder()
        .attributeGroupName("MyAttributeGroupName")
        .description("Test attribute group")
        .attributes(Map.of())
        .build());
csharp
Application application;
AttributeGroup attributeGroup;

application.AddAttributeGroup("MyAttributeGroupId", new AttributeGroupAssociationProps {
    AttributeGroupName = "MyAttributeGroupName",
    Description = "Test attribute group",
    Attributes = new Dictionary<string, object> { }
});
go
var application Application
var attributeGroup AttributeGroup

application.addAttributeGroup(jsii.String("MyAttributeGroupId"), &AttributeGroupAssociationProps{
	AttributeGroupName: jsii.String("MyAttributeGroupName"),
	Description: jsii.String("Test attribute group"),
	Attributes: map[string]interface{}{
	},
})

Associating an attribute group with application ​

You can associate an application with an attribute group with associateWith:

ts
declare const application: appreg.Application;
declare const attributeGroup: appreg.AttributeGroup;
attributeGroup.associateWith(application);
python
# application: appreg.Application
# attribute_group: appreg.AttributeGroup

attribute_group.associate_with(application)
java
Application application;
AttributeGroup attributeGroup;

attributeGroup.associateWith(application);
csharp
Application application;
AttributeGroup attributeGroup;

attributeGroup.AssociateWith(application);
go
var application Application
var attributeGroup AttributeGroup

attributeGroup.associateWith(application)

Associating application with a Stack ​

You can associate a stack with an application with the associateApplicationWithStack() API:

ts
const app = new App();
const myStack = new Stack(app, 'MyStack');

declare const application: appreg.Application;
application.associateApplicationWithStack(myStack);
python
# application: appreg.Application
app = App()
my_stack = Stack(app, "MyStack")
application.associate_application_with_stack(my_stack)
java
Application application;
App app = new App();
Stack myStack = new Stack(app, "MyStack");
application.associateApplicationWithStack(myStack);
csharp
Application application;
var app = new App();
var myStack = new Stack(app, "MyStack");
application.AssociateApplicationWithStack(myStack);
go
var application Application
app := awscdk.NewApp()
myStack := awscdk.Newstack(app, jsii.String("MyStack"))
application.associateApplicationWithStack(myStack)

Sharing ​

You can share your AppRegistry applications and attribute groups with AWS Organizations, Organizational Units (OUs), AWS accounts within an organization, as well as IAM roles and users. AppRegistry requires that AWS Organizations is enabled in an account before deploying a share of an application or attribute group.

Sharing an application ​

ts
import * as iam from 'aws-cdk-lib/aws-iam';
declare const application: appreg.Application;
declare const myRole: iam.IRole;
declare const myUser: iam.IUser;
application.shareApplication('MyShareId', {
  name:'MyShare',
  accounts: ['123456789012'],
  organizationArns: ['arn:aws:organizations::123456789012:organization/o-my-org-id'],
  roles: [myRole],
  users: [myUser],
});
python
import aws_cdk.aws_iam as iam
# application: appreg.Application
# my_role: iam.IRole
# my_user: iam.IUser

application.share_application("MyShareId",
    name="MyShare",
    accounts=["123456789012"],
    organization_arns=["arn:aws:organizations::123456789012:organization/o-my-org-id"],
    roles=[my_role],
    users=[my_user]
)
java
import software.amazon.awscdk.services.iam.*;
Application application;
IRole myRole;
IUser myUser;

application.shareApplication("MyShareId", ShareOptions.builder()
        .name("MyShare")
        .accounts(List.of("123456789012"))
        .organizationArns(List.of("arn:aws:organizations::123456789012:organization/o-my-org-id"))
        .roles(List.of(myRole))
        .users(List.of(myUser))
        .build());
csharp
using Amazon.CDK.AWS.IAM;
Application application;
IRole myRole;
IUser myUser;

application.ShareApplication("MyShareId", new ShareOptions {
    Name = "MyShare",
    Accounts = new [] { "123456789012" },
    OrganizationArns = new [] { "arn:aws:organizations::123456789012:organization/o-my-org-id" },
    Roles = new [] { myRole },
    Users = new [] { myUser }
});
go
import iam "github.com/aws/aws-cdk-go/awscdk"
var application Application
var myRole IRole
var myUser IUser

application.shareApplication(jsii.String("MyShareId"), &ShareOptions{
	Name: jsii.String("MyShare"),
	Accounts: []*string{
		jsii.String("123456789012"),
	},
	OrganizationArns: []*string{
		jsii.String("arn:aws:organizations::123456789012:organization/o-my-org-id"),
	},
	Roles: []IRole{
		myRole,
	},
	Users: []IUser{
		myUser,
	},
})

E.g., sharing an application with multiple accounts and allowing the accounts to associate resources to the application.

ts
import * as iam from 'aws-cdk-lib/aws-iam';
declare const application: appreg.Application;
application.shareApplication('MyShareId', {
  name: 'MyShare',
  accounts: ['123456789012', '234567890123'],
  sharePermission: appreg.SharePermission.ALLOW_ACCESS,
});
python
import aws_cdk.aws_iam as iam
# application: appreg.Application

application.share_application("MyShareId",
    name="MyShare",
    accounts=["123456789012", "234567890123"],
    share_permission=appreg.SharePermission.ALLOW_ACCESS
)
java
import software.amazon.awscdk.services.iam.*;
Application application;

application.shareApplication("MyShareId", ShareOptions.builder()
        .name("MyShare")
        .accounts(List.of("123456789012", "234567890123"))
        .sharePermission(SharePermission.ALLOW_ACCESS)
        .build());
csharp
using Amazon.CDK.AWS.IAM;
Application application;

application.ShareApplication("MyShareId", new ShareOptions {
    Name = "MyShare",
    Accounts = new [] { "123456789012", "234567890123" },
    SharePermission = SharePermission.ALLOW_ACCESS
});
go
import iam "github.com/aws/aws-cdk-go/awscdk"
var application Application

application.shareApplication(jsii.String("MyShareId"), &ShareOptions{
	Name: jsii.String("MyShare"),
	Accounts: []*string{
		jsii.String("123456789012"),
		jsii.String("234567890123"),
	},
	SharePermission: appreg.SharePermission_ALLOW_ACCESS,
})

Sharing an attribute group ​

ts
import * as iam from 'aws-cdk-lib/aws-iam';
declare const attributeGroup: appreg.AttributeGroup;
declare const myRole: iam.IRole;
declare const myUser: iam.IUser;
attributeGroup.shareAttributeGroup('MyShareId', {
  name: 'MyShare',
  accounts: ['123456789012'],
  organizationArns: ['arn:aws:organizations::123456789012:organization/o-my-org-id'],
  roles: [myRole],
  users: [myUser],
});
python
import aws_cdk.aws_iam as iam
# attribute_group: appreg.AttributeGroup
# my_role: iam.IRole
# my_user: iam.IUser

attribute_group.share_attribute_group("MyShareId",
    name="MyShare",
    accounts=["123456789012"],
    organization_arns=["arn:aws:organizations::123456789012:organization/o-my-org-id"],
    roles=[my_role],
    users=[my_user]
)
java
import software.amazon.awscdk.services.iam.*;
AttributeGroup attributeGroup;
IRole myRole;
IUser myUser;

attributeGroup.shareAttributeGroup("MyShareId", ShareOptions.builder()
        .name("MyShare")
        .accounts(List.of("123456789012"))
        .organizationArns(List.of("arn:aws:organizations::123456789012:organization/o-my-org-id"))
        .roles(List.of(myRole))
        .users(List.of(myUser))
        .build());
csharp
using Amazon.CDK.AWS.IAM;
AttributeGroup attributeGroup;
IRole myRole;
IUser myUser;

attributeGroup.ShareAttributeGroup("MyShareId", new ShareOptions {
    Name = "MyShare",
    Accounts = new [] { "123456789012" },
    OrganizationArns = new [] { "arn:aws:organizations::123456789012:organization/o-my-org-id" },
    Roles = new [] { myRole },
    Users = new [] { myUser }
});
go
import iam "github.com/aws/aws-cdk-go/awscdk"
var attributeGroup AttributeGroup
var myRole IRole
var myUser IUser

attributeGroup.shareAttributeGroup(jsii.String("MyShareId"), &ShareOptions{
	Name: jsii.String("MyShare"),
	Accounts: []*string{
		jsii.String("123456789012"),
	},
	OrganizationArns: []*string{
		jsii.String("arn:aws:organizations::123456789012:organization/o-my-org-id"),
	},
	Roles: []IRole{
		myRole,
	},
	Users: []IUser{
		myUser,
	},
})

E.g., sharing an application with multiple accounts and allowing the accounts to associate applications to the attribute group.

ts
import * as iam from 'aws-cdk-lib/aws-iam';
declare const attributeGroup: appreg.AttributeGroup;
attributeGroup.shareAttributeGroup('MyShareId', {
  name: 'MyShare',
  accounts: ['123456789012', '234567890123'],
  sharePermission: appreg.SharePermission.ALLOW_ACCESS,
});
python
import aws_cdk.aws_iam as iam
# attribute_group: appreg.AttributeGroup

attribute_group.share_attribute_group("MyShareId",
    name="MyShare",
    accounts=["123456789012", "234567890123"],
    share_permission=appreg.SharePermission.ALLOW_ACCESS
)
java
import software.amazon.awscdk.services.iam.*;
AttributeGroup attributeGroup;

attributeGroup.shareAttributeGroup("MyShareId", ShareOptions.builder()
        .name("MyShare")
        .accounts(List.of("123456789012", "234567890123"))
        .sharePermission(SharePermission.ALLOW_ACCESS)
        .build());
csharp
using Amazon.CDK.AWS.IAM;
AttributeGroup attributeGroup;

attributeGroup.ShareAttributeGroup("MyShareId", new ShareOptions {
    Name = "MyShare",
    Accounts = new [] { "123456789012", "234567890123" },
    SharePermission = SharePermission.ALLOW_ACCESS
});
go
import iam "github.com/aws/aws-cdk-go/awscdk"
var attributeGroup AttributeGroup

attributeGroup.shareAttributeGroup(jsii.String("MyShareId"), &ShareOptions{
	Name: jsii.String("MyShare"),
	Accounts: []*string{
		jsii.String("123456789012"),
		jsii.String("234567890123"),
	},
	SharePermission: appreg.SharePermission_ALLOW_ACCESS,
})

Types ​

NameKindSummary
ApplicationConstruct (L2)A Service Catalog AppRegistry Application.
AttributeGroupConstruct (L2)A Service Catalog AppRegistry Attribute Group.
ApplicationAssociatorConstructAn AppRegistry construct to automatically create an application with the given name and description.
ApplicationAssociatorPropsStructProperties for Service Catalog AppRegistry Application Associator.
ApplicationPropsStructProperties for a Service Catalog AppRegistry Application.
AttributeGroupAssociationPropsStructProperties for a Service Catalog AppRegistry Attribute Group.
AttributeGroupPropsStructProperties for a Service Catalog AppRegistry Attribute Group.
BindTargetApplicationResultStructProperties for Service Catalog AppRegistry Application Associator to work with.
CreateTargetApplicationOptionsStructProperties used to define New TargetApplication.
ExistingTargetApplicationOptionsStructProperties used to define Existing TargetApplication.
IApplicationInterfaceA Service Catalog AppRegistry Application.
IAttributeGroupInterfaceA Service Catalog AppRegistry Attribute Group.
ShareOptionsStructThe options that are passed into a share of an Application or Attribute Group.
SharePermissionEnumSupported permissions for sharing applications or attribute groups with principals using AWS RAM.
TargetApplicationClassContains static factory methods with which you can build the input needed for application associator to work.
TargetApplicationCommonOptionsStructProperties used to define targetapplication.