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

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.1.4.tar.gz (58.8 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.1.4-py3-none-any.whl (57.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cdk-bootstrapless-synthesizer-2.1.4.tar.gz
  • Upload date:
  • Size: 58.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for cdk-bootstrapless-synthesizer-2.1.4.tar.gz
Algorithm Hash digest
SHA256 2fad182b83b45515f4f17812128ceb78a727c513c8ed382ae36e05838af0ada1
MD5 0dd6eea8569e976540f79e9734b8c880
BLAKE2b-256 76dc1ce183a364fa65c3581a79eddbd3b4879a96ec92e3374ba9377fc48aa243

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cdk_bootstrapless_synthesizer-2.1.4-py3-none-any.whl
  • Upload date:
  • Size: 57.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for cdk_bootstrapless_synthesizer-2.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0270504e9bb7de55f13c5fff9f385c8f8ef4e6c153c1fe2271e63d4cac0c0287
MD5 f530499812710921a35c7886818695a7
BLAKE2b-256 380021e2f953b21a7689488166d467c011745b03aa849e2d27d0ec47b3b0a648

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