Namespace Amazon.CDK.AWS.Servicecatalogappregistry.Alpha
AWS ServiceCatalogAppRegistry Construct Library
---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 <a href="https://semver.org/">Semantic Versioning</a> 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.
Table Of Contents
The @aws-cdk/aws-servicecatalogappregistry-alpha
package contains resources that enable users to automate governance and management of their AWS resources at scale.
using Amazon.CDK.AWS.Servicecatalogappregistry.Alpha;
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.
var application = new Application(this, "MyFirstApplication", new ApplicationProps {
ApplicationName = "MyFirstApplicationName",
Description = "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:
var importedApplication = Application.FromApplicationArn(this, "MyImportedApplication", "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:
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" }
}) }
});
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:
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" }
}) }
});
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:
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"
}) }
});
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:
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> { }
});
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:
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" }
});
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:
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" }
}) }
});
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.
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" }
} }
}
});
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:
var importedAttributeGroup = AttributeGroup.FromAttributeGroupArn(this, "MyImportedAttrGroup", "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:
Application application;
AttributeGroup attributeGroup;
application.AddAttributeGroup("MyAttributeGroupId", new AttributeGroupAssociationProps {
AttributeGroupName = "MyAttributeGroupName",
Description = "Test attribute group",
Attributes = new Dictionary<string, object> { }
});
Associating an attribute group with application
You can associate an application with an attribute group with associateWith
:
Application application;
AttributeGroup attributeGroup;
attributeGroup.AssociateWith(application);
Associating application with a Stack
You can associate a stack with an application with the associateApplicationWithStack()
API:
Application application;
var app = new App();
var myStack = new Stack(app, "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
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 }
});
E.g., sharing an application with multiple accounts and allowing the accounts to associate resources to the application.
using Amazon.CDK.AWS.IAM;
Application application;
application.ShareApplication("MyShareId", new ShareOptions {
Name = "MyShare",
Accounts = new [] { "123456789012", "234567890123" },
SharePermission = SharePermission.ALLOW_ACCESS
});
Sharing an attribute group
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 }
});
E.g., sharing an application with multiple accounts and allowing the accounts to associate applications to the attribute group.
using Amazon.CDK.AWS.IAM;
AttributeGroup attributeGroup;
attributeGroup.ShareAttributeGroup("MyShareId", new ShareOptions {
Name = "MyShare",
Accounts = new [] { "123456789012", "234567890123" },
SharePermission = SharePermission.ALLOW_ACCESS
});
Classes
Application | (experimental) A Service Catalog AppRegistry Application. |
ApplicationAssociator | (experimental) An AppRegistry construct to automatically create an application with the given name and description. |
ApplicationAssociatorProps | (experimental) Properties for Service Catalog AppRegistry Application Associator. |
ApplicationProps | (experimental) Properties for a Service Catalog AppRegistry Application. |
AttributeGroup | (experimental) A Service Catalog AppRegistry Attribute Group. |
AttributeGroupAssociationProps | (experimental) Properties for a Service Catalog AppRegistry Attribute Group. |
AttributeGroupProps | (experimental) Properties for a Service Catalog AppRegistry Attribute Group. |
BindTargetApplicationResult | (experimental) Properties for Service Catalog AppRegistry Application Associator to work with. |
CreateTargetApplicationOptions | (experimental) Properties used to define New TargetApplication. |
ExistingTargetApplicationOptions | (experimental) Properties used to define Existing TargetApplication. |
ShareOptions | (experimental) The options that are passed into a share of an Application or Attribute Group. |
SharePermission | (experimental) Supported permissions for sharing applications or attribute groups with principals using AWS RAM. |
TargetApplication | (experimental) Contains static factory methods with which you can build the input needed for application associator to work. |
TargetApplicationCommonOptions | (experimental) Properties used to define targetapplication. |
Interfaces
IApplication | (experimental) A Service Catalog AppRegistry Application. |
IApplicationAssociatorProps | (experimental) Properties for Service Catalog AppRegistry Application Associator. |
IApplicationProps | (experimental) Properties for a Service Catalog AppRegistry Application. |
IAttributeGroup | (experimental) A Service Catalog AppRegistry Attribute Group. |
IAttributeGroupAssociationProps | (experimental) Properties for a Service Catalog AppRegistry Attribute Group. |
IAttributeGroupProps | (experimental) Properties for a Service Catalog AppRegistry Attribute Group. |
IBindTargetApplicationResult | (experimental) Properties for Service Catalog AppRegistry Application Associator to work with. |
ICreateTargetApplicationOptions | (experimental) Properties used to define New TargetApplication. |
IExistingTargetApplicationOptions | (experimental) Properties used to define Existing TargetApplication. |
IShareOptions | (experimental) The options that are passed into a share of an Application or Attribute Group. |
ITargetApplicationCommonOptions | (experimental) Properties used to define targetapplication. |