Generate directly usable AWS CloudFormation template with aws-cdk v2.
Project description
cdk-bootstrapless-synthesizer
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';
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
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'),
});
}
}
Sample Project
See Sample Project
API Reference
See API Reference for API details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file cdk-bootstrapless-synthesizer-2.3.2.tar.gz
.
File metadata
- Download URL: cdk-bootstrapless-synthesizer-2.3.2.tar.gz
- Upload date:
- Size: 187.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e8df7b835d89ac20ef659ba361eeb2e8a16b2c27a4137caaa894f390d323888 |
|
MD5 | 49193228109f29bd35b14ad8f5810949 |
|
BLAKE2b-256 | d90ddb5a787faae1cda644aad581898a18e099fb35865dee5b1030059168b482 |
File details
Details for the file cdk_bootstrapless_synthesizer-2.3.2-py3-none-any.whl
.
File metadata
- Download URL: cdk_bootstrapless_synthesizer-2.3.2-py3-none-any.whl
- Upload date:
- Size: 185.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3aee9b202ecff46f5dcdce496f67fe6b715c451ce3061f453763b86b1a9200f |
|
MD5 | b5c08ac66daf082c09fa4b4ea1d3ea7d |
|
BLAKE2b-256 | 8fbaf89fbb0be66868a325b393dd478b14d8e074e2fd9619ff45a746bdf9ccc7 |