From 7928ff932455ce3dd810b254c65b28d6e3044fa9 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Mon, 11 Sep 2023 11:29:55 +0100 Subject: [PATCH] chore(globalaccelerator): add integ test for Global Accelerator using Endpoints This also tests the usage of AwsCustomResource to describe security groups. Manually tested the unhappy path: If not SG can be found, the stack deployment fails as expected. --- ...efaultTestDeployAssert3F2DB71B.assets.json | 19 + ...aultTestDeployAssert3F2DB71B.template.json | 36 + .../index.js | 1 + .../__entrypoint__.js | 147 ++ .../index.js | 81 ++ .../cdk.out | 1 + .../global-accelerator-endpoints2.assets.json | 45 + ...lobal-accelerator-endpoints2.template.json | 753 +++++++++++ .../integ.json | 12 + .../manifest.json | 315 +++++ .../tree.json | 1180 +++++++++++++++++ .../test/integ.globalaccelerator-endpoints.ts | 37 + 12 files changed, 2627 insertions(+) create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/__entrypoint__.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/cdk.out create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/integ.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/manifest.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/tree.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.ts diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets.json new file mode 100644 index 0000000000000..479dd23d150a1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets.json @@ -0,0 +1,19 @@ +{ + "version": "34.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff/index.js new file mode 100644 index 0000000000000..e24d6abb5e19b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff/index.js @@ -0,0 +1 @@ +"use strict";var ue=Object.create;var k=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var d=(e,t)=>()=>(e&&(t=e(e=0)),t);var ye=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),S=(e,t)=>{for(var a in t)k(e,a,{get:t[a],enumerable:!0})},W=(e,t,a,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of de(t))!ge.call(e,i)&&i!==a&&k(e,i,{get:()=>t[i],enumerable:!(r=pe(t,i))||r.enumerable});return e};var M=(e,t,a)=>(a=e!=null?ue(me(e)):{},W(t||!e||!e.__esModule?k(a,"default",{value:e,enumerable:!0}):a,e)),f=e=>W(k({},"__esModule",{value:!0}),e);function fe(e){return Buffer.isBuffer(e)?e.toString("utf8"):ArrayBuffer.isView(e)?Se.decode(e.buffer):e}function B(e){function t(a,r=[]){return[].concat(...Object.keys(a).map(i=>{let o=fe(a[i]);return typeof o=="object"&&o!==null?t(o,r.concat([i])):{[r.concat([i]).join(".")]:o}}))}return Object.assign({},...t(e))}function V(e,t){return JSON.parse(JSON.stringify(e),(a,r)=>{switch(r){case P:return t;default:return r}})}function I(e,t){return Object.entries(e).reduce((a,[r,i])=>t(r)?{...a,[r]:i}:a,{})}function b(e,t,a,r,i){let o=JSON.stringify({Status:t,Reason:a,PhysicalResourceId:r,StackId:e.StackId,RequestId:e.RequestId,LogicalResourceId:e.LogicalResourceId,NoEcho:!1,Data:i});console.log("Responding",o);let n=require("url").parse(e.ResponseURL),s={hostname:n.hostname,path:n.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(o,"utf8")}};return new Promise((u,p)=>{try{let c=require("https").request(s,u);c.on("error",p),c.write(o),c.end()}catch(c){p(c)}})}function y(e){if(e)return JSON.parse(e)}function E(e){return function(t){for(let a of e)if(t.startsWith(a))return!0;return!1}}var P,Se,D=d(()=>{"use strict";P="PHYSICAL:RESOURCEID:",Se=new TextDecoder});var _={};S(_,{forceSdkInstallation:()=>be,handler:()=>Re});function be(){v=!1}function Ce(){console.log("Installing latest AWS SDK v2"),(0,q.execSync)("HOME=/tmp npm install aws-sdk@2 --production --no-package-lock --no-save --prefix /tmp"),v=!0}function he(e){let t=e.apiLoader;return Ae.forEach(({serviceName:a,apiVersions:r})=>{let i=a.toLowerCase();e.Service.hasService(i)?e.Service.addVersions(e[a],r):(t.services[i]={},e[a]=e.Service.defineService(i,r)),r.forEach(o=>{Object.defineProperty(t.services[i],o,{get:function(){let s=`aws-sdk-patch/${i}-${o}`,u=JSON.parse(w.readFileSync((0,L.join)(__dirname,`${s}.service.json`),"utf-8"));return u.paginators=JSON.parse(w.readFileSync((0,L.join)(__dirname,`${s}.paginators.json`),"utf-8")).pagination,u},enumerable:!0,configurable:!0})})}),e}async function Re(e,t){try{let a;if(!v&&e.ResourceProperties.InstallLatestAwsSdk==="true")try{Ce(),a=require("/tmp/node_modules/aws-sdk")}catch(s){console.log(`Failed to install latest AWS SDK v2: ${s}`),a=require("aws-sdk")}else v?a=require("/tmp/node_modules/aws-sdk"):a=require("aws-sdk");try{a=he(a)}catch(s){console.log(`Failed to patch AWS SDK: ${s}. Proceeding with the installed copy.`)}console.log(JSON.stringify({...e,ResponseURL:"..."})),console.log("AWS SDK VERSION: "+a.VERSION),e.ResourceProperties.Create=y(e.ResourceProperties.Create),e.ResourceProperties.Update=y(e.ResourceProperties.Update),e.ResourceProperties.Delete=y(e.ResourceProperties.Delete);let r;switch(e.RequestType){case"Create":r=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":r=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let i={},o={},n=e.ResourceProperties[e.RequestType];if(n){let s;if(n.assumedRoleArn){let p=new Date().getTime(),c={RoleArn:n.assumedRoleArn,RoleSessionName:`${p}-${r}`.substring(0,64)};s=new a.ChainableTemporaryCredentials({params:c,stsConfig:{stsRegionalEndpoints:"regional"}})}if(!Object.prototype.hasOwnProperty.call(a,n.service))throw Error(`Service ${n.service} does not exist in AWS SDK version ${a.VERSION}.`);let u=new a[n.service]({apiVersion:n.apiVersion,credentials:s,region:n.region});try{let p=await u[n.action](n.parameters&&V(n.parameters,r)).promise();i={apiVersion:u.config.apiVersion,region:u.config.region,...B(p)};let c;n.outputPath?c=[n.outputPath]:n.outputPaths&&(c=n.outputPaths),c?o=I(i,E(c)):o=i}catch(p){if(!n.ignoreErrorCodesMatching||!new RegExp(n.ignoreErrorCodesMatching).test(p.code))throw p}n.physicalResourceId?.responsePath&&(r=i[n.physicalResourceId.responsePath])}await b(e,"SUCCESS","OK",r,o)}catch(a){console.log(a),await b(e,"FAILED",a.message||"Internal Error",t.logStreamName,{})}}var q,w,L,v,Ae,N=d(()=>{"use strict";q=require("child_process"),w=M(require("fs")),L=require("path");D();v=!1;Ae=[]});var j,G=d(()=>{"use strict";j={acm:{exportcertificate:["Passphrase"],importcertificate:["Certificate","CertificateChain","PrivateKey"]},"acm-pca":{importcertificateauthoritycertificate:["Certificate","CertificateChain"],issuecertificate:["Csr"]},apigateway:{importapikeys:["body"],importdocumentationparts:["body"],importrestapi:["body"],putrestapi:["body"],posttoconnection:["Data"]},appconfig:{createhostedconfigurationversion:["Content"]},appsync:{startschemacreation:["definition"]},awsmobilehubservice:{createproject:["contents"],updateproject:["contents"]},"backup-storage":{notifyobjectcomplete:["MetadataBlob"],putchunk:["Data"],putobject:["InlineChunk"]},clouddirectory:{addfacettoobject:["ObjectAttributeList.*.Value.BinaryValue"],attachtypedlink:["Attributes.*.Value.BinaryValue"],batchread:["Operations.*.GetLinkAttributes.TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue","Operations.*.ListIncomingTypedLinks.FilterAttributeRanges.*.Range.EndValue.BinaryValue","Operations.*.ListIncomingTypedLinks.FilterAttributeRanges.*.Range.StartValue.BinaryValue","Operations.*.ListIndex.RangesOnIndexedValues.*.Range.EndValue.BinaryValue","Operations.*.ListIndex.RangesOnIndexedValues.*.Range.StartValue.BinaryValue","Operations.*.ListOutgoingTypedLinks.FilterAttributeRanges.*.Range.EndValue.BinaryValue","Operations.*.ListOutgoingTypedLinks.FilterAttributeRanges.*.Range.StartValue.BinaryValue"],batchwrite:["Operations.*.AddFacetToObject.ObjectAttributeList.*.Value.BinaryValue","Operations.*.AttachTypedLink.Attributes.*.Value.BinaryValue","Operations.*.CreateObject.ObjectAttributeList.*.Value.BinaryValue","Operations.*.DetachTypedLink.TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue","Operations.*.UpdateLinkAttributes.AttributeUpdates.*.AttributeAction.AttributeUpdateValue.BinaryValue","Operations.*.UpdateLinkAttributes.TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue","Operations.*.UpdateObjectAttributes.AttributeUpdates.*.ObjectAttributeAction.ObjectAttributeUpdateValue.BinaryValue"],createfacet:["Attributes.*.AttributeDefinition.DefaultValue.BinaryValue"],createobject:["ObjectAttributeList.*.Value.BinaryValue"],createtypedlinkfacet:["Facet.Attributes.*.DefaultValue.BinaryValue"],detachtypedlink:["TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue"],getlinkattributes:["TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue"],listincomingtypedlinks:["FilterAttributeRanges.*.Range.EndValue.BinaryValue","FilterAttributeRanges.*.Range.StartValue.BinaryValue"],listindex:["RangesOnIndexedValues.*.Range.EndValue.BinaryValue","RangesOnIndexedValues.*.Range.StartValue.BinaryValue"],listoutgoingtypedlinks:["FilterAttributeRanges.*.Range.EndValue.BinaryValue","FilterAttributeRanges.*.Range.StartValue.BinaryValue"],updatefacet:["AttributeUpdates.*.Attribute.AttributeDefinition.DefaultValue.BinaryValue"],updatelinkattributes:["AttributeUpdates.*.AttributeAction.AttributeUpdateValue.BinaryValue","TypedLinkSpecifier.IdentityAttributeValues.*.Value.BinaryValue"],updateobjectattributes:["AttributeUpdates.*.ObjectAttributeAction.ObjectAttributeUpdateValue.BinaryValue"],updatetypedlinkfacet:["AttributeUpdates.*.Attribute.DefaultValue.BinaryValue"]},cloudfront:{createfunction:["FunctionCode"],testfunction:["EventObject"],updatefunction:["FunctionCode"]},cloudsearch:{uploaddocuments:["documents"]},codeartifact:{publishpackageversion:["assetContent"]},codecommit:{createcommit:["putFiles.*.fileContent"],createunreferencedmergecommit:["conflictResolution.replaceContents.*.content"],mergebranchesbysquash:["conflictResolution.replaceContents.*.content"],mergebranchesbythreeway:["conflictResolution.replaceContents.*.content"],mergepullrequestbysquash:["conflictResolution.replaceContents.*.content"],mergepullrequestbythreeway:["conflictResolution.replaceContents.*.content"],putfile:["fileContent"]},"cognito-idp":{setuicustomization:["ImageFile"]},comprehend:{classifydocument:["Bytes"],detectentities:["Bytes"]},datasync:{createlocationhdfs:["KerberosKeytab","KerberosKrb5Conf"],createlocationobjectstorage:["ServerCertificate"],updatelocationhdfs:["KerberosKeytab","KerberosKrb5Conf"],updatelocationobjectstorage:["ServerCertificate"]},dms:{importcertificate:["CertificateWallet"]},dynamodb:{batchexecutestatement:["Statements.*.Parameters.*.B","Statements.*.Parameters.*.BS.*"],batchgetitem:["RequestItems.*.Keys.*.*.B","RequestItems.*.Keys.*.*.BS.*"],batchwriteitem:["RequestItems.*.*.DeleteRequest.Key.*.B","RequestItems.*.*.DeleteRequest.Key.*.BS.*","RequestItems.*.*.PutRequest.Item.*.B","RequestItems.*.*.PutRequest.Item.*.BS.*"],deleteitem:["Expected.*.AttributeValueList.*.B","Expected.*.AttributeValueList.*.BS.*","Expected.*.Value.B","Expected.*.Value.BS.*","ExpressionAttributeValues.*.B","ExpressionAttributeValues.*.BS.*","Key.*.B","Key.*.BS.*"],executestatement:["Parameters.*.B","Parameters.*.BS.*"],executetransaction:["TransactStatements.*.Parameters.*.B","TransactStatements.*.Parameters.*.BS.*"],getitem:["Key.*.B","Key.*.BS.*"],putitem:["Expected.*.AttributeValueList.*.B","Expected.*.AttributeValueList.*.BS.*","Expected.*.Value.B","Expected.*.Value.BS.*","ExpressionAttributeValues.*.B","ExpressionAttributeValues.*.BS.*","Item.*.B","Item.*.BS.*"],query:["ExclusiveStartKey.*.B","ExclusiveStartKey.*.BS.*","ExpressionAttributeValues.*.B","ExpressionAttributeValues.*.BS.*","KeyConditions.*.AttributeValueList.*.B","KeyConditions.*.AttributeValueList.*.BS.*","QueryFilter.*.AttributeValueList.*.B","QueryFilter.*.AttributeValueList.*.BS.*"],scan:["ExclusiveStartKey.*.B","ExclusiveStartKey.*.BS.*","ExpressionAttributeValues.*.B","ExpressionAttributeValues.*.BS.*","ScanFilter.*.AttributeValueList.*.B","ScanFilter.*.AttributeValueList.*.BS.*"],transactgetitems:["TransactItems.*.Get.Key.*.B","TransactItems.*.Get.Key.*.BS.*"],transactwriteitems:["TransactItems.*.ConditionCheck.ExpressionAttributeValues.*.B","TransactItems.*.ConditionCheck.ExpressionAttributeValues.*.BS.*","TransactItems.*.ConditionCheck.Key.*.B","TransactItems.*.ConditionCheck.Key.*.BS.*","TransactItems.*.Delete.ExpressionAttributeValues.*.B","TransactItems.*.Delete.ExpressionAttributeValues.*.BS.*","TransactItems.*.Delete.Key.*.B","TransactItems.*.Delete.Key.*.BS.*","TransactItems.*.Put.ExpressionAttributeValues.*.B","TransactItems.*.Put.ExpressionAttributeValues.*.BS.*","TransactItems.*.Put.Item.*.B","TransactItems.*.Put.Item.*.BS.*","TransactItems.*.Update.ExpressionAttributeValues.*.B","TransactItems.*.Update.ExpressionAttributeValues.*.BS.*","TransactItems.*.Update.Key.*.B","TransactItems.*.Update.Key.*.BS.*"],updateitem:["AttributeUpdates.*.Value.B","AttributeUpdates.*.Value.BS.*","Expected.*.AttributeValueList.*.B","Expected.*.AttributeValueList.*.BS.*","Expected.*.Value.B","Expected.*.Value.BS.*","ExpressionAttributeValues.*.B","ExpressionAttributeValues.*.BS.*","Key.*.B","Key.*.BS.*"]},ebs:{putsnapshotblock:["BlockData"]},ec2:{bundleinstance:["Storage.S3.UploadPolicy"],importkeypair:["PublicKeyMaterial"],modifyinstanceattribute:["UserData.Value"]},ecr:{uploadlayerpart:["layerPartBlob"]},"ecr-public":{createrepository:["catalogData.logoImageBlob"],putrepositorycatalogdata:["catalogData.logoImageBlob"],uploadlayerpart:["layerPartBlob"]},firehose:{putrecord:["Record.Data"],putrecordbatch:["Records.*.Data"]},frauddetector:{geteventprediction:["externalModelEndpointDataBlobs.*.byteBuffer"]},gamelift:{createscript:["ZipFile"],updatescript:["ZipFile"]},gamesparks:{importgameconfiguration:["ImportSource.File"]},glacier:{uploadarchive:["body"],uploadmultipartpart:["body"]},glue:{updatecolumnstatisticsforpartition:["ColumnStatisticsList.*.StatisticsData.DecimalColumnStatisticsData.MaximumValue.UnscaledValue","ColumnStatisticsList.*.StatisticsData.DecimalColumnStatisticsData.MinimumValue.UnscaledValue"],updatecolumnstatisticsfortable:["ColumnStatisticsList.*.StatisticsData.DecimalColumnStatisticsData.MaximumValue.UnscaledValue","ColumnStatisticsList.*.StatisticsData.DecimalColumnStatisticsData.MinimumValue.UnscaledValue"]},greengrass:{createcomponentversion:["inlineRecipe"]},iot:{createotaupdate:["files.*.codeSigning.customCodeSigning.signature.inlineDocument"],testinvokeauthorizer:["mqttContext.password"]},iotanalytics:{batchputmessage:["messages.*.payload"],runpipelineactivity:["payloads.*"]},iotdata:{publish:["payload"],updatethingshadow:["payload"]},ioteventsdata:{batchputmessage:["messages.*.payload"]},iotsitewise:{createportal:["portalLogoImageFile.data"],updateportal:["portalLogoImage.file.data"]},iotwireless:{updateresourceposition:["GeoJsonPayload"]},kafka:{createconfiguration:["ServerProperties"],updateconfiguration:["ServerProperties"]},kendra:{batchputdocument:["Documents.*.Blob"]},kinesis:{putrecord:["Data"],putrecords:["Records.*.Data"]},kinesisanalytics:{createapplication:["ApplicationConfiguration.ApplicationCodeConfiguration.CodeContent.ZipFileContent"],updateapplication:["ApplicationConfigurationUpdate.ApplicationCodeConfigurationUpdate.CodeContentUpdate.ZipFileContentUpdate"]},kms:{decrypt:["CiphertextBlob","Recipient.AttestationDocument"],encrypt:["Plaintext"],generatedatakey:["Recipient.AttestationDocument"],generatedatakeypair:["Recipient.AttestationDocument"],generatemac:["Message"],generaterandom:["Recipient.AttestationDocument"],importkeymaterial:["EncryptedKeyMaterial","ImportToken"],reencrypt:["CiphertextBlob"],sign:["Message"],verify:["Message","Signature"],verifymac:["Mac","Message"]},lambda:{createfunction:["Code.ZipFile"],invoke:["Payload"],invokeasync:["InvokeArgs"],invokewithresponsestream:["Payload"],publishlayerversion:["Content.ZipFile"],updatefunctioncode:["ZipFile"]},lex:{startimport:["payload"],postcontent:["inputStream"],recognizeutterance:["inputStream"],startconversation:["requestEventStream.AudioInputEvent.audioChunk"]},lookoutvision:{detectanomalies:["Body"],updatedatasetentries:["Changes"]},mediastore:{putobject:["Body"]},"medical-imaging":{updateimagesetmetadata:["updateImageSetMetadataUpdates.DICOMUpdates.removableAttributes","updateImageSetMetadataUpdates.DICOMUpdates.updatableAttributes"]},mobiletargeting:{sendmessages:["MessageRequest.MessageConfiguration.EmailMessage.RawEmail.Data"],sendusersmessages:["SendUsersMessageRequest.MessageConfiguration.EmailMessage.RawEmail.Data"]},qldb:{sendcommand:["CommitTransaction.CommitDigest","ExecuteStatement.Parameters.*.IonBinary"]},quicksight:{startassetbundleimportjob:["AssetBundleImportSource.Body"]},"rds-data":{batchexecutestatement:["parameterSets.*.*.value.blobValue"],executestatement:["parameters.*.value.blobValue"]},rekognition:{comparefaces:["SourceImage.Bytes","TargetImage.Bytes"],detectcustomlabels:["Image.Bytes"],detectfaces:["Image.Bytes"],detectlabels:["Image.Bytes"],detectmoderationlabels:["Image.Bytes"],detectprotectiveequipment:["Image.Bytes"],detecttext:["Image.Bytes"],indexfaces:["Image.Bytes"],recognizecelebrities:["Image.Bytes"],searchfacesbyimage:["Image.Bytes"],searchusersbyimage:["Image.Bytes"],updatedatasetentries:["Changes.GroundTruth"],startfacelivenesssession:["LivenessRequestStream.VideoEvent.VideoChunk"]},s3:{putobject:["Body"],uploadpart:["Body"],writegetobjectresponse:["Body"]},sagemaker:{invokeendpoint:["Body"],invokeendpointwithresponsestream:["Body"]},secretsmanager:{createsecret:["SecretBinary"],putsecretvalue:["SecretBinary"],updatesecret:["SecretBinary"]},ses:{createdeliverabilitytestreport:["Content.Raw.Data","Content.Raw.Data"],sendemail:["Content.Raw.Data","Content.Raw.Data"],sendrawemail:["RawMessage.Data"]},signer:{signpayload:["payload"]},sns:{publish:["MessageAttributes.*.BinaryValue"],publishbatch:["PublishBatchRequestEntries.*.MessageAttributes.*.BinaryValue"]},sqs:{sendmessage:["MessageAttributes.*.BinaryListValues.*","MessageAttributes.*.BinaryValue","MessageSystemAttributes.*.BinaryListValues.*","MessageSystemAttributes.*.BinaryValue"],sendmessagebatch:["Entries.*.MessageAttributes.*.BinaryListValues.*","Entries.*.MessageAttributes.*.BinaryValue","Entries.*.MessageSystemAttributes.*.BinaryListValues.*","Entries.*.MessageSystemAttributes.*.BinaryValue"]},ssm:{registertaskwithmaintenancewindow:["TaskInvocationParameters.Lambda.Payload"],updatemaintenancewindowtask:["TaskInvocationParameters.Lambda.Payload"]},support:{addattachmentstoset:["attachments.*.data"]},synthetics:{createcanary:["Code.ZipFile"],updatecanary:["Code.ZipFile"]},textract:{analyzedocument:["Document.Bytes"],analyzeexpense:["Document.Bytes"],analyzeid:["DocumentPages.*.Bytes"],detectdocumenttext:["Document.Bytes"]},transcribe:{startcallanalyticsstreamtranscription:["AudioStream.AudioEvent.AudioChunk"],startmedicalstreamtranscription:["AudioStream.AudioEvent.AudioChunk"],startstreamtranscription:["AudioStream.AudioEvent.AudioChunk"]},translate:{importterminology:["TerminologyData.File"],translatedocument:["Document.Content"]},waf:{updatebytematchset:["Updates.*.ByteMatchTuple.TargetString"]},"waf-regional":{updatebytematchset:["Updates.*.ByteMatchTuple.TargetString"]},wafv2:{checkcapacity:["Rules.*.Statement.ByteMatchStatement.SearchString"],createrulegroup:["Rules.*.Statement.ByteMatchStatement.SearchString"],createwebacl:["Rules.*.Statement.ByteMatchStatement.SearchString"],updaterulegroup:["Rules.*.Statement.ByteMatchStatement.SearchString"],updatewebacl:["Rules.*.Statement.ByteMatchStatement.SearchString"]},workspaces:{importclientbranding:["DeviceTypeAndroid.Logo","DeviceTypeIos.Logo","DeviceTypeIos.Logo2x","DeviceTypeIos.Logo3x","DeviceTypeLinux.Logo","DeviceTypeOsx.Logo","DeviceTypeWeb.Logo","DeviceTypeWindows.Logo"]}}});var $={};S($,{coerceApiParametersToUint8Array:()=>ke,coerceToUint8Array:()=>A});function ke(e,t,a={}){let r=j?.[e.toLowerCase()]?.[t.toLowerCase()]??[];for(let i of r)A(a,i.split("."));return a}function A(e,t){return t.length===0?Be(e):t[0]==="*"?Array.isArray(e)?e.map(a=>A(a,t.slice(1))):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([a,r])=>[a,A(r,t.slice(1))])):e:(e&&typeof e=="object"&&t[0]in e&&(e[t[0]]=A(e[t[0]],t.slice(1))),e)}function Be(e){return e instanceof Uint8Array?e:typeof e=="string"||typeof e=="number"?new TextEncoder().encode(e.toString()):e}var H=d(()=>{"use strict";G()});var z={};S(z,{findV3ClientConstructor:()=>T});function T(e){let[t,a]=Object.entries(e).find(([r])=>r.endsWith("Client")&&r!=="__Client");return a}var x=d(()=>{"use strict"});var Q,Z=d(()=>{"use strict";Q=["ACM","ACMPCA","APIGateway","ARCZonalShift","AccessAnalyzer","Account","AlexaForBusiness","Amp","Amplify","AmplifyBackend","AmplifyUIBuilder","ApiGatewayManagementApi","ApiGatewayV2","AppConfig","AppConfigData","AppIntegrations","AppMesh","AppRunner","AppStream","AppSync","Appflow","ApplicationAutoScaling","ApplicationCostProfiler","ApplicationInsights","Athena","AuditManager","AugmentedAIRuntime","AutoScaling","AutoScalingPlans","Backup","BackupGateway","BackupStorage","Batch","Billingconductor","Braket","Budgets","CUR","Chime","ChimeSDKIdentity","ChimeSDKMediaPipelines","ChimeSDKMeetings","ChimeSDKMessaging","ChimeSDKVoice","Cloud9","CloudControl","CloudDirectory","CloudFormation","CloudFront","CloudHSM","CloudHSMV2","CloudSearch","CloudSearchDomain","CloudTrail","CloudWatch","CloudWatchEvents","CloudWatchLogs","CodeArtifact","CodeBuild","CodeCatalyst","CodeCommit","CodeDeploy","CodeGuruProfiler","CodeGuruReviewer","CodePipeline","CodeStar","CodeStarNotifications","CodeStarconnections","CognitoIdentity","CognitoIdentityServiceProvider","CognitoSync","Comprehend","ComprehendMedical","ComputeOptimizer","ConfigService","Connect","ConnectCampaigns","ConnectCases","ConnectContactLens","ConnectParticipant","ControlTower","CostExplorer","CustomerProfiles","DAX","DLM","DMS","DataBrew","DataExchange","DataPipeline","DataSync","Detective","DevOpsGuru","DeviceFarm","DirectConnect","DirectoryService","Discovery","DocDB","DocDBElastic","Drs","DynamoDB","DynamoDBStreams","EBS","EC2","EC2InstanceConnect","ECR","ECRPUBLIC","ECS","EFS","EKS","ELB","ELBv2","EMR","EMRServerless","EMRcontainers","ES","ElastiCache","ElasticBeanstalk","ElasticInference","ElasticTranscoder","EventBridge","Evidently","FMS","FSx","Finspace","Finspacedata","Firehose","Fis","ForecastQueryService","ForecastService","FraudDetector","GameLift","GameSparks","Glacier","GlobalAccelerator","Glue","Grafana","Greengrass","GreengrassV2","GroundStation","GuardDuty","Health","HealthLake","Honeycode","IAM","IVS","IdentityStore","Imagebuilder","Inspector","Inspector2","IoT1ClickDevicesService","IoT1ClickProjects","IoTAnalytics","IoTEvents","IoTEventsData","IoTFleetHub","IoTFleetWise","IoTJobsDataPlane","IoTRoboRunner","IoTSecureTunneling","IoTSiteWise","IoTThingsGraph","IoTTwinMaker","IoTWireless","Iot","IotData","IotDeviceAdvisor","Ivschat","KMS","Kafka","KafkaConnect","Kendra","Keyspaces","Kinesis","KinesisAnalytics","KinesisAnalyticsV2","KinesisVideo","KinesisVideoArchivedMedia","KinesisVideoMedia","KinesisVideoSignalingChannels","KinesisVideoWebRTCStorage","LakeFormation","Lambda","LexModelBuildingService","LexModelsV2","LexRuntime","LexRuntimeV2","LicenseManager","LicenseManagerLinuxSubscriptions","LicenseManagerUserSubscriptions","Lightsail","Location","LookoutEquipment","LookoutMetrics","LookoutVision","M2","MQ","MTurk","MWAA","MachineLearning","Macie","Macie2","ManagedBlockchain","MarketplaceCatalog","MarketplaceCommerceAnalytics","MarketplaceEntitlementService","MarketplaceMetering","MediaConnect","MediaConvert","MediaLive","MediaPackage","MediaPackageVod","MediaStore","MediaStoreData","MediaTailor","MemoryDB","Mgn","MigrationHub","MigrationHubConfig","MigrationHubOrchestrator","MigrationHubRefactorSpaces","MigrationHubStrategy","Mobile","Neptune","NetworkFirewall","NetworkManager","Nimble","OAM","Omics","OpenSearch","OpenSearchServerless","OpsWorks","OpsWorksCM","Organizations","Outposts","PI","Panorama","Personalize","PersonalizeEvents","PersonalizeRuntime","Pinpoint","PinpointEmail","PinpointSMSVoice","PinpointSMSVoiceV2","Pipes","Polly","Pricing","PrivateNetworks","Proton","QLDB","QLDBSession","QuickSight","RAM","RDS","RDSDataService","RUM","Rbin","Redshift","RedshiftData","RedshiftServerless","Rekognition","Resiliencehub","ResourceExplorer2","ResourceGroups","ResourceGroupsTaggingAPI","RoboMaker","RolesAnywhere","Route53","Route53Domains","Route53RecoveryCluster","Route53RecoveryControlConfig","Route53RecoveryReadiness","Route53Resolver","S3","S3Control","S3Outposts","SES","SESV2","SMS","SNS","SQS","SSM","SSMContacts","SSMIncidents","SSO","SSOAdmin","SSOOIDC","STS","SWF","SageMaker","SageMakerFeatureStoreRuntime","SageMakerGeospatial","SageMakerMetrics","SageMakerRuntime","SagemakerEdge","SavingsPlans","Scheduler","Schemas","SecretsManager","SecurityHub","SecurityLake","ServerlessApplicationRepository","ServiceCatalog","ServiceCatalogAppRegistry","ServiceDiscovery","ServiceQuotas","Shield","Signer","SimSpaceWeaver","SnowDeviceManagement","Snowball","SsmSap","StepFunctions","StorageGateway","Support","SupportApp","Synthetics","Textract","TimestreamQuery","TimestreamWrite","TranscribeService","Transfer","Translate","VoiceID","WAF","WAFRegional","WAFV2","WellArchitected","Wisdom","WorkDocs","WorkLink","WorkMail","WorkMailMessageFlow","WorkSpaces","WorkSpacesWeb","XRay"]});var O,J=d(()=>{"use strict";Z();O={...Q.reduce((e,t)=>({...e,[t]:`client-${t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}`.replace("-chime-sdk","-chime-sdk-").replace("client-amplify-","client-amplify").replace("client-cloud-","client-cloud").replace("client-code-","client-code").replace("client-connect-","client-connect").replace("client-data-","client-data").replace("client-io-t","client-iot-").replace("client-iot-fleet-","client-iotfleet").replace("client-lookout-","client-lookout").replace("client-media-","client-media").replace("client-migration-hub-","client-migrationhub").replace("client-pinpoint-sms","client-pinpoint-sms-").replace("client-route53","client-route53-").replace("client-sage-maker","client-sagemaker").replace("client-security-","client-security").replace("client-work-","client-work")}),{}),AccessAnalyzer:"client-accessanalyzer",ACMPCA:"client-acm-pca",APIGateway:"client-api-gateway",ApiGatewayManagementApi:"client-apigatewaymanagementapi",ApiGatewayV2:"client-apigatewayv2",AppConfig:"client-appconfig",AppConfigData:"client-appconfigdata",AppIntegrations:"client-appintegrations",AppRunner:"client-apprunner",AppStream:"client-appstream",AppSync:"client-appsync",ApplicationCostProfiler:"client-applicationcostprofiler",ARCZonalShift:"client-arc-zonal-shift",AugmentedAIRuntime:"client-sage-maker-a2iruntime",AuditManager:"client-auditmanager",BackupStorage:"client-backupstorage",CUR:"client-cost-and-usage-report-service",CloudHSMV2:"client-cloudhsm-v2",CodeGuruProfiler:"client-codeguruprofiler",CodeStarconnections:"client-codestar-connections",CognitoIdentityServiceProvider:"client-cognito-identity-provider",ComprehendMedical:"client-comprehendmedical",ConnectContactLens:"client-connect-contact-lens",ControlTower:"client-controltower",DMS:"client-database-migration-service",DataPipeline:"client-data-pipeline",Discovery:"client-application-discovery-service",DevOpsGuru:"client-devops-guru",DynamoDB:"client-dynamodb",DynamoDBStreams:"client-dynamodb-streams",DocDB:"client-docdb",DocDBElastic:"client-docdb-elastic",EC2InstanceConnect:"client-ec2-instance-connect",ECRPUBLIC:"client-ecr-public",ELB:"client-elastic-load-balancing",ELBv2:"client-elastic-load-balancing-v2",ElastiCache:"client-elasticache",EMRcontainers:"client-emr-containers",EMRServerless:"client-emr-serverless",ES:"client-elasticsearch-service",EventBridge:"client-eventbridge",Finspacedata:"client-finspace-data",ForecastQueryService:"client-forecastquery",ForecastService:"client-forecast",FraudDetector:"client-frauddetector",GameLift:"client-gamelift",GameSparks:"client-gamesparks",GreengrassV2:"client-greengrassv2",GroundStation:"client-groundstation",GuardDuty:"client-guardduty",HealthLake:"client-healthlake",IdentityStore:"client-identitystore",IoTAnalytics:"client-iotanalytics",IotData:"client-iot-data-plane",IotDeviceAdvisor:"client-iotdeviceadvisor",IoTSecureTunneling:"client-iotsecuretunneling",IoTSiteWise:"client-iotsitewise",IoTThingsGraph:"client-iotthingsgraph",IoTTwinMaker:"client-iottwinmaker",IoTRoboRunner:"client-iot-roborunner",KafkaConnect:"client-kafkaconnect",KinesisVideoSignalingChannels:"client-kinesis-video-signaling",KinesisVideoWebRTCStorage:"client-kinesis-video-webrtc-storage",LakeFormation:"client-lakeformation",LexRuntime:"client-lex-runtime-service",ManagedBlockchain:"client-managedblockchain",MigrationHubConfig:"client-migrationhub-config",MigrationHubRefactorSpaces:"client-migration-hub-refactor-spaces",NetworkManager:"client-networkmanager",OpenSearch:"client-opensearch",OpenSearchServerless:"client-opensearchserverless",OpsWorks:"client-opsworks",OpsWorksCM:"client-opsworkscm",PrivateNetworks:"client-privatenetworks",QLDBSession:"client-qldb-session",QuickSight:"client-quicksight",ResourceExplorer2:"client-resource-explorer-2",RDSDataService:"client-rds-data",RoboMaker:"client-robomaker",RolesAnywhere:"client-rolesanywhere",Route53:"client-route-53",Route53Domains:"client-route-53-domains",Route53Resolver:"client-route53resolver",S3Control:"client-s3-control",SageMakerFeatureStoreRuntime:"client-sagemaker-featurestore-runtime",SavingsPlans:"client-savingsplans",SecurityHub:"client-securityhub",ServerlessApplicationRepository:"client-serverlessapplicationrepository",ServiceCatalogAppRegistry:"client-service-catalog-appregistry",ServiceDiscovery:"client-servicediscovery",SimSpaceWeaver:"client-simspaceweaver",SSMContacts:"client-ssm-contacts",SSMIncidents:"client-ssm-incidents",SSOAdmin:"client-sso-admin",SSOOIDC:"client-sso-oidc",StepFunctions:"client-sfn",TranscribeService:"client-transcribe",WAFRegional:"client-waf-regional",WellArchitected:"client-wellarchitected",WorkMailMessageFlow:"client-workmailmessageflow"}});var Y={};S(Y,{getV3ClientPackageName:()=>F});var F,U=d(()=>{"use strict";J();F=e=>{if(e in O)return`@aws-sdk/${O[e]}`;throw new Error(`Client '${e}' is either deprecated or newly added. Please consider using the v3 package format (@aws-sdk/client-xxx).`)}});var X={};S(X,{getV3Client:()=>Ie,getV3Command:()=>Ee,loadV3ClientPackage:()=>Ve});function Ve(e){let t=e.startsWith("@aws-sdk/")?e:F(e);try{let a=require(t),{version:r}=require(t+"/package.json");return{service:t.replace("@aws-sdk/client-",""),pkg:a,packageName:t,packageVersion:r}}catch{throw Error(`Service ${e} client package with name '${t}' does not exist.`)}}function Ie(e,t={}){try{let a=T(e.pkg);return new a(t)}catch{throw Error(`No client constructor found within package: ${e.packageName}`)}}function Ee(e,t){let a=t.endsWith("Command")?t:`${t}Command`,r=Object.entries(e.pkg).find(([i])=>i.toLowerCase()===a.toLowerCase())?.[1];if(!r)throw new Error(`Unable to find command named: ${a} for api: ${t} in service package`);return r}var ee=d(()=>{"use strict";x();U()});var te=ye(l=>{"use strict";var De=l&&l.__createBinding||(Object.create?function(e,t,a,r){r===void 0&&(r=a);var i=Object.getOwnPropertyDescriptor(t,a);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,i)}:function(e,t,a,r){r===void 0&&(r=a),e[r]=t[a]}),ve=l&&l.__exportStar||function(e,t){for(var a in e)a!=="default"&&!Object.prototype.hasOwnProperty.call(t,a)&&De(t,e,a)};Object.defineProperty(l,"__esModule",{value:!0});l.getV3ClientPackageName=l.findV3ClientConstructor=l.coerceApiParametersToUint8Array=void 0;var Me=(H(),f($));Object.defineProperty(l,"coerceApiParametersToUint8Array",{enumerable:!0,get:function(){return Me.coerceApiParametersToUint8Array}});var Pe=(x(),f(z));Object.defineProperty(l,"findV3ClientConstructor",{enumerable:!0,get:function(){return Pe.findV3ClientConstructor}});var we=(U(),f(Y));Object.defineProperty(l,"getV3ClientPackageName",{enumerable:!0,get:function(){return we.getV3ClientPackageName}});ve((ee(),f(X)),l)});var ie={};S(ie,{forceSdkInstallation:()=>Le,handler:()=>Oe});function Le(){h={}}function Te(e){console.log(`Installing latest AWS SDK v3: ${e}`),(0,ae.execSync)(`NPM_CONFIG_UPDATE_NOTIFIER=false HOME=/tmp npm install ${e} --omit=dev --no-package-lock --no-save --prefix /tmp`),h={...h,[e]:!0}}async function xe(e,t){let a;try{if(!h[e]&&t==="true")try{Te(e),a=require(`/tmp/node_modules/${e}`)}catch(r){return console.log(`Failed to install latest AWS SDK v3. Falling back to pre-installed version. Error: ${r}`),require(e)}else h[e]?a=require(`/tmp/node_modules/${e}`):a=require(e)}catch{throw Error(`Package ${e} does not exist.`)}return a}async function Oe(e,t){try{e.ResourceProperties.Create=y(e.ResourceProperties.Create),e.ResourceProperties.Update=y(e.ResourceProperties.Update),e.ResourceProperties.Delete=y(e.ResourceProperties.Delete);let a={},r;switch(e.RequestType){case"Create":r=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":r=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let i=e.ResourceProperties[e.RequestType];if(i){let o=i.service.startsWith("@aws-sdk/")?i.service:(0,C.getV3ClientPackageName)(i.service),n=o.split("/client-")[1],s=xe(o,e.ResourceProperties.InstallLatestAwsSdk);console.log(JSON.stringify({...e,ResponseURL:"..."}));let u;if(i.assumedRoleArn){let m=new Date().getTime(),g={RoleArn:i.assumedRoleArn,RoleSessionName:`${m}-${r}`.substring(0,64)},{fromTemporaryCredentials:le}=await import("@aws-sdk/credential-providers");u=le({params:g,clientConfig:i.region!==void 0?{region:i.region}:void 0})}s=await s;let p=(0,C.findV3ClientConstructor)(s),c=new p({apiVersion:i.apiVersion,credentials:u,region:i.region}),K=i.action.endsWith("Command")?i.action:`${i.action}Command`,se=K.replace(/Command$/,""),ce=Object.entries(s).find(([m])=>m.toLowerCase()===K.toLowerCase())?.[1],R={};try{let m=await c.send(new ce(i.parameters?(0,C.coerceApiParametersToUint8Array)(n,se,V(i.parameters,r)):{}));R={apiVersion:c.config.apiVersion,region:await c.config.region().catch(()=>{}),...B(m)};let g;i.outputPath?g=[i.outputPath]:i.outputPaths&&(g=i.outputPaths),g?a=I(R,E(g)):a=R}catch(m){let g=m.name??m.constructor.name;if(!i.ignoreErrorCodesMatching||!new RegExp(i.ignoreErrorCodesMatching).test(g))throw m}i.physicalResourceId?.responsePath&&(r=R[i.physicalResourceId.responsePath])}await b(e,"SUCCESS","OK",r,a)}catch(a){console.log(a),await b(e,"FAILED",a.message||"Internal Error",t.logStreamName,{})}}var ae,C,h,re=d(()=>{"use strict";ae=require("child_process"),C=M(te());D();h={}});var Ue={};S(Ue,{PHYSICAL_RESOURCE_ID_REFERENCE:()=>P,handler:()=>Fe,v2handler:()=>ne,v3handler:()=>oe});module.exports=f(Ue);D();function ne(e,t){return(N(),f(_)).handler(e,t)}function oe(e,t){return(re(),f(ie)).handler(e,t)}function Fe(e,t){let a=process.env.AWS_EXECUTION_ENV;return a&&a>="AWS_Lambda_nodejs18.x"?oe(e,t):ne(e,t)}0&&(module.exports={PHYSICAL_RESOURCE_ID_REFERENCE,handler,v2handler,v3handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/__entrypoint__.js b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/__entrypoint__.js new file mode 100644 index 0000000000000..c83ecebaaadac --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/__entrypoint__.js @@ -0,0 +1,147 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.withRetries = exports.handler = exports.external = void 0; +const https = require("https"); +const url = require("url"); +// for unit tests +exports.external = { + sendHttpRequest: defaultSendHttpRequest, + log: defaultLog, + includeStackTraces: true, + userHandlerIndex: './index', +}; +const CREATE_FAILED_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::CREATE_FAILED'; +const MISSING_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::MISSING_PHYSICAL_ID'; +async function handler(event, context) { + const sanitizedEvent = { ...event, ResponseURL: '...' }; + exports.external.log(JSON.stringify(sanitizedEvent, undefined, 2)); + // ignore DELETE event when the physical resource ID is the marker that + // indicates that this DELETE is a subsequent DELETE to a failed CREATE + // operation. + if (event.RequestType === 'Delete' && event.PhysicalResourceId === CREATE_FAILED_PHYSICAL_ID_MARKER) { + exports.external.log('ignoring DELETE event caused by a failed CREATE event'); + await submitResponse('SUCCESS', event); + return; + } + try { + // invoke the user handler. this is intentionally inside the try-catch to + // ensure that if there is an error it's reported as a failure to + // cloudformation (otherwise cfn waits). + // eslint-disable-next-line @typescript-eslint/no-require-imports + const userHandler = require(exports.external.userHandlerIndex).handler; + const result = await userHandler(sanitizedEvent, context); + // validate user response and create the combined event + const responseEvent = renderResponse(event, result); + // submit to cfn as success + await submitResponse('SUCCESS', responseEvent); + } + catch (e) { + const resp = { + ...event, + Reason: exports.external.includeStackTraces ? e.stack : e.message, + }; + if (!resp.PhysicalResourceId) { + // special case: if CREATE fails, which usually implies, we usually don't + // have a physical resource id. in this case, the subsequent DELETE + // operation does not have any meaning, and will likely fail as well. to + // address this, we use a marker so the provider framework can simply + // ignore the subsequent DELETE. + if (event.RequestType === 'Create') { + exports.external.log('CREATE failed, responding with a marker physical resource id so that the subsequent DELETE will be ignored'); + resp.PhysicalResourceId = CREATE_FAILED_PHYSICAL_ID_MARKER; + } + else { + // otherwise, if PhysicalResourceId is not specified, something is + // terribly wrong because all other events should have an ID. + exports.external.log(`ERROR: Malformed event. "PhysicalResourceId" is required: ${JSON.stringify(event)}`); + } + } + // this is an actual error, fail the activity altogether and exist. + await submitResponse('FAILED', resp); + } +} +exports.handler = handler; +function renderResponse(cfnRequest, handlerResponse = {}) { + // if physical ID is not returned, we have some defaults for you based + // on the request type. + const physicalResourceId = handlerResponse.PhysicalResourceId ?? cfnRequest.PhysicalResourceId ?? cfnRequest.RequestId; + // if we are in DELETE and physical ID was changed, it's an error. + if (cfnRequest.RequestType === 'Delete' && physicalResourceId !== cfnRequest.PhysicalResourceId) { + throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${handlerResponse.PhysicalResourceId}" during deletion`); + } + // merge request event and result event (result prevails). + return { + ...cfnRequest, + ...handlerResponse, + PhysicalResourceId: physicalResourceId, + }; +} +async function submitResponse(status, event) { + const json = { + Status: status, + Reason: event.Reason ?? status, + StackId: event.StackId, + RequestId: event.RequestId, + PhysicalResourceId: event.PhysicalResourceId || MISSING_PHYSICAL_ID_MARKER, + LogicalResourceId: event.LogicalResourceId, + NoEcho: event.NoEcho, + Data: event.Data, + }; + exports.external.log('submit response to cloudformation', json); + const responseBody = JSON.stringify(json); + const parsedUrl = url.parse(event.ResponseURL); + const req = { + hostname: parsedUrl.hostname, + path: parsedUrl.path, + method: 'PUT', + headers: { + 'content-type': '', + 'content-length': Buffer.byteLength(responseBody, 'utf8'), + }, + }; + const retryOptions = { + attempts: 5, + sleep: 1000, + }; + await withRetries(retryOptions, exports.external.sendHttpRequest)(req, responseBody); +} +async function defaultSendHttpRequest(options, responseBody) { + return new Promise((resolve, reject) => { + try { + const request = https.request(options, _ => resolve()); + request.on('error', reject); + request.write(responseBody); + request.end(); + } + catch (e) { + reject(e); + } + }); +} +function defaultLog(fmt, ...params) { + // eslint-disable-next-line no-console + console.log(fmt, ...params); +} +function withRetries(options, fn) { + return async (...xs) => { + let attempts = options.attempts; + let ms = options.sleep; + while (true) { + try { + return await fn(...xs); + } + catch (e) { + if (attempts-- <= 0) { + throw e; + } + await sleep(Math.floor(Math.random() * ms)); + ms *= 2; + } + } + }; +} +exports.withRetries = withRetries; +async function sleep(ms) { + return new Promise((ok) => setTimeout(ok, ms)); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUMxRDtLQUNGLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRztRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztJQUNGLE1BQU0sV0FBVyxDQUFDLFlBQVksRUFBRSxnQkFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUFDLE9BQTZCLEVBQUUsWUFBb0I7SUFDdkYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxJQUFJO1lBQ0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQUcsTUFBYTtJQUMvQyxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBU0QsU0FBZ0IsV0FBVyxDQUEwQixPQUFxQixFQUFFLEVBQTRCO0lBQ3RHLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBSyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxFQUFFO1lBQ1gsSUFBSTtnQkFDRixPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDeEI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7Z0JBQ0QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNUO1NBQ0Y7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBaEJELGtDQWdCQztBQUVELEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG4vLyBmb3IgdW5pdCB0ZXN0c1xuZXhwb3J0IGNvbnN0IGV4dGVybmFsID0ge1xuICBzZW5kSHR0cFJlcXVlc3Q6IGRlZmF1bHRTZW5kSHR0cFJlcXVlc3QsXG4gIGxvZzogZGVmYXVsdExvZyxcbiAgaW5jbHVkZVN0YWNrVHJhY2VzOiB0cnVlLFxuICB1c2VySGFuZGxlckluZGV4OiAnLi9pbmRleCcsXG59O1xuXG5jb25zdCBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6OkNSRUFURV9GQUlMRUQnO1xuY29uc3QgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpNSVNTSU5HX1BIWVNJQ0FMX0lEJztcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgSGFuZGxlclJlc3BvbnNlO1xuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpID0+IFByb21pc2U8SGFuZGxlclJlc3BvbnNlIHwgdm9pZD47XG5leHBvcnQgdHlwZSBIYW5kbGVyUmVzcG9uc2UgPSB1bmRlZmluZWQgfCB7XG4gIERhdGE/OiBhbnk7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgUmVhc29uPzogc3RyaW5nO1xuICBOb0VjaG8/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSB7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH07XG4gIGV4dGVybmFsLmxvZyhKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWRFdmVudCwgdW5kZWZpbmVkLCAyKSk7XG5cbiAgLy8gaWdub3JlIERFTEVURSBldmVudCB3aGVuIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBpcyB0aGUgbWFya2VyIHRoYXRcbiAgLy8gaW5kaWNhdGVzIHRoYXQgdGhpcyBERUxFVEUgaXMgYSBzdWJzZXF1ZW50IERFTEVURSB0byBhIGZhaWxlZCBDUkVBVEVcbiAgLy8gb3BlcmF0aW9uLlxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCA9PT0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIpIHtcbiAgICBleHRlcm5hbC5sb2coJ2lnbm9yaW5nIERFTEVURSBldmVudCBjYXVzZWQgYnkgYSBmYWlsZWQgQ1JFQVRFIGV2ZW50Jyk7XG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBpbnZva2UgdGhlIHVzZXIgaGFuZGxlci4gdGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSB0aGUgdHJ5LWNhdGNoIHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaXQncyByZXBvcnRlZCBhcyBhIGZhaWx1cmUgdG9cbiAgICAvLyBjbG91ZGZvcm1hdGlvbiAob3RoZXJ3aXNlIGNmbiB3YWl0cykuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjb25zdCB1c2VySGFuZGxlcjogSGFuZGxlciA9IHJlcXVpcmUoZXh0ZXJuYWwudXNlckhhbmRsZXJJbmRleCkuaGFuZGxlcjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1c2VySGFuZGxlcihzYW5pdGl6ZWRFdmVudCwgY29udGV4dCk7XG5cbiAgICAvLyB2YWxpZGF0ZSB1c2VyIHJlc3BvbnNlIGFuZCBjcmVhdGUgdGhlIGNvbWJpbmVkIGV2ZW50XG4gICAgY29uc3QgcmVzcG9uc2VFdmVudCA9IHJlbmRlclJlc3BvbnNlKGV2ZW50LCByZXN1bHQpO1xuXG4gICAgLy8gc3VibWl0IHRvIGNmbiBhcyBzdWNjZXNzXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCByZXNwb25zZUV2ZW50KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY29uc3QgcmVzcDogUmVzcG9uc2UgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIFJlYXNvbjogZXh0ZXJuYWwuaW5jbHVkZVN0YWNrVHJhY2VzID8gZS5zdGFjayA6IGUubWVzc2FnZSxcbiAgICB9O1xuXG4gICAgaWYgKCFyZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpZiBDUkVBVEUgZmFpbHMsIHdoaWNoIHVzdWFsbHkgaW1wbGllcywgd2UgdXN1YWxseSBkb24ndFxuICAgICAgLy8gaGF2ZSBhIHBoeXNpY2FsIHJlc291cmNlIGlkLiBpbiB0aGlzIGNhc2UsIHRoZSBzdWJzZXF1ZW50IERFTEVURVxuICAgICAgLy8gb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcsIGFuZCB3aWxsIGxpa2VseSBmYWlsIGFzIHdlbGwuIHRvXG4gICAgICAvLyBhZGRyZXNzIHRoaXMsIHdlIHVzZSBhIG1hcmtlciBzbyB0aGUgcHJvdmlkZXIgZnJhbWV3b3JrIGNhbiBzaW1wbHlcbiAgICAgIC8vIGlnbm9yZSB0aGUgc3Vic2VxdWVudCBERUxFVEUuXG4gICAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnKSB7XG4gICAgICAgIGV4dGVybmFsLmxvZygnQ1JFQVRFIGZhaWxlZCwgcmVzcG9uZGluZyB3aXRoIGEgbWFya2VyIHBoeXNpY2FsIHJlc291cmNlIGlkIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgREVMRVRFIHdpbGwgYmUgaWdub3JlZCcpO1xuICAgICAgICByZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCA9IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiBQaHlzaWNhbFJlc291cmNlSWQgaXMgbm90IHNwZWNpZmllZCwgc29tZXRoaW5nIGlzXG4gICAgICAgIC8vIHRlcnJpYmx5IHdyb25nIGJlY2F1c2UgYWxsIG90aGVyIGV2ZW50cyBzaG91bGQgaGF2ZSBhbiBJRC5cbiAgICAgICAgZXh0ZXJuYWwubG9nKGBFUlJPUjogTWFsZm9ybWVkIGV2ZW50LiBcIlBoeXNpY2FsUmVzb3VyY2VJZFwiIGlzIHJlcXVpcmVkOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFuIGFjdHVhbCBlcnJvciwgZmFpbCB0aGUgYWN0aXZpdHkgYWx0b2dldGhlciBhbmQgZXhpc3QuXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ0ZBSUxFRCcsIHJlc3ApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlc3BvbnNlKFxuICBjZm5SZXF1ZXN0OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgeyBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmcgfSxcbiAgaGFuZGxlclJlc3BvbnNlOiB2b2lkIHwgSGFuZGxlclJlc3BvbnNlID0geyB9KTogUmVzcG9uc2Uge1xuXG4gIC8vIGlmIHBoeXNpY2FsIElEIGlzIG5vdCByZXR1cm5lZCwgd2UgaGF2ZSBzb21lIGRlZmF1bHRzIGZvciB5b3UgYmFzZWRcbiAgLy8gb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gaGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlJlcXVlc3RJZDtcblxuICAvLyBpZiB3ZSBhcmUgaW4gREVMRVRFIGFuZCBwaHlzaWNhbCBJRCB3YXMgY2hhbmdlZCwgaXQncyBhbiBlcnJvci5cbiAgaWYgKGNmblJlcXVlc3QuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIHBoeXNpY2FsUmVzb3VyY2VJZCAhPT0gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERFTEVURTogY2Fubm90IGNoYW5nZSB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgZnJvbSBcIiR7Y2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgdG8gXCIke2hhbmRsZXJSZXNwb25zZS5QaHlzaWNhbFJlc291cmNlSWR9XCIgZHVyaW5nIGRlbGV0aW9uYCk7XG4gIH1cblxuICAvLyBtZXJnZSByZXF1ZXN0IGV2ZW50IGFuZCByZXN1bHQgZXZlbnQgKHJlc3VsdCBwcmV2YWlscykuXG4gIHJldHVybiB7XG4gICAgLi4uY2ZuUmVxdWVzdCxcbiAgICAuLi5oYW5kbGVyUmVzcG9uc2UsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFJlc3BvbnNlKHN0YXR1czogJ1NVQ0NFU1MnIHwgJ0ZBSUxFRCcsIGV2ZW50OiBSZXNwb25zZSkge1xuICBjb25zdCBqc29uOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge1xuICAgIFN0YXR1czogc3RhdHVzLFxuICAgIFJlYXNvbjogZXZlbnQuUmVhc29uID8/IHN0YXR1cyxcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkIHx8IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBOb0VjaG86IGV2ZW50Lk5vRWNobyxcbiAgICBEYXRhOiBldmVudC5EYXRhLFxuICB9O1xuXG4gIGV4dGVybmFsLmxvZygnc3VibWl0IHJlc3BvbnNlIHRvIGNsb3VkZm9ybWF0aW9uJywganNvbik7XG5cbiAgY29uc3QgcmVzcG9uc2VCb2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShldmVudC5SZXNwb25zZVVSTCk7XG4gIGNvbnN0IHJlcSA9IHtcbiAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHBhcnNlZFVybC5wYXRoLFxuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICcnLFxuICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocmVzcG9uc2VCb2R5LCAndXRmOCcpLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgcmV0cnlPcHRpb25zID0ge1xuICAgIGF0dGVtcHRzOiA1LFxuICAgIHNsZWVwOiAxMDAwLFxuICB9O1xuICBhd2FpdCB3aXRoUmV0cmllcyhyZXRyeU9wdGlvbnMsIGV4dGVybmFsLnNlbmRIdHRwUmVxdWVzdCkocmVxLCByZXNwb25zZUJvZHkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCBfID0+IHJlc29sdmUoKSk7XG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICByZXF1ZXN0LndyaXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICByZXF1ZXN0LmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0TG9nKGZtdDogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKGZtdCwgLi4ucGFyYW1zKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnMge1xuICAvKiogSG93IG1hbnkgcmV0cmllcyAod2lsbCBhdCBsZWFzdCB0cnkgb25jZSkgKi9cbiAgcmVhZG9ubHkgYXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqIFNsZWVwIGJhc2UsIGluIG1zICovXG4gIHJlYWRvbmx5IHNsZWVwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmV0cmllczxBIGV4dGVuZHMgQXJyYXk8YW55PiwgQj4ob3B0aW9uczogUmV0cnlPcHRpb25zLCBmbjogKC4uLnhzOiBBKSA9PiBQcm9taXNlPEI+KTogKC4uLnhzOiBBKSA9PiBQcm9taXNlPEI+IHtcbiAgcmV0dXJuIGFzeW5jICguLi54czogQSkgPT4ge1xuICAgIGxldCBhdHRlbXB0cyA9IG9wdGlvbnMuYXR0ZW1wdHM7XG4gICAgbGV0IG1zID0gb3B0aW9ucy5zbGVlcDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKC4uLnhzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGF0dGVtcHRzLS0gPD0gMCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbXMpKTtcbiAgICAgICAgbXMgKj0gMjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaykgPT4gc2V0VGltZW91dChvaywgbXMpKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/index.js new file mode 100644 index 0000000000000..8cbc0ea437b76 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837/index.js @@ -0,0 +1,81 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.handler = void 0; +/* eslint-disable-next-line import/no-extraneous-dependencies */ +const sdk = require("@aws-sdk/client-ec2"); +const ec2 = new sdk.EC2({}); +/** + * The default security group ingress rule. This can be used to both revoke and authorize the rules + */ +function ingressRuleParams(groupId, account) { + return { + GroupId: groupId, + IpPermissions: [{ + UserIdGroupPairs: [{ + GroupId: groupId, + UserId: account, + }], + IpProtocol: '-1', + }], + }; +} +/** + * The default security group egress rule. This can be used to both revoke and authorize the rules + */ +function egressRuleParams(groupId) { + return { + GroupId: groupId, + IpPermissions: [{ + IpRanges: [{ + CidrIp: '0.0.0.0/0', + }], + IpProtocol: '-1', + }], + }; +} +/** + * Process a custom resource request to restrict the default security group + * ingress & egress rules. + * + * When someone turns off the property then this custom resource will be deleted in which + * case we should add back the rules that were removed. + */ +async function handler(event) { + const securityGroupId = event.ResourceProperties.DefaultSecurityGroupId; + const account = event.ResourceProperties.Account; + switch (event.RequestType) { + case 'Create': + return revokeRules(securityGroupId, account); + case 'Update': + return onUpdate(event); + case 'Delete': + return authorizeRules(securityGroupId, account); + } +} +exports.handler = handler; +async function onUpdate(event) { + const oldSg = event.OldResourceProperties.DefaultSecurityGroupId; + const newSg = event.ResourceProperties.DefaultSecurityGroupId; + if (oldSg !== newSg) { + await authorizeRules(oldSg, event.ResourceProperties.Account); + await revokeRules(newSg, event.ResourceProperties.Account); + } + return; +} +/** + * Revoke both ingress and egress rules + */ +async function revokeRules(groupId, account) { + await ec2.revokeSecurityGroupEgress(egressRuleParams(groupId)); + await ec2.revokeSecurityGroupIngress(ingressRuleParams(groupId, account)); + return; +} +/** + * Authorize both ingress and egress rules + */ +async function authorizeRules(groupId, account) { + await ec2.authorizeSecurityGroupIngress(ingressRuleParams(groupId, account)); + await ec2.authorizeSecurityGroupEgress(egressRuleParams(groupId)); + return; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsMkNBQTJDO0FBRTNDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU1Qjs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsT0FBZSxFQUFFLE9BQWU7SUFHekQsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLGFBQWEsRUFBRSxDQUFDO2dCQUNkLGdCQUFnQixFQUFFLENBQUM7d0JBQ2pCLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixNQUFNLEVBQUUsT0FBTztxQkFDaEIsQ0FBQztnQkFDRixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBZTtJQUN2QyxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU87UUFDaEIsYUFBYSxFQUFFLENBQUM7Z0JBQ2QsUUFBUSxFQUFFLENBQUM7d0JBQ1QsTUFBTSxFQUFFLFdBQVc7cUJBQ3BCLENBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFrRDtJQUM5RSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUM7SUFDeEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztJQUNqRCxRQUFRLEtBQUssQ0FBQyxXQUFXLEVBQUU7UUFDekIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxXQUFXLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLEtBQUssUUFBUTtZQUNYLE9BQU8sY0FBYyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRDtBQUNILENBQUM7QUFYRCwwQkFXQztBQUNELEtBQUssVUFBVSxRQUFRLENBQUMsS0FBd0Q7SUFDOUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQztJQUM5RCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7UUFDbkIsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVEO0lBQ0QsT0FBTztBQUNULENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxXQUFXLENBQUMsT0FBZSxFQUFFLE9BQWU7SUFDekQsTUFBTSxHQUFHLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxPQUFPO0FBQ1QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFlLEVBQUUsT0FBZTtJQUM1RCxNQUFNLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE9BQU87QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0ICogYXMgc2RrIGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuXG5jb25zdCBlYzIgPSBuZXcgc2RrLkVDMih7fSk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBydWxlLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJvdGggcmV2b2tlIGFuZCBhdXRob3JpemUgdGhlIHJ1bGVzXG4gKi9cbmZ1bmN0aW9uIGluZ3Jlc3NSdWxlUGFyYW1zKGdyb3VwSWQ6IHN0cmluZywgYWNjb3VudDogc3RyaW5nKTpcbnNkay5SZXZva2VTZWN1cml0eUdyb3VwSW5ncmVzc0NvbW1hbmRJbnB1dFxufCBzZGsuQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3NDb21tYW5kSW5wdXQge1xuICByZXR1cm4ge1xuICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgSXBQZXJtaXNzaW9uczogW3tcbiAgICAgIFVzZXJJZEdyb3VwUGFpcnM6IFt7XG4gICAgICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgICAgIFVzZXJJZDogYWNjb3VudCxcbiAgICAgIH1dLFxuICAgICAgSXBQcm90b2NvbDogJy0xJyxcbiAgICB9XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBlZ3Jlc3MgcnVsZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBib3RoIHJldm9rZSBhbmQgYXV0aG9yaXplIHRoZSBydWxlc1xuICovXG5mdW5jdGlvbiBlZ3Jlc3NSdWxlUGFyYW1zKGdyb3VwSWQ6IHN0cmluZyk6IHNkay5SZXZva2VTZWN1cml0eUdyb3VwRWdyZXNzQ29tbWFuZElucHV0IHwgc2RrLkF1dGhvcml6ZVNlY3VyaXR5R3JvdXBFZ3Jlc3NDb21tYW5kSW5wdXQge1xuICByZXR1cm4ge1xuICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgSXBQZXJtaXNzaW9uczogW3tcbiAgICAgIElwUmFuZ2VzOiBbe1xuICAgICAgICBDaWRySXA6ICcwLjAuMC4wLzAnLFxuICAgICAgfV0sXG4gICAgICBJcFByb3RvY29sOiAnLTEnLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKipcbiAqIFByb2Nlc3MgYSBjdXN0b20gcmVzb3VyY2UgcmVxdWVzdCB0byByZXN0cmljdCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cFxuICogaW5ncmVzcyAmIGVncmVzcyBydWxlcy5cbiAqXG4gKiBXaGVuIHNvbWVvbmUgdHVybnMgb2ZmIHRoZSBwcm9wZXJ0eSB0aGVuIHRoaXMgY3VzdG9tIHJlc291cmNlIHdpbGwgYmUgZGVsZXRlZCBpbiB3aGljaFxuICogY2FzZSB3ZSBzaG91bGQgYWRkIGJhY2sgdGhlIHJ1bGVzIHRoYXQgd2VyZSByZW1vdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzZWN1cml0eUdyb3VwSWQgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGVmYXVsdFNlY3VyaXR5R3JvdXBJZDtcbiAgY29uc3QgYWNjb3VudCA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5BY2NvdW50O1xuICBzd2l0Y2ggKGV2ZW50LlJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSAnQ3JlYXRlJzpcbiAgICAgIHJldHVybiByZXZva2VSdWxlcyhzZWN1cml0eUdyb3VwSWQsIGFjY291bnQpO1xuICAgIGNhc2UgJ1VwZGF0ZSc6XG4gICAgICByZXR1cm4gb25VcGRhdGUoZXZlbnQpO1xuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICByZXR1cm4gYXV0aG9yaXplUnVsZXMoc2VjdXJpdHlHcm91cElkLCBhY2NvdW50KTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gb25VcGRhdGUoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgb2xkU2cgPSBldmVudC5PbGRSZXNvdXJjZVByb3BlcnRpZXMuRGVmYXVsdFNlY3VyaXR5R3JvdXBJZDtcbiAgY29uc3QgbmV3U2cgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGVmYXVsdFNlY3VyaXR5R3JvdXBJZDtcbiAgaWYgKG9sZFNnICE9PSBuZXdTZykge1xuICAgIGF3YWl0IGF1dGhvcml6ZVJ1bGVzKG9sZFNnLCBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuQWNjb3VudCk7XG4gICAgYXdhaXQgcmV2b2tlUnVsZXMobmV3U2csIGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5BY2NvdW50KTtcbiAgfVxuICByZXR1cm47XG59XG5cbi8qKlxuICogUmV2b2tlIGJvdGggaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJldm9rZVJ1bGVzKGdyb3VwSWQ6IHN0cmluZywgYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVjMi5yZXZva2VTZWN1cml0eUdyb3VwRWdyZXNzKGVncmVzc1J1bGVQYXJhbXMoZ3JvdXBJZCkpO1xuICBhd2FpdCBlYzIucmV2b2tlU2VjdXJpdHlHcm91cEluZ3Jlc3MoaW5ncmVzc1J1bGVQYXJhbXMoZ3JvdXBJZCwgYWNjb3VudCkpO1xuICByZXR1cm47XG59XG5cbi8qKlxuICogQXV0aG9yaXplIGJvdGggaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhvcml6ZVJ1bGVzKGdyb3VwSWQ6IHN0cmluZywgYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVjMi5hdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcyhpbmdyZXNzUnVsZVBhcmFtcyhncm91cElkLCBhY2NvdW50KSk7XG4gIGF3YWl0IGVjMi5hdXRob3JpemVTZWN1cml0eUdyb3VwRWdyZXNzKGVncmVzc1J1bGVQYXJhbXMoZ3JvdXBJZCkpO1xuICByZXR1cm47XG59XG4iXX0= \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/cdk.out new file mode 100644 index 0000000000000..2313ab5436501 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"34.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.assets.json new file mode 100644 index 0000000000000..d680c5d1f510f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.assets.json @@ -0,0 +1,45 @@ +{ + "version": "34.0.0", + "files": { + "18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837": { + "source": { + "path": "asset.18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff": { + "source": { + "path": "asset.03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "3de86a907f073cc40532a29067bd26afd26f826f27b8e6a504c5965ec6449715": { + "source": { + "path": "global-accelerator-endpoints2.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "3de86a907f073cc40532a29067bd26afd26f826f27b8e6a504c5965ec6449715.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.template.json new file mode 100644 index 0000000000000..d2d2f8e822cb5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/global-accelerator-endpoints2.template.json @@ -0,0 +1,753 @@ +{ + "Resources": { + "Vpc8378EB38": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc" + } + ] + } + }, + "VpcPublicSubnet1Subnet5C2D37C4": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.0.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet1RouteTable6C95E38E": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet1RouteTableAssociation97140677": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + }, + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + } + } + }, + "VpcPublicSubnet1DefaultRoute3DA9E72A": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + } + }, + "DependsOn": [ + "VpcVPCGWBF912B6E" + ] + }, + "VpcPublicSubnet1EIPD7E02669": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ] + } + }, + "VpcPublicSubnet1NATGateway4D7517AA": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet1EIPD7E02669", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ] + }, + "DependsOn": [ + "VpcPublicSubnet1DefaultRoute3DA9E72A", + "VpcPublicSubnet1RouteTableAssociation97140677" + ] + }, + "VpcPublicSubnet2Subnet691E08A3": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.64.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet2RouteTable94F7E489": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPublicSubnet2RouteTableAssociationDD5762D8": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + }, + "SubnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + } + } + }, + "VpcPublicSubnet2DefaultRoute97F91067": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + } + }, + "DependsOn": [ + "VpcVPCGWBF912B6E" + ] + }, + "VpcPublicSubnet2EIP3C605A87": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ] + } + }, + "VpcPublicSubnet2NATGateway9182C01D": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet2EIP3C605A87", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ] + }, + "DependsOn": [ + "VpcPublicSubnet2DefaultRoute97F91067", + "VpcPublicSubnet2RouteTableAssociationDD5762D8" + ] + }, + "VpcPrivateSubnet1Subnet536B997A": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.128.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet1RouteTableB2C5B500": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet1RouteTableAssociation70C59FA6": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + }, + "SubnetId": { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + } + }, + "VpcPrivateSubnet1DefaultRouteBE02A9ED": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + } + } + }, + "VpcPrivateSubnet2Subnet3788AAA1": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.192.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet2RouteTableA678073B": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcPrivateSubnet2RouteTableAssociationA89CAD56": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + }, + "SubnetId": { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + } + }, + "VpcPrivateSubnet2DefaultRoute060D2087": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + } + } + }, + "VpcIGWD7BA715C": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "global-accelerator-endpoints2/Vpc" + } + ] + } + }, + "VpcVPCGWBF912B6E": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "InternetGatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "VpcRestrictDefaultSecurityGroupCustomResourceC73DA2BE": { + "Type": "Custom::VpcRestrictDefaultSG", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "Arn" + ] + }, + "DefaultSecurityGroupId": { + "Fn::GetAtt": [ + "Vpc8378EB38", + "DefaultSecurityGroup" + ] + }, + "Account": { + "Ref": "AWS::AccountId" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ] + }, + "ManagedPolicyArns": [ + { + "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + } + ], + "Policies": [ + { + "PolicyName": "Inline", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress", + "ec2:RevokeSecurityGroupEgress" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ec2:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":security-group/", + { + "Fn::GetAtt": [ + "Vpc8378EB38", + "DefaultSecurityGroup" + ] + } + ] + ] + } + ] + } + ] + } + } + ] + } + }, + "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "18d379b052acd60e0d086d5b19d9bef956ebc0bd018c5570960125aab0c7f837.zip" + }, + "Timeout": 900, + "MemorySize": 128, + "Handler": "__entrypoint__.handler", + "Role": { + "Fn::GetAtt": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "Arn" + ] + }, + "Runtime": "nodejs18.x", + "Description": "Lambda function for removing all inbound/outbound rules from the VPC default security group" + }, + "DependsOn": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0" + ] + }, + "Accelerator8EB0B6B1": { + "Type": "AWS::GlobalAccelerator::Accelerator", + "Properties": { + "Enabled": true, + "Name": "globalacceleratorendpoints2Accelerator7A45CFAD" + } + }, + "AcceleratorListenerC766F638": { + "Type": "AWS::GlobalAccelerator::Listener", + "Properties": { + "AcceleratorArn": { + "Fn::GetAtt": [ + "Accelerator8EB0B6B1", + "AcceleratorArn" + ] + }, + "ClientAffinity": "NONE", + "PortRanges": [ + { + "FromPort": 80, + "ToPort": 80 + }, + { + "FromPort": 443, + "ToPort": 443 + } + ], + "Protocol": "TCP" + } + }, + "AcceleratorListenerGroupD9AE100E": { + "Type": "AWS::GlobalAccelerator::EndpointGroup", + "Properties": { + "EndpointConfigurations": [ + { + "EndpointId": { + "Ref": "ALBAEE750D2" + } + } + ], + "EndpointGroupRegion": { + "Ref": "AWS::Region" + }, + "ListenerArn": { + "Fn::GetAtt": [ + "AcceleratorListenerC766F638", + "ListenerArn" + ] + } + } + }, + "AcceleratorListenerGroupPeerCustomResource431D40B3": { + "Type": "Custom::AWS", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "Arn" + ] + }, + "Create": { + "Fn::Join": [ + "", + [ + "{\"service\":\"EC2\",\"action\":\"describeSecurityGroups\",\"parameters\":{\"Filters\":[{\"Name\":\"group-name\",\"Values\":[\"GlobalAccelerator\"]},{\"Name\":\"vpc-id\",\"Values\":[\"", + { + "Ref": "Vpc8378EB38" + }, + "\"]}]},\"physicalResourceId\":{\"responsePath\":\"SecurityGroups.0.GroupId\"}}" + ] + ] + }, + "InstallLatestAwsSdk": false + }, + "DependsOn": [ + "AcceleratorListenerGroupPeerCustomResourceCustomResourcePolicy0FED17E6", + "AcceleratorListenerGroupD9AE100E" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "AcceleratorListenerGroupPeerCustomResourceCustomResourcePolicy0FED17E6": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "ec2:DescribeSecurityGroups", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AcceleratorListenerGroupPeerCustomResourceCustomResourcePolicy0FED17E6", + "Roles": [ + { + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + } + ] + }, + "DependsOn": [ + "AcceleratorListenerGroupD9AE100E" + ] + }, + "ALBAEE750D2": { + "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + "Properties": { + "LoadBalancerAttributes": [ + { + "Key": "deletion_protection.enabled", + "Value": "false" + } + ], + "Scheme": "internal", + "SecurityGroups": [ + { + "Fn::GetAtt": [ + "ALBSecurityGroup8B8624F8", + "GroupId" + ] + } + ], + "Subnets": [ + { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + }, + { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + ], + "Type": "application" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ALBSecurityGroup8B8624F8": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "Automatically created Security Group for ELB globalacceleratorendpoints2ALB09FDE06B", + "SecurityGroupEgress": [ + { + "CidrIp": "255.255.255.255/32", + "Description": "Disallow all traffic", + "FromPort": 252, + "IpProtocol": "icmp", + "ToPort": 86 + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "AWS679f53fac002430cb0da5b7982bd22872D164C4C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff.zip" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "Arn" + ] + }, + "Runtime": "nodejs18.x", + "Timeout": 120 + }, + "DependsOn": [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + ] + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/integ.json new file mode 100644 index 0000000000000..4db0737f77ddb --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "34.0.0", + "testCases": { + "GlobalAcceleratorEndpoints/DefaultTest": { + "stacks": [ + "global-accelerator-endpoints2" + ], + "assertionStack": "GlobalAcceleratorEndpoints/DefaultTest/DeployAssert", + "assertionStackName": "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/manifest.json new file mode 100644 index 0000000000000..e664d3e2421f2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/manifest.json @@ -0,0 +1,315 @@ +{ + "version": "34.0.0", + "artifacts": { + "global-accelerator-endpoints2.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "global-accelerator-endpoints2.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "global-accelerator-endpoints2": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "global-accelerator-endpoints2.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3de86a907f073cc40532a29067bd26afd26f826f27b8e6a504c5965ec6449715.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "global-accelerator-endpoints2.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "global-accelerator-endpoints2.assets" + ], + "metadata": { + "/global-accelerator-endpoints2/Vpc/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Vpc8378EB38" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1Subnet5C2D37C4" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1RouteTable6C95E38E" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1RouteTableAssociation97140677" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1DefaultRoute3DA9E72A" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1EIPD7E02669" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet1/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet1NATGateway4D7517AA" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2Subnet691E08A3" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2RouteTable94F7E489" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2RouteTableAssociationDD5762D8" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2DefaultRoute97F91067" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2EIP3C605A87" + } + ], + "/global-accelerator-endpoints2/Vpc/PublicSubnet2/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPublicSubnet2NATGateway9182C01D" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1Subnet536B997A" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1RouteTableB2C5B500" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1RouteTableAssociation70C59FA6" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet1DefaultRouteBE02A9ED" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2Subnet3788AAA1" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2RouteTableA678073B" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2RouteTableAssociationA89CAD56" + } + ], + "/global-accelerator-endpoints2/Vpc/PrivateSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcPrivateSubnet2DefaultRoute060D2087" + } + ], + "/global-accelerator-endpoints2/Vpc/IGW": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcIGWD7BA715C" + } + ], + "/global-accelerator-endpoints2/Vpc/VPCGW": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcVPCGWBF912B6E" + } + ], + "/global-accelerator-endpoints2/Vpc/RestrictDefaultSecurityGroupCustomResource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "VpcRestrictDefaultSecurityGroupCustomResourceC73DA2BE" + } + ], + "/global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0" + } + ], + "/global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E" + } + ], + "/global-accelerator-endpoints2/Accelerator/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Accelerator8EB0B6B1" + } + ], + "/global-accelerator-endpoints2/Accelerator/Listener/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AcceleratorListenerC766F638" + } + ], + "/global-accelerator-endpoints2/Accelerator/Listener/Group/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AcceleratorListenerGroupD9AE100E" + } + ], + "/global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/Resource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "AcceleratorListenerGroupPeerCustomResource431D40B3" + } + ], + "/global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/CustomResourcePolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AcceleratorListenerGroupPeerCustomResourceCustomResourcePolicy0FED17E6" + } + ], + "/global-accelerator-endpoints2/ALB/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ALBAEE750D2" + } + ], + "/global-accelerator-endpoints2/ALB/SecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ALBSecurityGroup8B8624F8" + } + ], + "/global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + } + ], + "/global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C" + } + ], + "/global-accelerator-endpoints2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/global-accelerator-endpoints2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "global-accelerator-endpoints2" + }, + "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "GlobalAcceleratorEndpointsDefaultTestDeployAssert3F2DB71B.assets" + ], + "metadata": { + "/GlobalAcceleratorEndpoints/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/GlobalAcceleratorEndpoints/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "GlobalAcceleratorEndpoints/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/tree.json new file mode 100644 index 0000000000000..eb631b9ff8a7b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.js.snapshot/tree.json @@ -0,0 +1,1180 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "global-accelerator-endpoints2": { + "id": "global-accelerator-endpoints2", + "path": "global-accelerator-endpoints2", + "children": { + "Vpc": { + "id": "Vpc", + "path": "global-accelerator-endpoints2/Vpc", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Vpc/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPC", + "aws:cdk:cloudformation:props": { + "cidrBlock": "10.0.0.0/16", + "enableDnsHostnames": true, + "enableDnsSupport": true, + "instanceTenancy": "default", + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPC", + "version": "0.0.0" + } + }, + "PublicSubnet1": { + "id": "PublicSubnet1", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.0.0/18", + "mapPublicIpOnLaunch": true, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Public" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + }, + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet1/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet1EIPD7E02669", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "PublicSubnet2": { + "id": "PublicSubnet2", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.64.0/18", + "mapPublicIpOnLaunch": true, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Public" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + }, + "subnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "global-accelerator-endpoints2/Vpc/PublicSubnet2/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "VpcPublicSubnet2EIP3C605A87", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PublicSubnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "PrivateSubnet1": { + "id": "PrivateSubnet1", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.128.0/18", + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Private" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PrivateSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PrivateSubnet1" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + }, + "subnetId": { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet", + "version": "0.0.0" + } + }, + "PrivateSubnet2": { + "id": "PrivateSubnet2", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.192.0/18", + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Private" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PrivateSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc/PrivateSubnet2" + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + }, + "subnetId": { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "global-accelerator-endpoints2/Vpc/PrivateSubnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet", + "version": "0.0.0" + } + }, + "IGW": { + "id": "IGW", + "path": "global-accelerator-endpoints2/Vpc/IGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::InternetGateway", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "global-accelerator-endpoints2/Vpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnInternetGateway", + "version": "0.0.0" + } + }, + "VPCGW": { + "id": "VPCGW", + "path": "global-accelerator-endpoints2/Vpc/VPCGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPCGatewayAttachment", + "aws:cdk:cloudformation:props": { + "internetGatewayId": { + "Ref": "VpcIGWD7BA715C" + }, + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment", + "version": "0.0.0" + } + }, + "RestrictDefaultSecurityGroupCustomResource": { + "id": "RestrictDefaultSecurityGroupCustomResource", + "path": "global-accelerator-endpoints2/Vpc/RestrictDefaultSecurityGroupCustomResource", + "children": { + "Default": { + "id": "Default", + "path": "global-accelerator-endpoints2/Vpc/RestrictDefaultSecurityGroupCustomResource/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.Vpc", + "version": "0.0.0" + } + }, + "Custom::VpcRestrictDefaultSGCustomResourceProvider": { + "id": "Custom::VpcRestrictDefaultSGCustomResourceProvider", + "path": "global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider", + "children": { + "Staging": { + "id": "Staging", + "path": "global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Handler": { + "id": "Handler", + "path": "global-accelerator-endpoints2/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResourceProvider", + "version": "0.0.0" + } + }, + "Accelerator": { + "id": "Accelerator", + "path": "global-accelerator-endpoints2/Accelerator", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Accelerator/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GlobalAccelerator::Accelerator", + "aws:cdk:cloudformation:props": { + "enabled": true, + "name": "globalacceleratorendpoints2Accelerator7A45CFAD" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.CfnAccelerator", + "version": "0.0.0" + } + }, + "Listener": { + "id": "Listener", + "path": "global-accelerator-endpoints2/Accelerator/Listener", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GlobalAccelerator::Listener", + "aws:cdk:cloudformation:props": { + "acceleratorArn": { + "Fn::GetAtt": [ + "Accelerator8EB0B6B1", + "AcceleratorArn" + ] + }, + "clientAffinity": "NONE", + "portRanges": [ + { + "fromPort": 80, + "toPort": 80 + }, + { + "fromPort": 443, + "toPort": 443 + } + ], + "protocol": "TCP" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.CfnListener", + "version": "0.0.0" + } + }, + "Group": { + "id": "Group", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GlobalAccelerator::EndpointGroup", + "aws:cdk:cloudformation:props": { + "endpointConfigurations": [ + { + "endpointId": { + "Ref": "ALBAEE750D2" + } + } + ], + "endpointGroupRegion": { + "Ref": "AWS::Region" + }, + "listenerArn": { + "Fn::GetAtt": [ + "AcceleratorListenerC766F638", + "ListenerArn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.CfnEndpointGroup", + "version": "0.0.0" + } + }, + "PeerCustomResource": { + "id": "PeerCustomResource", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource", + "children": { + "Provider": { + "id": "Provider", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/Provider", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/Resource", + "children": { + "Default": { + "id": "Default", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/Resource/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResource", + "version": "0.0.0" + } + }, + "CustomResourcePolicy": { + "id": "CustomResourcePolicy", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/CustomResourcePolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/Accelerator/Listener/Group/PeerCustomResource/CustomResourcePolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": "ec2:DescribeSecurityGroups", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "policyName": "AcceleratorListenerGroupPeerCustomResourceCustomResourcePolicy0FED17E6", + "roles": [ + { + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.EndpointGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.Listener", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_globalaccelerator.Accelerator", + "version": "0.0.0" + } + }, + "ALB": { + "id": "ALB", + "path": "global-accelerator-endpoints2/ALB", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/ALB/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + "aws:cdk:cloudformation:props": { + "loadBalancerAttributes": [ + { + "key": "deletion_protection.enabled", + "value": "false" + } + ], + "scheme": "internal", + "securityGroups": [ + { + "Fn::GetAtt": [ + "ALBSecurityGroup8B8624F8", + "GroupId" + ] + } + ], + "subnets": [ + { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + }, + { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + } + ], + "type": "application" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer", + "version": "0.0.0" + } + }, + "SecurityGroup": { + "id": "SecurityGroup", + "path": "global-accelerator-endpoints2/ALB/SecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/ALB/SecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "Automatically created Security Group for ELB globalacceleratorendpoints2ALB09FDE06B", + "securityGroupEgress": [ + { + "cidrIp": "255.255.255.255/32", + "description": "Disallow all traffic", + "ipProtocol": "icmp", + "fromPort": 252, + "toPort": 86 + } + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer", + "version": "0.0.0" + } + }, + "AWS679f53fac002430cb0da5b7982bd2287": { + "id": "AWS679f53fac002430cb0da5b7982bd2287", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Code": { + "id": "Code", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketBase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_assets.Asset", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "global-accelerator-endpoints2/AWS679f53fac002430cb0da5b7982bd2287/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "s3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "s3Key": "03adb2514e02907e0458bec59283658ec529425bd5df38e1194455c65dedf6ff.zip" + }, + "handler": "index.handler", + "role": { + "Fn::GetAtt": [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "Arn" + ] + }, + "runtime": "nodejs18.x", + "timeout": 120 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "global-accelerator-endpoints2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "global-accelerator-endpoints2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "GlobalAcceleratorEndpoints": { + "id": "GlobalAcceleratorEndpoints", + "path": "GlobalAcceleratorEndpoints", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "GlobalAcceleratorEndpoints/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "GlobalAcceleratorEndpoints/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.70" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "GlobalAcceleratorEndpoints/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "GlobalAcceleratorEndpoints/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "GlobalAcceleratorEndpoints/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.70" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.ts new file mode 100644 index 0000000000000..7cb3c5e105d75 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-globalaccelerator/test/integ.globalaccelerator-endpoints.ts @@ -0,0 +1,37 @@ +import { App, RemovalPolicy, Stack } from 'aws-cdk-lib/core'; +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import * as ga from 'aws-cdk-lib/aws-globalaccelerator'; +import { Vpc } from 'aws-cdk-lib/aws-ec2'; +import { ApplicationLoadBalancer } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; +import { ApplicationLoadBalancerEndpoint } from 'aws-cdk-lib/aws-globalaccelerator-endpoints'; + +const app = new App({}); + +const stack = new Stack(app, 'global-accelerator-endpoints2'); + +const vpc = new Vpc(stack, 'Vpc'); +const accelerator = new ga.Accelerator(stack, 'Accelerator'); +const listener = +accelerator.addListener('Listener', { + portRanges: [ + { fromPort: 80 }, + { fromPort: 443 }, + ], +}); + +const alb = new ApplicationLoadBalancer(stack, 'ALB', { vpc }); +alb.applyRemovalPolicy(RemovalPolicy.DESTROY); + +const group = listener.addEndpointGroup('Group', { + endpoints: [new ApplicationLoadBalancerEndpoint(alb)], +}); + +// This add a custom resource to retrieve the security group id added by the service. +// If no security group is found, the deployment should fail +group.connectionsPeer('Peer', vpc); + +new IntegTest(app, 'GlobalAcceleratorEndpoints', { + testCases: [stack], +}); + +app.synth();