konokenj.cdk-api-mcp-server 0.48.0__py3-none-any.whl → 0.57.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cdk_api_mcp_server/__about__.py +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md +12 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-agentcore-alpha/README.md +1979 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md +2 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/README.md +156 -69
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-imagebuilder-alpha/README.md +656 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-lambda-go-alpha/README.md +102 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-msk-alpha/README.md +38 -8
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-sagemaker-alpha/README.md +32 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/mixins-preview/README.md +182 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md +2 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/README.md +34 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/integ.api-with-authorizer-and-proxy.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/integ.lambda-api.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/integ.lambda-permission-consolidation.ts +55 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/integ.spec-restapi.ts +1 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2/README.md +93 -81
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2/integ.stage.ts +20 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-authorizers/integ.iam.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-authorizers/integ.lambda.ts +2 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-authorizers/integ.user-pool.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/README.md +35 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.add-subroute-integration.ts +7 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.http-proxy.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.lambda-connect-disconnect-trigger.ts +2 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.lambda-permission-consolidation.ts +45 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.lambda-proxy.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.lambda.ts +4 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-appsync/integ.graphql-lambda-permission.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-appsync/integ.js-resolver.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/README.md +15 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/integ.managed-compute-environment-default-instance-class.ts +20 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/integ.core-custom-resources-node-18.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/integ.core-custom-resources-service-timeout.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/README.md +33 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.function-url-origin-ip-address-type.ts +84 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.origin-response-completion-timeout.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudtrail/integ.cloudtrail-data-events-only.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/README.md +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.anomaly-detection-alarm.ts +44 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/README.md +0 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-elastic-beanstalk-deploy.ts +4 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cognito/README.md +2 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md +125 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/TABLE_V1_API.md +45 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.add-to-resource-policy.ts +97 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.compound.ts +32 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.policy.ts +21 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.table-v2.compound.ts +43 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/README.md +16 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.client-vpn-endpoint-disconnect-on-session-timeout.ts +65 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs.ts +4 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr/README.md +41 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr/integ.tag-mutability-exclusion.ts +30 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +47 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts +5 -3
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-no-default-capacity-provider.ts +107 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-strategies.ts +32 -8
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.alb-fargate-service-public-private-switch.ts +45 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md +103 -83
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-al2023-nodegroup.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-cluster-removal-policy.ts +31 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.fargate-cluster.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/README.md +34 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.alb-lambda-multi-value-headers.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.alb.oidc.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.security-group.ts +70 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2-actions/integ.cognito.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/README.md +22 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.firehose-delivery-stream.ts +51 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/integ.managed-policy.ts +9 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/integ.policy.ts +9 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesis/README.md +42 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesis/integ.stream-shard-level-monitoring.ts +47 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/README.md +156 -3
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.cloudwatch-logs-processors.ts +45 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.record-format-conversion-schema.ts +154 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.record-format-conversion.ts +178 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/README.md +39 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.binary-payload.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.logging-config.ts +8 -8
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.multi-tenancy.ts +24 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.params-and-secrets.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.runtime-management.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.runtime.fromasset.ts +19 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.runtime.inlinecode.ts +11 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.dependencies-pnpm.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.function-exclude-smithy-models.ts +2 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.nodejs.build.images.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md +4 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.metricfilter-apply-on-transformed-logs.ts +29 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.subscriptionfilter.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservice/integ.opensearch.ebs.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservice/integ.opensearch.min.ts +1 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-cloudwatch-logs-exports.ts +56 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-data-api-to-imported-cluster.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-data-api.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53/README.md +44 -31
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53/integ.private-hosted-zone-from-attributes.ts +41 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53/integ.zone-delegation-iam-stack.ts +66 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/README.md +65 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-big-response.ts +17 -6
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-cloudfront.ts +20 -18
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-cross-nested-stack-source.ts +7 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-cross-stack-source.ts +6 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-cross-stack-ssm-source.ts +7 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-data.ts +99 -59
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-deployed-bucket.ts +10 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-large-file.ts +23 -12
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-loggroup.ts +7 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-security-groups-efs.ts +77 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-security-groups-empty.ts +69 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-security-groups-multiple.ts +89 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-security-groups-single.ts +77 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-signcontent.ts +11 -7
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-substitution-with-destination-key.ts +15 -8
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-substitution-with-role.ts +29 -14
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-substitution.ts +16 -8
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-basic.ts +65 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-config.ts +66 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-custom-subnets.ts +66 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-efs.ts +66 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-security-groups.ts +72 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-vpc-subnet-selection.ts +70 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment.ts +47 -69
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-secretsmanager/integ.secret.dynamic-reference-key.ts +38 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.sm-jsonpath-with-distributed-map-jsonata.ts +105 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/README.md +15 -4
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.call-aws-service-cross-region-lambda.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-arm64.ts +27 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-default.ts +25 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-mixed-arch.ts +35 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-x86.ts +27 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.invoke-json-path.ts +102 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-synthetics/README.md +17 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-synthetics/integ.canary-runtime-validation.ts +43 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-synthetics/integ.canary.ts +2 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/README.md +56 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.aws-custom-resource.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.custom-resource-config-lambda-node-runtime.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.external-id.ts +80 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.invoke-function-payload.ts +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +71 -10
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md +32 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/interfaces/README.md +33 -0
- {konokenj_cdk_api_mcp_server-0.48.0.dist-info → konokenj_cdk_api_mcp_server-0.57.0.dist-info}/METADATA +2 -2
- {konokenj_cdk_api_mcp_server-0.48.0.dist-info → konokenj_cdk_api_mcp_server-0.57.0.dist-info}/RECORD +151 -106
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-firehose-stream.ts +0 -33
- {konokenj_cdk_api_mcp_server-0.48.0.dist-info → konokenj_cdk_api_mcp_server-0.57.0.dist-info}/WHEEL +0 -0
- {konokenj_cdk_api_mcp_server-0.48.0.dist-info → konokenj_cdk_api_mcp_server-0.57.0.dist-info}/entry_points.txt +0 -0
- {konokenj_cdk_api_mcp_server-0.48.0.dist-info → konokenj_cdk_api_mcp_server-0.57.0.dist-info}/licenses/LICENSE.txt +0 -0
|
@@ -7,7 +7,7 @@ class TestStack extends Stack {
|
|
|
7
7
|
constructor(scope: Construct, id: string, props?: StackProps) {
|
|
8
8
|
super(scope, id, props);
|
|
9
9
|
|
|
10
|
-
const instanceTypes = ['i4g.large.search', 'i4i.xlarge.search', 'r7gd.xlarge.search'];
|
|
10
|
+
const instanceTypes = ['i4g.large.search', 'i4i.xlarge.search', 'r7gd.xlarge.search', 'r8gd.medium.search'];
|
|
11
11
|
|
|
12
12
|
instanceTypes.forEach((instanceType, index) => {
|
|
13
13
|
new opensearch.Domain(this, `Domain${index + 1}`, {
|
|
@@ -11,6 +11,7 @@ class TestStack extends Stack {
|
|
|
11
11
|
opensearch.EngineVersion.OPENSEARCH_2_13,
|
|
12
12
|
opensearch.EngineVersion.OPENSEARCH_2_15,
|
|
13
13
|
opensearch.EngineVersion.OPENSEARCH_2_17,
|
|
14
|
+
opensearch.EngineVersion.OPENSEARCH_3_1,
|
|
14
15
|
];
|
|
15
16
|
|
|
16
17
|
// deploy opensearch domain with minimal configuration
|
|
@@ -1204,7 +1204,7 @@ const cluster = new rds.DatabaseCluster(this, 'Database', {
|
|
|
1204
1204
|
}),
|
|
1205
1205
|
writer: rds.ClusterInstance.provisioned('writer'),
|
|
1206
1206
|
vpc,
|
|
1207
|
-
cloudwatchLogsExports: ['error', 'general', 'slowquery', 'audit'], // Export all available MySQL-based logs
|
|
1207
|
+
cloudwatchLogsExports: ['error', 'general', 'slowquery', 'audit', 'instance', 'iam-db-auth-error'], // Export all available MySQL-based logs
|
|
1208
1208
|
cloudwatchLogsRetention: logs.RetentionDays.THREE_MONTHS, // Optional - default is to never expire logs
|
|
1209
1209
|
cloudwatchLogsRetentionRole: myLogsPublishingRole, // Optional - a role will be created if not provided
|
|
1210
1210
|
// ...
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as cdk from 'aws-cdk-lib/core';
|
|
2
|
+
import { ExpectedResult, IntegTest } from '@aws-cdk/integ-tests-alpha';
|
|
3
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
4
|
+
import * as rds from 'aws-cdk-lib/aws-rds';
|
|
5
|
+
|
|
6
|
+
const app = new cdk.App();
|
|
7
|
+
|
|
8
|
+
const stack = new cdk.Stack(app, 'CloudWatchLogsExportsStack');
|
|
9
|
+
const vpc = new ec2.Vpc(stack, 'VPC');
|
|
10
|
+
|
|
11
|
+
const mysql = new rds.DatabaseCluster(stack, 'DatabaseClusterMysql', {
|
|
12
|
+
engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_09_0 }),
|
|
13
|
+
writer: rds.ClusterInstance.serverlessV2('writerInstance'),
|
|
14
|
+
vpc,
|
|
15
|
+
cloudwatchLogsExports: ['error', 'general', 'slowquery', 'audit', 'instance', 'iam-db-auth-error'],
|
|
16
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const postgresql = new rds.DatabaseCluster(stack, 'DatabaseClusterPostgresql', {
|
|
20
|
+
engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_16_4 }),
|
|
21
|
+
writer: rds.ClusterInstance.serverlessV2('writerInstance'),
|
|
22
|
+
vpc,
|
|
23
|
+
cloudwatchLogsExports: ['postgresql', 'iam-db-auth-error', 'instance'],
|
|
24
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const integ = new IntegTest(app, 'CloudWatchLogsExportsStackInteg', {
|
|
28
|
+
testCases: [stack],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
integ.assertions.awsApiCall('RDS', 'describeDBClusters', {
|
|
32
|
+
DBClusterIdentifier: mysql.clusterIdentifier,
|
|
33
|
+
}).expect(ExpectedResult.objectLike({
|
|
34
|
+
DBClusters: [{
|
|
35
|
+
EnabledCloudwatchLogsExports: [
|
|
36
|
+
'audit',
|
|
37
|
+
'error',
|
|
38
|
+
'general',
|
|
39
|
+
'iam-db-auth-error',
|
|
40
|
+
'instance',
|
|
41
|
+
'slowquery',
|
|
42
|
+
],
|
|
43
|
+
}],
|
|
44
|
+
}));
|
|
45
|
+
|
|
46
|
+
integ.assertions.awsApiCall('RDS', 'describeDBClusters', {
|
|
47
|
+
DBClusterIdentifier: postgresql.clusterIdentifier,
|
|
48
|
+
}).expect(ExpectedResult.objectLike({
|
|
49
|
+
DBClusters: [{
|
|
50
|
+
EnabledCloudwatchLogsExports: [
|
|
51
|
+
'iam-db-auth-error',
|
|
52
|
+
'instance',
|
|
53
|
+
'postgresql',
|
|
54
|
+
],
|
|
55
|
+
}],
|
|
56
|
+
}));
|
|
@@ -14,7 +14,7 @@ const stack = new cdk.Stack(app, 'cluster-data-api-to-imported-cluster');
|
|
|
14
14
|
const vpc = new ec2.Vpc(stack, 'VPC');
|
|
15
15
|
|
|
16
16
|
const func = new lambda.Function(stack, 'Function', {
|
|
17
|
-
runtime: lambda.Runtime.
|
|
17
|
+
runtime: lambda.Runtime.NODEJS_20_X,
|
|
18
18
|
handler: 'index.handler',
|
|
19
19
|
code: lambda.Code.fromInline('exports.handler = async (event) => { return "hello"; }'),
|
|
20
20
|
});
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-data-api.ts
CHANGED
|
@@ -14,7 +14,7 @@ const stack = new cdk.Stack(app, 'cluster-data-api');
|
|
|
14
14
|
const vpc = new ec2.Vpc(stack, 'VPC');
|
|
15
15
|
|
|
16
16
|
const fucntion = new lambda.Function(stack, 'Function', {
|
|
17
|
-
runtime: lambda.Runtime.
|
|
17
|
+
runtime: lambda.Runtime.NODEJS_20_X,
|
|
18
18
|
handler: 'index.handler',
|
|
19
19
|
code: lambda.Code.fromInline('exports.handler = async (event) => { return "hello"; }'),
|
|
20
20
|
});
|
|
@@ -367,40 +367,40 @@ const crossAccountRole = new iam.Role(this, 'CrossAccountRole', {
|
|
|
367
367
|
roleName: 'MyDelegationRole',
|
|
368
368
|
// The other account
|
|
369
369
|
assumedBy: new iam.AccountPrincipal('12345678901'),
|
|
370
|
-
// You can scope down this role policy to be least privileged.
|
|
371
|
-
// If you want the other account to be able to manage specific records,
|
|
372
|
-
// you can scope down by resource and/or normalized record names
|
|
373
|
-
inlinePolicies: {
|
|
374
|
-
crossAccountPolicy: new iam.PolicyDocument({
|
|
375
|
-
statements: [
|
|
376
|
-
new iam.PolicyStatement({
|
|
377
|
-
sid: 'ListHostedZonesByName',
|
|
378
|
-
effect: iam.Effect.ALLOW,
|
|
379
|
-
actions: ['route53:ListHostedZonesByName'],
|
|
380
|
-
resources: ['*'],
|
|
381
|
-
}),
|
|
382
|
-
new iam.PolicyStatement({
|
|
383
|
-
sid: 'GetHostedZoneAndChangeResourceRecordSets',
|
|
384
|
-
effect: iam.Effect.ALLOW,
|
|
385
|
-
actions: ['route53:GetHostedZone', 'route53:ChangeResourceRecordSets'],
|
|
386
|
-
// This example assumes the RecordSet subdomain.somexample.com
|
|
387
|
-
// is contained in the HostedZone
|
|
388
|
-
resources: ['arn:aws:route53:::hostedzone/HZID00000000000000000'],
|
|
389
|
-
conditions: {
|
|
390
|
-
'ForAllValues:StringLike': {
|
|
391
|
-
'route53:ChangeResourceRecordSetsNormalizedRecordNames': [
|
|
392
|
-
'subdomain.someexample.com',
|
|
393
|
-
],
|
|
394
|
-
},
|
|
395
|
-
},
|
|
396
|
-
}),
|
|
397
|
-
],
|
|
398
|
-
}),
|
|
399
|
-
},
|
|
400
370
|
});
|
|
401
371
|
parentZone.grantDelegation(crossAccountRole);
|
|
402
372
|
```
|
|
403
373
|
|
|
374
|
+
To restrict the records that can be created with the delegation IAM role, use the optional `delegatedZoneNames` property in the delegation options,
|
|
375
|
+
which enforces the `route53:ChangeResourceRecordSetsNormalizedRecordNames` condition key for record names that match those hosted zone names.
|
|
376
|
+
The `delegatedZoneNames` list may only consist of hosted zones names that are subzones of the parent hosted zone.
|
|
377
|
+
|
|
378
|
+
If the delegated zone name contains an unresolved token,
|
|
379
|
+
it must resolve to a zone name that satisfies the requirements according to the documentation:
|
|
380
|
+
https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/specifying-conditions-route53.html#route53_rrset_conditionkeys_normalization
|
|
381
|
+
|
|
382
|
+
> All letters must be lowercase.
|
|
383
|
+
> The DNS name must be without the trailing dot.
|
|
384
|
+
> Characters other than a–z, 0–9, - (hyphen), _ (underscore), and . (period, as a delimiter between labels) must use escape codes in the format \three-digit octal code. For example, \052 is the octal code for character *.
|
|
385
|
+
|
|
386
|
+
This feature allows you to better follow the minimum permissions privilege principle:
|
|
387
|
+
|
|
388
|
+
```ts
|
|
389
|
+
const parentZone = new route53.PublicHostedZone(this, 'HostedZone', {
|
|
390
|
+
zoneName: 'someexample.com',
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
declare const betaCrossAccountRole: iam.Role;
|
|
394
|
+
parentZone.grantDelegation(betaCrossAccountRole, {
|
|
395
|
+
delegatedZoneNames: ['beta.someexample.com'],
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
declare const prodCrossAccountRole: iam.Role;
|
|
399
|
+
parentZone.grantDelegation(prodCrossAccountRole, {
|
|
400
|
+
delegatedZoneNames: ['prod.someexample.com'],
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
404
|
In the account containing the child zone to be delegated:
|
|
405
405
|
|
|
406
406
|
```ts
|
|
@@ -540,7 +540,8 @@ const zone = route53.HostedZone.fromHostedZoneAttributes(this, 'MyZone', {
|
|
|
540
540
|
```
|
|
541
541
|
|
|
542
542
|
Alternatively, use the `HostedZone.fromHostedZoneId` to import hosted zones if
|
|
543
|
-
you know the ID and the retrieval for the `zoneName` is undesirable.
|
|
543
|
+
you know the ID and the retrieval for the `zoneName` is undesirable.
|
|
544
|
+
Note that any records created with a hosted zone obtained this way must have their name be fully qualified
|
|
544
545
|
|
|
545
546
|
```ts
|
|
546
547
|
const zone = route53.HostedZone.fromHostedZoneId(this, 'MyZone', 'ZOJJZC49E0EPZ');
|
|
@@ -558,6 +559,18 @@ const zoneFromAttributes = route53.PublicHostedZone.fromPublicHostedZoneAttribut
|
|
|
558
559
|
const zoneFromId = route53.PublicHostedZone.fromPublicHostedZoneId(this, 'MyZone', 'ZOJJZC49E0EPZ');
|
|
559
560
|
```
|
|
560
561
|
|
|
562
|
+
You can import a Private Hosted Zone with `PrivateHostedZone.fromPrivateHostedZoneId` and `PrivateHostedZone.fromPrivateHostedZoneAttributes` methods:
|
|
563
|
+
|
|
564
|
+
```ts
|
|
565
|
+
const privateZoneFromAttributes = route53.PrivateHostedZone.fromPrivateHostedZoneAttributes(this, 'MyPrivateZone', {
|
|
566
|
+
zoneName: 'example.local',
|
|
567
|
+
hostedZoneId: 'ZOJJZC49E0EPZ',
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
// Does not know zoneName
|
|
571
|
+
const privateZoneFromId = route53.PrivateHostedZone.fromPrivateHostedZoneId(this, 'MyPrivateZone', 'ZOJJZC49E0EPZ');
|
|
572
|
+
```
|
|
573
|
+
|
|
561
574
|
You can use `CrossAccountZoneDelegationRecord` on imported Hosted Zones with the `grantDelegation` method:
|
|
562
575
|
|
|
563
576
|
```ts
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import * as cdk from 'aws-cdk-lib';
|
|
3
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
4
|
+
import { PrivateHostedZone } from 'aws-cdk-lib/aws-route53';
|
|
5
|
+
import { ExpectedResult, IntegTest } from '@aws-cdk/integ-tests-alpha';
|
|
6
|
+
|
|
7
|
+
const app = new cdk.App();
|
|
8
|
+
|
|
9
|
+
const stack = new cdk.Stack(app, 'aws-cdk-route53-integ');
|
|
10
|
+
|
|
11
|
+
const vpc = new ec2.Vpc(stack, 'VPC', { maxAzs: 1, restrictDefaultSecurityGroup: false });
|
|
12
|
+
|
|
13
|
+
const privateZone = new PrivateHostedZone(stack, 'PrivateZone', {
|
|
14
|
+
zoneName: 'aws-cdk.dev', vpc,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const expectPrivateHostedZone = route53.PrivateHostedZone.fromHostedZoneAttributes(stack, 'ExpectPrivateHostedZone', {
|
|
18
|
+
hostedZoneId: privateZone.hostedZoneId,
|
|
19
|
+
zoneName: privateZone.zoneName,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const integTest = new IntegTest(app, 'AwsCdkRoute53IntegTest', {
|
|
23
|
+
testCases: [stack],
|
|
24
|
+
diffAssets: false,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const hostedZoneApiCall = integTest.assertions.awsApiCall('Route53', 'getHostedZone', {
|
|
28
|
+
Id: expectPrivateHostedZone.hostedZoneId,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
hostedZoneApiCall.expect(
|
|
32
|
+
ExpectedResult.objectLike({
|
|
33
|
+
HostedZone: {
|
|
34
|
+
Id: expectPrivateHostedZone.hostedZoneId,
|
|
35
|
+
Name: expectPrivateHostedZone.zoneName,
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
app.synth();
|
|
41
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
2
|
+
import * as cdk from 'aws-cdk-lib';
|
|
3
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
4
|
+
import { Construct } from 'constructs';
|
|
5
|
+
import { IntegTest } from '@aws-cdk/integ-tests-alpha';
|
|
6
|
+
|
|
7
|
+
class ZoneDelegationIamStack extends cdk.Stack {
|
|
8
|
+
constructor(scope: Construct, id: string) {
|
|
9
|
+
super(scope, id);
|
|
10
|
+
|
|
11
|
+
const parentZone = new route53.PublicHostedZone(this, 'ParentZone', {
|
|
12
|
+
zoneName: 'uniqueexample.com',
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const trusteeRoleArns = this.formatArn({
|
|
16
|
+
service: 'iam',
|
|
17
|
+
region: '',
|
|
18
|
+
resource: 'role',
|
|
19
|
+
resourceName: 'ZoneDelegationStack-*',
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const delegationRole = new iam.Role(this, 'ZoneDelegationRole', {
|
|
23
|
+
roleName: 'ExampleDelegationRole',
|
|
24
|
+
assumedBy: new iam.AccountRootPrincipal().withConditions({
|
|
25
|
+
ArnLike: {
|
|
26
|
+
'aws:PrincipalArn': trusteeRoleArns,
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const delegationGrant = parentZone.grantDelegation(delegationRole, {
|
|
32
|
+
delegatedZoneNames: [
|
|
33
|
+
'sub1.uniqueexample.com',
|
|
34
|
+
'sub2_*$.uniqueexample.com', // should result in octal codes in iam condition
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const subZone = new route53.PublicHostedZone(this, 'SubZone', {
|
|
39
|
+
zoneName: 'sub1.uniqueexample.com',
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
new route53.CrossAccountZoneDelegationRecord(subZone, 'ZoneDelegation', {
|
|
43
|
+
delegatedZone: subZone,
|
|
44
|
+
parentHostedZoneName: parentZone.zoneName,
|
|
45
|
+
delegationRole: delegationRole,
|
|
46
|
+
}).node.addDependency(delegationGrant);
|
|
47
|
+
|
|
48
|
+
const subZoneWithSpecialChars = new route53.PublicHostedZone(this, 'SubZoneSpecialChars', {
|
|
49
|
+
zoneName: 'sub2_*$.uniqueexample.com',
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
new route53.CrossAccountZoneDelegationRecord(subZoneWithSpecialChars, 'ZoneDelegation', {
|
|
53
|
+
delegatedZone: subZoneWithSpecialChars,
|
|
54
|
+
parentHostedZoneName: parentZone.zoneName,
|
|
55
|
+
delegationRole: delegationRole,
|
|
56
|
+
}).node.addDependency(delegationGrant);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const app = new cdk.App();
|
|
61
|
+
|
|
62
|
+
const stack = new ZoneDelegationIamStack(app, 'ZoneDelegationStack');
|
|
63
|
+
|
|
64
|
+
new IntegTest(app, 'ZoneDelegationIam', {
|
|
65
|
+
testCases: [stack],
|
|
66
|
+
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# AWS S3 Deployment Construct Library
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
This library allows populating an S3 bucket with the contents of .zip files
|
|
5
4
|
from other S3 buckets or from local disk.
|
|
6
5
|
|
|
@@ -83,7 +82,7 @@ User: *** is not authorized to perform: kms:Decrypt on the resource associated w
|
|
|
83
82
|
because no identity-based policy allows the kms:Decrypt action
|
|
84
83
|
```
|
|
85
84
|
|
|
86
|
-
When this happens, users can use the public `handlerRole` property of `BucketDeployment` to manually
|
|
85
|
+
When this happens, users can use the public `handlerRole` property of `BucketDeployment` to manually
|
|
87
86
|
add the KMS permissions:
|
|
88
87
|
|
|
89
88
|
```ts
|
|
@@ -375,6 +374,7 @@ resource handler.
|
|
|
375
374
|
> of memory and storage size.
|
|
376
375
|
|
|
377
376
|
## JSON-Aware Source Processing
|
|
377
|
+
|
|
378
378
|
When using `Source.jsonData` with CDK Tokens (references to construct properties), you may need to enable the escaping option. This is particularly important when the referenced properties might contain special characters that require proper JSON escaping (like double quotes, line breaks, etc.).
|
|
379
379
|
|
|
380
380
|
```ts
|
|
@@ -462,7 +462,7 @@ to make from placeholders in a local file which will be resolved during deployme
|
|
|
462
462
|
is especially useful in situations like creating an API from a spec file, where users might
|
|
463
463
|
want to reference other CDK resources they have created.
|
|
464
464
|
|
|
465
|
-
The syntax for template variables is `{{ variableName }}` in your local file. Then, you would
|
|
465
|
+
The syntax for template variables is `{{ variableName }}` in your local file. Then, you would
|
|
466
466
|
specify the substitutions in CDK like this:
|
|
467
467
|
|
|
468
468
|
```ts
|
|
@@ -486,7 +486,7 @@ new s3deploy.DeployTimeSubstitutedFile(this, 'MyFile', {
|
|
|
486
486
|
```
|
|
487
487
|
|
|
488
488
|
Nested variables, like `{{ {{ foo }} }}` or `{{ foo {{ bar }} }}`, are not supported by this
|
|
489
|
-
construct. In the first case of a single variable being is double nested `{{ {{ foo }} }}`, only
|
|
489
|
+
construct. In the first case of a single variable being is double nested `{{ {{ foo }} }}`, only
|
|
490
490
|
the `{{ foo }}` would be replaced by the substitution, and the extra brackets would remain in the file.
|
|
491
491
|
In the second case of two nexted variables `{{ foo {{ bar }} }}`, only the `{{ bar }}` would be replaced
|
|
492
492
|
in the file.
|
|
@@ -533,6 +533,67 @@ new cdk.CfnOutput(this, 'ObjectKey', {
|
|
|
533
533
|
});
|
|
534
534
|
```
|
|
535
535
|
|
|
536
|
+
## Specifying a Custom VPC, Subnets, and Security Groups in BucketDeployment
|
|
537
|
+
|
|
538
|
+
By default, the AWS CDK BucketDeployment construct runs in a publicly accessible environment. However, for enhanced security and compliance, you may need to deploy your assets from within a VPC while restricting network access through custom subnets and security groups.
|
|
539
|
+
|
|
540
|
+
### Using a Custom VPC
|
|
541
|
+
|
|
542
|
+
To deploy assets within a private network, specify the vpc property in BucketDeploymentProps. This ensures that the deployment Lambda function executes within your specified VPC.
|
|
543
|
+
|
|
544
|
+
```ts
|
|
545
|
+
const vpc = ec2.Vpc.fromLookup(this, 'ExistingVPC', { vpcId: 'vpc-12345678' });
|
|
546
|
+
const bucket = new s3.Bucket(this, 'MyBucket');
|
|
547
|
+
|
|
548
|
+
new s3deploy.BucketDeployment(this, 'DeployToS3', {
|
|
549
|
+
destinationBucket: bucket,
|
|
550
|
+
vpc: vpc,
|
|
551
|
+
sources: [s3deploy.Source.asset('./website')],
|
|
552
|
+
});
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### Specifying Subnets for Deployment
|
|
556
|
+
|
|
557
|
+
By default, when you specify a VPC, the BucketDeployment function is deployed in the private subnets of that VPC.
|
|
558
|
+
However, you can customize the subnet selection using the vpcSubnets property.
|
|
559
|
+
|
|
560
|
+
```ts
|
|
561
|
+
const vpc = ec2.Vpc.fromLookup(this, 'ExistingVPC', { vpcId: 'vpc-12345678' });
|
|
562
|
+
const bucket = new s3.Bucket(this, 'MyBucket');
|
|
563
|
+
|
|
564
|
+
new s3deploy.BucketDeployment(this, 'DeployToS3', {
|
|
565
|
+
destinationBucket: bucket,
|
|
566
|
+
vpc: vpc,
|
|
567
|
+
vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
|
|
568
|
+
sources: [s3deploy.Source.asset('./website')],
|
|
569
|
+
});
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
### Defining Custom Security Groups
|
|
573
|
+
|
|
574
|
+
For enhanced network security, you can now specify custom security groups in BucketDeploymentProps.
|
|
575
|
+
This allows fine-grained control over ingress and egress rules for the deployment Lambda function.
|
|
576
|
+
|
|
577
|
+
```ts
|
|
578
|
+
const vpc = ec2.Vpc.fromLookup(this, 'ExistingVPC', { vpcId: 'vpc-12345678' });
|
|
579
|
+
const bucket = new s3.Bucket(this, 'MyBucket');
|
|
580
|
+
|
|
581
|
+
const securityGroup = new ec2.SecurityGroup(this, 'CustomSG', {
|
|
582
|
+
vpc: vpc,
|
|
583
|
+
description: 'Allow HTTPS outbound access',
|
|
584
|
+
allowAllOutbound: false,
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
securityGroup.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(443), 'Allow HTTPS traffic');
|
|
588
|
+
|
|
589
|
+
new s3deploy.BucketDeployment(this, 'DeployWithSecurityGroup', {
|
|
590
|
+
destinationBucket: bucket,
|
|
591
|
+
vpc: vpc,
|
|
592
|
+
securityGroups: [securityGroup],
|
|
593
|
+
sources: [s3deploy.Source.asset('./website')],
|
|
594
|
+
});
|
|
595
|
+
```
|
|
596
|
+
|
|
536
597
|
## Notes
|
|
537
598
|
|
|
538
599
|
- This library uses an AWS CloudFormation custom resource which is about 10MiB in
|
|
@@ -11,6 +11,12 @@ import { ExpectedResult } from '@aws-cdk/integ-tests-alpha';
|
|
|
11
11
|
|
|
12
12
|
const numFiles = 50;
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Integration test for bucket deployment with many sources (big response):
|
|
16
|
+
* - Tests deployment with 50 source files to validate response size handling
|
|
17
|
+
* - Uses increased memory limit (2048MB) for large deployments
|
|
18
|
+
* - Validates that objectKeys output is disabled when outputObjectKeys is false
|
|
19
|
+
*/
|
|
14
20
|
class TestBucketDeployment extends cdk.Stack {
|
|
15
21
|
public readonly destinationBucket: s3.IBucket;
|
|
16
22
|
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
|
@@ -21,9 +27,14 @@ class TestBucketDeployment extends cdk.Stack {
|
|
|
21
27
|
autoDeleteObjects: true, // needed for integration test cleanup
|
|
22
28
|
});
|
|
23
29
|
|
|
30
|
+
// Create multiple source files to test big response handling
|
|
24
31
|
const sources = [];
|
|
25
32
|
for (let i = 0; i < numFiles; i++) {
|
|
26
33
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tmpcdk'));
|
|
34
|
+
process.on('exit', () => {
|
|
35
|
+
fs.rmSync(tempDir, { force: true, recursive: true });
|
|
36
|
+
});
|
|
37
|
+
|
|
27
38
|
fs.mkdirSync(tempDir, { recursive: true });
|
|
28
39
|
const fileName = `${i+1}.txt`;
|
|
29
40
|
const filePath = path.join(tempDir, fileName);
|
|
@@ -31,17 +42,17 @@ class TestBucketDeployment extends cdk.Stack {
|
|
|
31
42
|
sources.push(s3deploy.Source.asset(tempDir));
|
|
32
43
|
}
|
|
33
44
|
|
|
34
|
-
const
|
|
45
|
+
const deployment = new s3deploy.BucketDeployment(this, 'DeployWithManySources', {
|
|
35
46
|
sources: sources,
|
|
36
47
|
destinationBucket: this.destinationBucket,
|
|
37
48
|
memoryLimit: 2048,
|
|
38
|
-
retainOnDelete: false,
|
|
49
|
+
retainOnDelete: false,
|
|
39
50
|
outputObjectKeys: false,
|
|
40
51
|
});
|
|
41
52
|
|
|
42
53
|
new CfnOutput(this, 'customResourceData', {
|
|
43
54
|
value: Fn.sub('Object Keys are${keys}', {
|
|
44
|
-
keys: Fn.join(',',
|
|
55
|
+
keys: Fn.join(',', deployment.objectKeys),
|
|
45
56
|
}),
|
|
46
57
|
});
|
|
47
58
|
}
|
|
@@ -54,12 +65,12 @@ const app = new cdk.App({
|
|
|
54
65
|
});
|
|
55
66
|
const testCase = new TestBucketDeployment(app, 'test-bucket-deployments-too-many-sources');
|
|
56
67
|
|
|
57
|
-
const integTest = new integ.IntegTest(app, 'integ-test-bucket-
|
|
68
|
+
const integTest = new integ.IntegTest(app, 'integ-test-bucket-deployment-big-response', {
|
|
58
69
|
testCases: [testCase],
|
|
59
70
|
diffAssets: true,
|
|
60
71
|
});
|
|
61
72
|
|
|
62
|
-
// Assert that
|
|
73
|
+
// Assert that all files were successfully deployed
|
|
63
74
|
for (let i = 0; i < numFiles; i++) {
|
|
64
75
|
const apiCall = integTest.assertions.awsApiCall('S3', 'getObject', {
|
|
65
76
|
Bucket: testCase.destinationBucket.bucketName,
|
|
@@ -73,7 +84,7 @@ for (let i = 0; i < numFiles; i++) {
|
|
|
73
84
|
apiCall.assertAtPath('Body', ExpectedResult.stringLikeRegexp(`This is file number ${i + 1}`));
|
|
74
85
|
}
|
|
75
86
|
|
|
76
|
-
// Assert that
|
|
87
|
+
// Assert that objectKeys output is empty when outputObjectKeys is false
|
|
77
88
|
const describe = integTest.assertions.awsApiCall('CloudFormation', 'describeStacks', {
|
|
78
89
|
StackName: 'test-bucket-deployments-too-many-sources',
|
|
79
90
|
});
|
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
3
|
+
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
|
|
3
4
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
4
5
|
import * as cdk from 'aws-cdk-lib';
|
|
5
6
|
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
|
|
6
|
-
import
|
|
7
|
+
import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
8
|
+
import { Construct } from 'constructs';
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Integration test for bucket deployment with CloudFront distribution invalidation:
|
|
12
|
+
* - Deploys files to S3 bucket behind CloudFront distribution
|
|
13
|
+
* - Tests that CloudFront cache invalidation works with bucket deployments
|
|
14
|
+
*/
|
|
15
|
+
class TestBucketDeploymentCloudFront extends cdk.Stack {
|
|
16
|
+
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
|
17
|
+
super(scope, id, props);
|
|
11
18
|
|
|
12
|
-
const bucket = new s3.Bucket(this, '
|
|
19
|
+
const bucket = new s3.Bucket(this, 'Destination', {
|
|
13
20
|
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
14
21
|
autoDeleteObjects: true, // needed for integration test cleanup
|
|
15
22
|
});
|
|
16
|
-
const distribution = new cloudfront.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
s3BucketSource: bucket,
|
|
21
|
-
},
|
|
22
|
-
behaviors: [{ isDefaultBehavior: true }],
|
|
23
|
-
},
|
|
24
|
-
],
|
|
23
|
+
const distribution = new cloudfront.Distribution(this, 'Distribution', {
|
|
24
|
+
defaultBehavior: {
|
|
25
|
+
origin: origins.S3BucketOrigin.withOriginAccessControl(bucket),
|
|
26
|
+
},
|
|
25
27
|
});
|
|
26
28
|
|
|
27
29
|
new s3deploy.BucketDeployment(this, 'DeployWithInvalidation', {
|
|
@@ -29,7 +31,7 @@ class TestBucketDeployment extends cdk.Stack {
|
|
|
29
31
|
destinationBucket: bucket,
|
|
30
32
|
distribution,
|
|
31
33
|
distributionPaths: ['/images/*.png'],
|
|
32
|
-
retainOnDelete: false,
|
|
34
|
+
retainOnDelete: false,
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -41,10 +43,10 @@ const app = new cdk.App({
|
|
|
41
43
|
},
|
|
42
44
|
});
|
|
43
45
|
|
|
44
|
-
const
|
|
46
|
+
const testCase = new TestBucketDeploymentCloudFront(app, 'test-bucket-deployment-cloudfront');
|
|
45
47
|
|
|
46
|
-
new IntegTest(app, '
|
|
47
|
-
testCases: [
|
|
48
|
+
new integ.IntegTest(app, 'integ-test-bucket-deployment-cloudfront', {
|
|
49
|
+
testCases: [testCase],
|
|
48
50
|
diffAssets: true,
|
|
49
51
|
});
|
|
50
52
|
|
|
@@ -6,6 +6,12 @@ import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
|
6
6
|
import { ExpectedResult } from '@aws-cdk/integ-tests-alpha';
|
|
7
7
|
import { Construct } from 'constructs';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Integration test for bucket deployment with cross-nested-stack references:
|
|
11
|
+
* - Tests that Source.jsonData() can use values from resources in nested stacks
|
|
12
|
+
* - Validates that cross-nested-stack token resolution works correctly
|
|
13
|
+
* - Tests token substitution across nested stack boundaries
|
|
14
|
+
*/
|
|
9
15
|
class ResourceNestedStack extends NestedStack {
|
|
10
16
|
userPool: UserPool;
|
|
11
17
|
constructor (scope: Construct, id: string, props: NestedStackProps = {}) {
|
|
@@ -23,7 +29,7 @@ class DeploymentNestedStack extends NestedStack {
|
|
|
23
29
|
constructor (scope: Construct, id: string, props: DeploymentNestedStackProps) {
|
|
24
30
|
super(scope, id, props);
|
|
25
31
|
this.bucket = new Bucket(this, 'Bucket');
|
|
26
|
-
new BucketDeployment(this, '
|
|
32
|
+
new BucketDeployment(this, 'DeployWithCrossNestedStackSource', {
|
|
27
33
|
destinationBucket: this.bucket,
|
|
28
34
|
sources: [
|
|
29
35
|
Source.jsonData('appconfig.json', { userPoolId: props.userPool.userPoolId }),
|
|
@@ -6,6 +6,11 @@ import { Construct } from 'constructs';
|
|
|
6
6
|
import { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';
|
|
7
7
|
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Integration test for bucket deployment with cross-stack references:
|
|
11
|
+
* - Tests that Source.data() can use values from resources in other stacks
|
|
12
|
+
* - Validates that cross-stack token resolution works correctly
|
|
13
|
+
*/
|
|
9
14
|
class Stack2 extends Stack {
|
|
10
15
|
userPool: UserPool;
|
|
11
16
|
|
|
@@ -21,7 +26,7 @@ class Stack1 extends Stack {
|
|
|
21
26
|
constructor (scope: Construct, id: string, props: { userPool: UserPool }) {
|
|
22
27
|
super(scope, id);
|
|
23
28
|
this.bucket = new Bucket(this, 'bucket');
|
|
24
|
-
new BucketDeployment(this, '
|
|
29
|
+
new BucketDeployment(this, 'DeployWithCrossStackSource', {
|
|
25
30
|
destinationBucket: this.bucket,
|
|
26
31
|
sources: [
|
|
27
32
|
Source.data('test.txt', props.userPool.userPoolId),
|
|
@@ -5,6 +5,12 @@ import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
|
|
|
5
5
|
import * as ssm from 'aws-cdk-lib/aws-ssm';
|
|
6
6
|
import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Integration test for bucket deployment with cross-stack SSM parameter references:
|
|
10
|
+
* - Tests that SSM StringListParameter tokens are resolved in Source.jsonData()
|
|
11
|
+
* - Validates cross-nested-stack parameter references work correctly
|
|
12
|
+
* - Tests that parameter values are properly serialized in JSON output
|
|
13
|
+
*/
|
|
8
14
|
class SsmStack extends cdk.NestedStack {
|
|
9
15
|
public readonly ssmParam: ssm.StringListParameter;
|
|
10
16
|
|
|
@@ -38,7 +44,7 @@ class S3Stack extends cdk.NestedStack {
|
|
|
38
44
|
autoDeleteObjects: true,
|
|
39
45
|
});
|
|
40
46
|
|
|
41
|
-
new s3deploy.BucketDeployment(this, '
|
|
47
|
+
new s3deploy.BucketDeployment(this, 'DeployWithSsmParameter', {
|
|
42
48
|
sources: [
|
|
43
49
|
s3deploy.Source.jsonData('config.json', {
|
|
44
50
|
subnets: readParam.stringListValue,
|