UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 3.32 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ExportWriter=void 0;const constructs_1=require("constructs"),export_reader_provider_1=require("./export-reader-provider"),types_1=require("./types"),cfn_dynamic_reference_1=require("../../cfn-dynamic-reference"),custom_resource_1=require("../../custom-resource"),cross_region_ssm_writer_provider_generated_1=require("../../dist/core/cross-region-ssm-writer-provider.generated"),helpers_internal_1=require("../../helpers-internal"),uniqueid_1=require("../../private/uniqueid"),stack_1=require("../../stack"),token_1=require("../../token");class CRProvider extends cross_region_ssm_writer_provider_generated_1.CrossRegionSsmWriterProvider{static getOrCreateProvider(scope,uniqueid,props){const id=`${uniqueid}CustomResourceProvider`,stack=stack_1.Stack.of(scope);return stack.node.tryFindChild(id)??new CRProvider(stack,id,props)}resourceArns=helpers_internal_1.Box.fromSet();constructor(scope,id,props){super(scope,id,props),this.addToRolePolicy({Effect:"Allow",Resource:this.resourceArns.derive(Array.from),Action:["ssm:DeleteParameters","ssm:ListTagsForResource","ssm:GetParameters","ssm:PutParameter"]})}addResourceArn(arn){this.resourceArns.add(arn)}}class ExportWriter extends constructs_1.Construct{static getOrCreate(scope,uniqueId,props){const stack=stack_1.Stack.of(scope),existing=stack.node.tryFindChild(uniqueId);return existing||new ExportWriter(stack,uniqueId,{region:props.region})}_references=helpers_internal_1.Box.fromMap();provider;constructor(scope,id,props){super(scope,id);const stack=stack_1.Stack.of(this),region=props.region??stack.region,resourceType="Custom::CrossRegionExportWriter";this.provider=CRProvider.getOrCreateProvider(this,resourceType),this.addRegionToPolicy(region);const properties={region,exports:this._references.derive(m=>Object.fromEntries(m))};new custom_resource_1.CustomResource(this,"Resource",{resourceType,serviceToken:this.provider.serviceToken,properties:{WriterProps:properties}})}exportValue(exportName,reference,importStack){const parameterName=this.registerExport(exportName,reference,importStack),ref=new cfn_dynamic_reference_1.CfnDynamicReference(cfn_dynamic_reference_1.CfnDynamicReferenceService.SSM,parameterName);return this.addToExportReader(parameterName,ref,importStack)}exportValueWriteOnly(exportName,reference,importStack){this.registerExport(exportName,reference,importStack)}registerExport(exportName,reference,importStack){const stack=stack_1.Stack.of(this),parameterName=`/${types_1.SSM_EXPORT_PATH_PREFIX}${exportName}`;return this._references.put(parameterName,stack.resolve(reference.toString())),this.addRegionToPolicy(importStack.region),parameterName}addRegionToPolicy(region){token_1.Token.isUnresolved(region)||this.provider.addResourceArn(stack_1.Stack.of(this).formatArn({service:"ssm",resource:"parameter",region,resourceName:`${types_1.SSM_EXPORT_PATH_PREFIX}*`}))}addToExportReader(exportName,exportValueRef,importStack){const readerConstructName=(0,uniqueid_1.makeUniqueId)(["ExportsReader"]),exportReader=export_reader_provider_1.ExportReader.getOrCreate(importStack.nestedStackParent??importStack,readerConstructName);return this.addRegionToPolicy(importStack.region),exportReader.importValue(exportName,exportValueRef)}}exports.ExportWriter=ExportWriter;