Skip to main content

Generate directly usable AWS CloudFormation template with aws-cdk v2.

Project description

cdk-bootstrapless-synthesizer

npm version PyPI npm PyPI - Downloads

A bootstrapless stack synthesizer that is designated to generate templates that can be directly used by AWS CloudFormation.

Please use ^1.0.0 for cdk version 1.x.x, use ^2.0.0 for cdk version 2.x.x

Usage

import { BootstraplessStackSynthesizer } from 'cdk-bootstrapless-synthesizer';

main.ts

const app = new App();

new MyStack(app, 'my-stack-dev', {
  synthesizer: new BootstraplessStackSynthesizer({
    templateBucketName: 'cfn-template-bucket',

    fileAssetBucketName: 'file-asset-bucket-${AWS::Region}',
    fileAssetRegionSet: ['us-west-1', 'us-west-2'],
    fileAssetPrefix: 'file-asset-prefix/latest/',

    imageAssetRepositoryName: 'your-ecr-repo-name',
    imageAssetAccountId: '1234567890',
    imageAssetTagPrefix: 'latest-',
    imageAssetRegionSet: ['us-west-1', 'us-west-2'],
  }),
});

// Or by environment variables
env.BSS_TEMPLATE_BUCKET_NAME = 'cfn-template-bucket';

env.BSS_FILE_ASSET_BUCKET_NAME = 'file-asset-bucket-\${AWS::Region}';
env.BSS_FILE_ASSET_REGION_SET = 'us-west-1,us-west-2';
env.BSS_FILE_ASSET_PREFIX = 'file-asset-prefix/latest/';

env.BSS_IMAGE_ASSET_REPOSITORY_NAME = 'your-ecr-repo-name';
env.BSS_IMAGE_ASSET_ACCOUNT_ID = '1234567890';
env.BSS_IMAGE_ASSET_TAG_PREFIX = 'latest-';
env.BSS_IMAGE_ASSET_REGION_SET = 'us-west-1,us-west-2';

new MyStack(app, 'my-stack-dev2', {
  synthesizer: new BootstraplessStackSynthesizer(),
});

// use Aspect to grant the role to pull ECR repository from account BSS_IMAGE_ASSET_ACCOUNT_ID

main.ts

Synth AWS CloudFormation templates, assets and upload them

$ cdk synth
$ npx cdk-assets publish -p cdk.out/my-stack-dev.assets.json -v

Limitations

When using BSS_IMAGE_ASSET_ACCOUNT_ID to push ECR repository to shared account, you need use Aspect to grant the role with policy to pull the repository from cross account. Or using the following WithCrossAccount techniques.

Currently only below scenarios are supported,

  • ECS
  • SageMaker training job integrated with Step Functions
  • AWS Batch
  • AWS Lambda

For other scenarios, the feature request or pull request are welcome.

function OverrideRepositoryAccount(scope: Construct, id: string, repo: IRepository): IRepository {
  class Import extends RepositoryBase {
    public repositoryName = repo.repositoryName;
    public repositoryArn = Repository.arnForLocalRepository(repo.repositoryName, scope, env.BSS_IMAGE_ASSET_ACCOUNT_ID);

    public addToResourcePolicy(_statement: iam.PolicyStatement): iam.AddToResourcePolicyResult {
      // dropped
      return { statementAdded: false };
    }
  }

  return new Import(scope, id);
}

function WithCrossAccount(image: DockerImageAsset): DockerImageAsset {
  image.repository = OverrideRepositoryAccount(image, 'CrossAccountRepo', image.repository);
  return image;
}

export class SampleStack extends Stack {
  constructor(scope: Construct, id: string, props: StackProps = {}) {
    super(scope, id, props);

    const image = WithCrossAccount(new DockerImageAsset(this, 'MyBuildImage', {
      directory: path.join(__dirname, '../docker'),
    }));

    new CfnOutput(this, 'output', { value: image.imageUri });

    const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef');
    taskDefinition.addContainer('DefaultContainer', {
      image: ecs.ContainerImage.fromDockerImageAsset(image),
      memoryLimitMiB: 512,
    });

    fromAsset(this, 'stepfunctions', {
      directory: path.join(__dirname, '../docker'),
    });
  }
}

main.ts

Sample Project

See Sample Project

API Reference

See API Reference for API details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdk-bootstrapless-synthesizer-2.2.10.tar.gz (185.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cdk_bootstrapless_synthesizer-2.2.10-py3-none-any.whl (184.0 kB view details)

Uploaded Python 3

File details

Details for the file cdk-bootstrapless-synthesizer-2.2.10.tar.gz.

File metadata

File hashes

Hashes for cdk-bootstrapless-synthesizer-2.2.10.tar.gz
Algorithm Hash digest
SHA256 36aedef1020741799780f17d91ad8b3c9d48525131b29b93b3ad22596823682d
MD5 a2296bd25e9f152b84f82f760b9cc17e
BLAKE2b-256 5d428f19b324f004f4ef8f5272f2bb3e312309d8ed686c93b2f7890a479821a8

See more details on using hashes here.

File details

Details for the file cdk_bootstrapless_synthesizer-2.2.10-py3-none-any.whl.

File metadata

File hashes

Hashes for cdk_bootstrapless_synthesizer-2.2.10-py3-none-any.whl
Algorithm Hash digest
SHA256 d791f606548ec07f0811aa15084d2274b71d7bb635f3cb8d6f593f01f1a3692c
MD5 44f3c7ba0eeb54e064ff52c719c769d8
BLAKE2b-256 d7f628294a8b0f407e962d36d3452e8d9d94877e615e3b18d95013bef3c2ec46

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page