// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Snapshot 1`] = ` Object { "Mappings": Object { "AsteriskInstanceAmiMapD5119D2F": Object { "us-east-1": Object { "ami": Object { "Ref": "SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter", }, }, }, }, "Outputs": Object { "DistributionUrl": Object { "Value": Object { "Fn::Join": Array [ "", Array [ "https://", Object { "Fn::GetAtt": Array [ "DistributionResourcesDistribution80C53434", "DomainName", ], }, "/", ], ], }, }, "phoneNumber": Object { "Value": Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, }, "sshCommand": Object { "Value": Object { "Fn::Join": Array [ "", Array [ "ssh ubuntu@", Object { "Ref": "VPCasteriskEip406AFABB", }, ], ], }, }, "ssmCommand": Object { "Value": Object { "Fn::Join": Array [ "", Array [ "aws ssm start-session --target ", Object { "Ref": "AsteriskInstanceDB1344621571cf349fa7d2b1", }, ], ], }, }, }, "Parameters": Object { "BootstrapVersion": Object { "Default": "/cdk-bootstrap/hnb659fds/version", "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]", "Type": "AWS::SSM::Parameter::Value", }, "SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter": Object { "Default": "/aws/service/canonical/ubuntu/server/jammy/stable/current/arm64/hvm/ebs-gp2/ami-id", "Type": "AWS::SSM::Parameter::Value", }, }, "Resources": Object { "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { "DependsOn": Array [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", ], "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "099a3112386fa620b3069790dcf92c8e64bb5341760a8b0a76bfa843f8ad41df.zip", }, "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn", ], }, "Runtime": "nodejs18.x", "Timeout": 120, }, "Type": "AWS::Lambda::Function", }, "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "AsteriskEIPAssociation3A327365": Object { "Properties": Object { "EIP": Object { "Ref": "VPCasteriskEip406AFABB", }, "InstanceId": Object { "Ref": "AsteriskInstanceDB1344621571cf349fa7d2b1", }, }, "Type": "AWS::EC2::EIPAssociation", }, "AsteriskInstanceDB1344621571cf349fa7d2b1": Object { "CreationPolicy": Object { "ResourceSignal": Object { "Count": 1, "Timeout": "PT10M", }, }, "DependsOn": Array [ "AsteriskserverEc2RoleDefaultPolicy4958C8E5", "AsteriskserverEc2Role44C39328", ], "Metadata": Object { "AWS::CloudFormation::Init": Object { "config": Object { "commands": Object { "000": Object { "command": "chmod +x /etc/config_asterisk.sh", }, "001": Object { "command": "/etc/config_asterisk.sh", }, }, "files": Object { "/etc/asterisk/asterisk.conf": Object { "content": "[options] runuser = asterisk rungroup = asterisk", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/extensions.conf": Object { "content": "; extensions.conf - the Asterisk dial plan [general] static=yes writeprotect=no clearglobalvars=no [from-voiceConnector] include => inbound_phone [from-phone] include => outbound_phone [outbound_phone] exten => _+X.,1,NoOP(Outbound Normal) same => n,Dial(PJSIP/\\\\\${EXTEN}@PSTNVoiceConnector,20) same => n,Congestion [inbound_phone] exten => _+X.,1,NoOP(Inbound Call) same => n,Answer() same => n,Wait(1) same => n,Verbose(Get device status \${DEVICE_STATE(PJSIP/agent)}) same => n,GotoIf($[\${DEVICE_STATE(PJSIP/PHONE_NUMBER)}=UNAVAILABLE]?playAudio:callPhone) same => n(callPhone),NoOp(callPhone) same => n,Dial(PJSIP/PHONE_NUMBER) same => n,Hangup() same => n(playAudio),NoOp(playAudio) same => n,Playback(/var/lib/asterisk/sounds/en/AGENT_Retail40) same => n,Hangup() ", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/http.conf": Object { "content": "[general] enabled=yes bindaddr=0.0.0.0 bindport=8088 ", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/logger.conf": Object { "content": "[general] [logfiles] console = verbose,notice,warning,error messages = notice,warning,error", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/modules.conf": Object { "content": "[modules] autoload = no load = app_bridgewait.so load = app_dial.so load = app_playback.so load = app_stack.so load = app_verbose.so load = app_voicemail.so load = app_directory.so load = app_confbridge.so load = app_queue.so load = app_echo.so load = app_while.so load = app_read.so ; Bridging load = bridge_builtin_features.so load = bridge_builtin_interval_features.so load = bridge_holding.so load = bridge_native_rtp.so load = bridge_simple.so load = bridge_softmix.so ; Call Detail Records load = cdr_custom.so ; Channel Drivers load = chan_bridge_media.so load = chan_pjsip.so ; Codecs load = codec_gsm.so load = codec_resample.so load = codec_ulaw.so load = codec_g722.so ; Formats load = format_gsm.so load = format_pcm.so load = format_wav_gsm.so load = format_wav.so ; Functions load = func_callerid.so load = func_cdr.so load = func_pjsip_endpoint.so load = func_sorcery.so load = func_devstate.so load = func_strings.so load = func_cut.so load = func_rand.so load = func_shell.so load = func_env.so ; Core/PBX load = pbx_config.so ; Resources load = res_http_websocket.so load = res_crypto.so load = res_musiconhold.so load = res_pjproject.so load = res_pjsip_acl.so load = res_pjsip_authenticator_digest.so load = res_pjsip_caller_id.so load = res_pjsip_dialog_info_body_generator.so load = res_pjsip_diversion.so load = res_pjsip_dtmf_info.so load = res_pjsip_endpoint_identifier_anonymous.so load = res_pjsip_endpoint_identifier_ip.so load = res_pjsip_endpoint_identifier_user.so load = res_pjsip_exten_state.so load = res_pjsip_header_funcs.so load = res_pjsip_logger.so load = res_pjsip_messaging.so load = res_pjsip_mwi_body_generator.so load = res_pjsip_mwi.so load = res_pjsip_nat.so load = res_pjsip_notify.so load = res_pjsip_one_touch_record_info.so load = res_pjsip_outbound_authenticator_digest.so load = res_pjsip_outbound_publish.so load = res_pjsip_outbound_registration.so load = res_pjsip_path.so load = res_pjsip_pidf_body_generator.so load = res_pjsip_pidf_digium_body_supplement.so load = res_pjsip_pidf_eyebeam_body_supplement.so load = res_pjsip_publish_asterisk.so load = res_pjsip_pubsub.so load = res_pjsip_refer.so load = res_pjsip_registrar.so load = res_pjsip_rfc3326.so load = res_pjsip_sdp_rtp.so load = res_pjsip_send_to_voicemail.so load = res_pjsip_session.so load = res_pjsip.so load = res_pjsip_t38.so load = res_pjsip_transport_websocket.so load = res_pjsip_xpidf_body_generator.so load = res_rtp_asterisk.so load = res_sorcery_astdb.so load = res_sorcery_config.so load = res_sorcery_memory.so load = res_sorcery_realtime.so load = res_timing_timerfd.so load = res_pjsip_transport_websocket.so load = res_http_websocket.so load = res_srtp.so ; Do not load res_hep and kin unless you are using HEP monitoring ; in your network. noload = res_hep.so noload = res_hep_pjsip.so noload = res_hep_rtcp.so", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/pjsip.conf": Object { "content": "[udp] type=transport protocol=udp bind=0.0.0.0 external_media_address=PUBLIC_IP external_signaling_address=PUBLIC_IP allow_reload=yes [ws] type=transport protocol=ws bind=0.0.0.0 external_media_address=PUBLIC_IP external_signaling_address=PUBLIC_IP allow_reload=yes [PSTNVoiceConnector] type=endpoint context=from-voiceConnector transport=udp disallow=all allow=ulaw aors=PSTNVoiceConnector direct_media=no ice_support=yes force_rport=yes [PSTNVoiceConnector] type=identify endpoint=PSTNVoiceConnector match=VOICE_CONNECTOR.voiceconnector.chime.aws [PSTNVoiceConnector] type=aor contact=sip:VOICE_CONNECTOR.voiceconnector.chime.aws qualify_frequency=30 [PHONE_NUMBER] type=endpoint aors=PHONE_NUMBER auth=PHONE_NUMBER webrtc=yes context=from-phone disallow=all allow=ulaw [PHONE_NUMBER] type=auth auth_type=userpass username=PHONE_NUMBER password=STACK_ID [PHONE_NUMBER] type=aor max_contacts=5 ", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/asterisk/rtp.conf": Object { "content": "[general] stunaddr=stun.kinesisvideo.us-east-1.amazonaws.com:443", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/config.json": Object { "content": Object { "IP": Object { "Ref": "VPCasteriskEip406AFABB", }, "PHONE_NUMBER": Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, "REGION": Object { "Ref": "AWS::Region", }, "STACK_ID": "test", "VOICE_CONNECTOR": Object { "Fn::GetAtt": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestpstnCustomResource27AF2C83", "voiceConnectorId", ], }, }, "group": "root", "mode": "000644", "owner": "root", }, "/etc/config_asterisk.sh": Object { "content": "#!/bin/bash -xe PUBLIC_IP=$( jq -r '.IP' /etc/config.json ) VOICE_CONNECTOR=$( jq -r '.VOICE_CONNECTOR' /etc/config.json ) PHONE_NUMBER=$( jq -r '.PHONE_NUMBER' /etc/config.json ) STACK_ID=$( jq -r '.STACK_ID' /etc/config.json ) /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/tmp/amazon-cloudwatch-agent.json sed -i \\"s/PUBLIC_IP/$PUBLIC_IP/g\\" /etc/asterisk/pjsip.conf sed -i \\"s/VOICE_CONNECTOR/\${VOICE_CONNECTOR}/g\\" /etc/asterisk/pjsip.conf sed -i \\"s/PHONE_NUMBER/$PHONE_NUMBER/g\\" /etc/asterisk/extensions.conf sed -i \\"s/PHONE_NUMBER/$PHONE_NUMBER/g\\" /etc/asterisk/pjsip.conf sed -i \\"s/STACK_ID/$STACK_ID/g\\" /etc/asterisk/pjsip.conf echo \\"VOICE_CONNECTOR: \${VOICE_CONNECTOR}\\" echo \\"PHONE_NUMBER: \${PHONE_NUMBER}\\" echo \\"STACK_ID: \${STACK_ID}\\" # aws chime put-voice-connector-origination --voice-connector-id \${VOICE_CONNECTOR} --origination '{\\"Routes\\": [{\\"Host\\": \\"'\${PUBLIC_IP}'\\",\\"Port\\": 5060,\\"Protocol\\": \\"UDP\\",\\"Priority\\": 1,\\"Weight\\": 1}],\\"Disabled\\": false}' # aws chime put-voice-connector-termination --voice-connector-id \${VOICE_CONNECTOR} --termination '{\\"CpsLimit\\": 1, \\"CallingRegions\\": [\\"US\\"], \\"CidrAllowedList\\": [\\"'\${PUBLIC_IP}'/32\\"], \\"Disabled\\": false}' usermod -aG audio,dialout asterisk chown -R asterisk.asterisk /etc/asterisk chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk echo '0 * * * * /sbin/asterisk -rx \\"core reload\\"' > /etc/asterisk/crontab.txt crontab /etc/asterisk/crontab.txt systemctl restart asterisk /sbin/asterisk -rx \\"core reload\\" cd /home/ubuntu/site chown ubuntu:ubuntu . -R yarn && yarn run build systemctl enable nginx systemctl restart nginx", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/etc/nginx/sites-available/default": Object { "content": "server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html; server_name _; location / { try_files $uri $uri/ /index.html; } location /healthcheck { access_log off; return 200; } location ~* \\\\.(?:ico|css|js|gif|jpe?g|png)$ { expires max; add_header Cache-Control \\"public, must-revalidate, proxy-revalidate\\"; try_files $uri =404; } }", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/home/ubuntu/.ssh/authorized_keys": Object { "content": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqJ++WfXyL/uqAb/eZ1fT9/MzHCKd/n4gUgddjlcbCV ", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/home/ubuntu/site/.env": Object { "content": Object { "Fn::Join": Array [ "", Array [ "SIP_URI=sip:", Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, "@", Object { "Fn::GetAtt": Array [ "DistributionResourcesDistribution80C53434", "DomainName", ], }, " SIP_PASSWORD=test WEBSOCKET_URL=wss://", Object { "Fn::GetAtt": Array [ "DistributionResourcesDistribution80C53434", "DomainName", ], }, "/ws VOICE_CONNECTOR_PHONE=", Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, " SERVER_IP=", Object { "Ref": "VPCasteriskEip406AFABB", }, " ", ], ], }, "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, "/tmp/amazon-cloudwatch-agent.json": Object { "content": "{ \\"agent\\": { \\"run_as_user\\": \\"root\\" }, \\"logs\\": { \\"logs_collected\\": { \\"files\\": { \\"collect_list\\": [ { \\"file_path\\": \\"/var/log/cloud-init-output.log\\", \\"log_group_name\\": \\"/var/log/amazon-chime-sdk-traffic-generator/\\", \\"log_stream_name\\": \\"{instance_id}-cloud-init-output\\", \\"retention_in_days\\": 7 }, { \\"file_path\\": \\"/var/log/asterisk/messages\\", \\"log_group_name\\": \\"/var/log/amazon-chime-sdk-traffic-generator/\\", \\"log_stream_name\\": \\"{instance_id}-messages\\", \\"retention_in_days\\": 7 }, { \\"file_path\\": \\"/var/log/cloud-init.log\\", \\"log_group_name\\": \\"/var/log/amazon-chime-sdk-traffic-generator/\\", \\"log_stream_name\\": \\"{instance_id}-cloud-init\\", \\"retention_in_days\\": 7 } ] } } } }", "encoding": "plain", "group": "root", "mode": "000644", "owner": "root", }, }, }, "configSets": Object { "default": Array [ "config", ], }, }, }, "Properties": Object { "AvailabilityZone": Object { "Fn::Select": Array [ 0, Object { "Fn::GetAZs": "", }, ], }, "IamInstanceProfile": Object { "Ref": "AsteriskInstanceInstanceProfile6D34C8D3", }, "ImageId": Object { "Fn::FindInMap": Array [ "AsteriskInstanceAmiMapD5119D2F", Object { "Ref": "AWS::Region", }, "ami", ], }, "InstanceType": "t4g.medium", "SecurityGroupIds": Array [ Object { "Fn::GetAtt": Array [ "Asteriskec2InstanceSecurityGroup9509BD27", "GroupId", ], }, Object { "Fn::GetAtt": Array [ "VPCAsteriskSecurityGroupB0CC51CE", "GroupId", ], }, Object { "Fn::GetAtt": Array [ "VPCSSHSecurityGroup0495A24F", "GroupId", ], }, ], "SubnetId": Object { "Ref": "VPCServerPublicSubnet1SubnetF3987995", }, "Tags": Array [ Object { "Key": "Name", "Value": "test/Asterisk/Instance", }, ], "UserData": Object { "Fn::Base64": Object { "Fn::Join": Array [ "", Array [ "#!/bin/bash apt-get update curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do sleep 1 ; done apt-get install -y python3-pip unzip jq asterisk nodejs nginx while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do sleep 1 ; done curl \\"https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb\\" -o \\"amazon-cloudwatch-agent.deb\\" dpkg -i -E ./amazon-cloudwatch-agent.deb while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do sleep 1 ; done corepack enable mkdir -p /var/lib/asterisk/sounds/en mkdir -p /opt/aws/bin pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz ln -s /root/aws-cfn-bootstrap-latest/init/ubuntu/cfn-hup /etc/init.d/cfn-hup ln -s /usr/local/bin/cfn-* /opt/aws/bin/ curl \\"https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip\\" -o \\"awscliv2.zip\\" unzip -q awscliv2.zip ./aws/install echo AWS CLI installed aws s3 cp s3://", Object { "Ref": "AsteriskassetBucket6F81CF71", }, "/audio/AGENT_Retail40.wav /var/lib/asterisk/sounds/en/AGENT_Retail40.wav echo Audio files copied mkdir -p /home/ubuntu/site aws s3 cp s3://", Object { "Ref": "AsteriskassetBucket6F81CF71", }, "/site /home/ubuntu/site --recursive usermod -a -G www-data ubuntu # fingerprint: ad6ab710b80026a5 ( set +e /opt/aws/bin/cfn-init -v --region ", Object { "Ref": "AWS::Region", }, " --stack ", Object { "Ref": "AWS::StackName", }, " --resource AsteriskInstanceDB1344621571cf349fa7d2b1 --url https://cloudformation.", Object { "Ref": "AWS::Region", }, ".", Object { "Ref": "AWS::URLSuffix", }, " --role ", Object { "Ref": "AsteriskserverEc2Role44C39328", }, " -c default /opt/aws/bin/cfn-signal -e $? --region ", Object { "Ref": "AWS::Region", }, " --stack ", Object { "Ref": "AWS::StackName", }, " --resource AsteriskInstanceDB1344621571cf349fa7d2b1 --url https://cloudformation.", Object { "Ref": "AWS::Region", }, ".", Object { "Ref": "AWS::URLSuffix", }, " --role ", Object { "Ref": "AsteriskserverEc2Role44C39328", }, " cat /var/log/cfn-init.log >&2 )", ], ], }, }, }, "Type": "AWS::EC2::Instance", }, "AsteriskInstanceInstanceProfile6D34C8D3": Object { "Properties": Object { "Roles": Array [ Object { "Ref": "AsteriskserverEc2Role44C39328", }, ], }, "Type": "AWS::IAM::InstanceProfile", }, "AsteriskassetBucket6F81CF71": Object { "DeletionPolicy": "Delete", "Properties": Object { "OwnershipControls": Object { "Rules": Array [ Object { "ObjectOwnership": "BucketOwnerPreferred", }, ], }, "Tags": Array [ Object { "Key": "aws-cdk:auto-delete-objects", "Value": "true", }, Object { "Key": "aws-cdk:cr-owned:a59c0773", "Value": "true", }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Delete", }, "AsteriskassetBucketAutoDeleteObjectsCustomResource5A24C468": Object { "DeletionPolicy": "Delete", "DependsOn": Array [ "AsteriskassetBucketPolicy5429FAF1", ], "Properties": Object { "BucketName": Object { "Ref": "AsteriskassetBucket6F81CF71", }, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "Arn", ], }, }, "Type": "Custom::S3AutoDeleteObjects", "UpdateReplacePolicy": "Delete", }, "AsteriskassetBucketDeploymentAwsCliLayerC6F765C2": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "AsteriskassetBucketDeploymentCustomResource512MiBF8F9A9A5": Object { "DeletionPolicy": "Delete", "Properties": Object { "DestinationBucketName": Object { "Ref": "AsteriskassetBucket6F81CF71", }, "Exclude": Array [ "**/node_modules/**", "**/dist/**", ], "Prune": true, "RetainOnDelete": false, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", "Arn", ], }, "SourceBucketNames": Array [ Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceObjectKeys": Array [ "8f2746268aa93953a0511ae5a715fcca46c893cb2ab0415b1b0c4901d03edc36.zip", ], }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "AsteriskassetBucketPolicy5429FAF1": Object { "Properties": Object { "Bucket": Object { "Ref": "AsteriskassetBucket6F81CF71", }, "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", ], "Effect": "Allow", "Principal": Object { "AWS": Object { "Fn::GetAtt": Array [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Arn", ], }, }, "Resource": Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "Asteriskec2InstanceSecurityGroup9509BD27": Object { "Properties": Object { "GroupDescription": "test/Asterisk/ec2InstanceSecurityGroup", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::SecurityGroup", }, "Asteriskec2InstanceSecurityGroupfromtestVPCALBSecurityGroup16D3633D8088DF67E21A": Object { "Properties": Object { "Description": "allow traffic on port 8088 from the ALB security group", "FromPort": 8088, "GroupId": Object { "Fn::GetAtt": Array [ "Asteriskec2InstanceSecurityGroup9509BD27", "GroupId", ], }, "IpProtocol": "tcp", "SourceSecurityGroupId": Object { "Fn::GetAtt": Array [ "VPCALBSecurityGroup1223EED0", "GroupId", ], }, "ToPort": 8088, }, "Type": "AWS::EC2::SecurityGroupIngress", }, "Asteriskec2InstanceSecurityGroupfromtestVPCALBSecurityGroup16D3633D80A4CC0E9A": Object { "Properties": Object { "Description": "allow traffic on port 80 from the ALB security group", "FromPort": 80, "GroupId": Object { "Fn::GetAtt": Array [ "Asteriskec2InstanceSecurityGroup9509BD27", "GroupId", ], }, "IpProtocol": "tcp", "SourceSecurityGroupId": Object { "Fn::GetAtt": Array [ "VPCALBSecurityGroup1223EED0", "GroupId", ], }, "ToPort": 80, }, "Type": "AWS::EC2::SecurityGroupIngress", }, "AsteriskhttpTargetGroup932EAE03": Object { "Properties": Object { "HealthCheckPath": "/healthcheck", "HealthCheckPort": "80", "HealthCheckProtocol": "HTTP", "Port": 80, "Protocol": "HTTP", "TargetGroupAttributes": Array [ Object { "Key": "stickiness.enabled", "Value": "false", }, ], "TargetType": "instance", "Targets": Array [ Object { "Id": Object { "Ref": "AsteriskInstanceDB1344621571cf349fa7d2b1", }, }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", }, "AsteriskserverEc2Role44C39328": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "ec2.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/AmazonSSMManagedInstanceCore", ], ], }, ], "Policies": Array [ Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "chime:*", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "chimePolicy", }, ], }, "Type": "AWS::IAM::Role", }, "AsteriskserverEc2RoleDefaultPolicy4958C8E5": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, "/*", ], ], }, ], }, Object { "Action": Array [ "cloudformation:DescribeStackResource", "cloudformation:SignalResource", ], "Effect": "Allow", "Resource": Object { "Ref": "AWS::StackId", }, }, ], "Version": "2012-10-17", }, "PolicyName": "AsteriskserverEc2RoleDefaultPolicy4958C8E5", "Roles": Array [ Object { "Ref": "AsteriskserverEc2Role44C39328", }, ], }, "Type": "AWS::IAM::Policy", }, "AsteriskwebSocketTargetGroup61F3F31A": Object { "Properties": Object { "HealthCheckPath": "/httpstatus", "HealthCheckPort": "8088", "HealthCheckProtocol": "HTTP", "Port": 8088, "Protocol": "HTTP", "TargetGroupAttributes": Array [ Object { "Key": "stickiness.enabled", "Value": "false", }, ], "TargetType": "instance", "Targets": Array [ Object { "Id": Object { "Ref": "AsteriskInstanceDB1344621571cf349fa7d2b1", }, }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92": Object { "DependsOn": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleDefaultPolicy96C3E726", "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", ], "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "9eb41a5505d37607ac419321497a4f8c21cf0ee1f9b4a6b29aa04301aea5c7fd.zip", }, "Environment": Object { "Variables": Object { "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", }, }, "Handler": "index.handler", "Layers": Array [ Object { "Ref": "AsteriskassetBucketDeploymentAwsCliLayerC6F765C2", }, ], "MemorySize": 512, "Role": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", "Arn", ], }, "Runtime": "python3.9", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleDefaultPolicy96C3E726": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], ], }, Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "/*", ], ], }, ], }, Object { "Action": Array [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ Object { "Fn::GetAtt": Array [ "AsteriskassetBucket6F81CF71", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleDefaultPolicy96C3E726", "Roles": Array [ Object { "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", }, ], }, "Type": "AWS::IAM::Policy", }, "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": Object { "DependsOn": Array [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", ], "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "a657308e723bb9460b800cb3b47dadb74e28243edfe246bf7755c45ec312eb97.zip", }, "Description": Object { "Fn::Join": Array [ "", Array [ "Lambda function for auto-deleting objects in ", Object { "Ref": "AsteriskassetBucket6F81CF71", }, " S3 bucket.", ], ], }, "Handler": "index.handler", "MemorySize": 128, "Role": Object { "Fn::GetAtt": Array [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Arn", ], }, "Runtime": "nodejs18.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", }, ], }, "Type": "AWS::IAM::Role", }, "DistributionResourcesDistribution80C53434": Object { "Properties": Object { "DistributionConfig": Object { "CacheBehaviors": Array [ Object { "AllowedMethods": Array [ "GET", "HEAD", "OPTIONS", "PUT", "PATCH", "POST", "DELETE", ], "CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad", "Compress": true, "OriginRequestPolicyId": "216adef6-5c7f-47e4-b989-5492eafa07d3", "PathPattern": "/ws", "TargetOriginId": "testDistributionResourcesDistributionOrigin255B4D0DE", "ViewerProtocolPolicy": "https-only", }, ], "DefaultCacheBehavior": Object { "AllowedMethods": Array [ "GET", "HEAD", "OPTIONS", "PUT", "PATCH", "POST", "DELETE", ], "CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad", "Compress": true, "OriginRequestPolicyId": "216adef6-5c7f-47e4-b989-5492eafa07d3", "TargetOriginId": "testDistributionResourcesDistributionOrigin1AB07B588", "ViewerProtocolPolicy": "https-only", }, "DefaultRootObject": "index.html", "Enabled": true, "HttpVersion": "http2", "IPV6Enabled": true, "Origins": Array [ Object { "CustomOriginConfig": Object { "HTTPPort": 80, "OriginProtocolPolicy": "http-only", "OriginSSLProtocols": Array [ "TLSv1.2", ], }, "DomainName": Object { "Fn::GetAtt": Array [ "VPCApplicationLoadBalancerF3CA31CB", "DNSName", ], }, "Id": "testDistributionResourcesDistributionOrigin1AB07B588", }, Object { "CustomOriginConfig": Object { "HTTPPort": 8088, "OriginProtocolPolicy": "http-only", "OriginSSLProtocols": Array [ "TLSv1.2", ], }, "DomainName": Object { "Fn::GetAtt": Array [ "VPCApplicationLoadBalancerF3CA31CB", "DNSName", ], }, "Id": "testDistributionResourcesDistributionOrigin255B4D0DE", }, ], "PriceClass": "PriceClass_100", }, }, "Type": "AWS::CloudFront::Distribution", }, "PSTNResources1DB9F314": Object { "DependsOn": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResourceRoleADB2DE88", ], "Properties": Object { "Architectures": Array [ "arm64", ], "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "1e85bcd7774f4f9e640d34759bef652508e0ebc55cb6d2b6cdb8600fa9ab8e3b.zip", }, "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResourceRoleADB2DE88", "Arn", ], }, "Runtime": "python3.9", "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "VPC61AD6880": Object { "Properties": Object { "CidrBlock": "10.0.0.0/16", "EnableDnsHostnames": true, "EnableDnsSupport": true, "InstanceTenancy": "default", "Tags": Array [ Object { "Key": "Name", "Value": "test/VPC/VPC", }, ], }, "Type": "AWS::EC2::VPC", }, "VPCALBSecurityGroup1223EED0": Object { "Properties": Object { "GroupDescription": "Security Group for ALB", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "Allow from anyone on port 80", "FromPort": 80, "IpProtocol": "tcp", "ToPort": 80, }, Object { "CidrIp": "0.0.0.0/0", "Description": "Allow from anyone on port 8088", "FromPort": 8088, "IpProtocol": "tcp", "ToPort": 8088, }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::SecurityGroup", }, "VPCApplicationLoadBalancerF3CA31CB": Object { "DependsOn": Array [ "VPCServerPublicSubnet1DefaultRoute0DEC8857", "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", "VPCServerPublicSubnet2DefaultRoute6A434666", "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", ], "Properties": Object { "LoadBalancerAttributes": Array [ Object { "Key": "deletion_protection.enabled", "Value": "false", }, ], "Scheme": "internet-facing", "SecurityGroups": Array [ Object { "Fn::GetAtt": Array [ "VPCALBSecurityGroup1223EED0", "GroupId", ], }, ], "Subnets": Array [ Object { "Ref": "VPCServerPublicSubnet1SubnetF3987995", }, Object { "Ref": "VPCServerPublicSubnet2SubnetDB508B90", }, ], "Type": "application", }, "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", }, "VPCApplicationLoadBalancerhttpListener0BD7D392": Object { "Properties": Object { "DefaultActions": Array [ Object { "TargetGroupArn": Object { "Ref": "AsteriskhttpTargetGroup932EAE03", }, "Type": "forward", }, ], "LoadBalancerArn": Object { "Ref": "VPCApplicationLoadBalancerF3CA31CB", }, "Port": 80, "Protocol": "HTTP", }, "Type": "AWS::ElasticLoadBalancingV2::Listener", }, "VPCApplicationLoadBalancerwebSocketListener9A52E144": Object { "Properties": Object { "DefaultActions": Array [ Object { "TargetGroupArn": Object { "Ref": "AsteriskwebSocketTargetGroup61F3F31A", }, "Type": "forward", }, ], "LoadBalancerArn": Object { "Ref": "VPCApplicationLoadBalancerF3CA31CB", }, "Port": 8088, "Protocol": "HTTP", }, "Type": "AWS::ElasticLoadBalancingV2::Listener", }, "VPCAsteriskSecurityGroupB0CC51CE": Object { "Properties": Object { "GroupDescription": "Security Group for Asterisk Instance", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": Array [ Object { "CidrIp": "3.80.16.0/23", "Description": "Allow Chime Voice Connector Signaling Access", "FromPort": 5060, "IpProtocol": "udp", "ToPort": 5060, }, Object { "CidrIp": "3.80.16.0/23", "Description": "Allow Chime Voice Connector Signaling Access", "FromPort": 5060, "IpProtocol": "tcp", "ToPort": 5061, }, Object { "CidrIp": "99.77.253.0/24", "Description": "Allow Chime Voice Connector Signaling Access", "FromPort": 5060, "IpProtocol": "udp", "ToPort": 5060, }, Object { "CidrIp": "99.77.253.0/24", "Description": "Allow Chime Voice Connector Signaling Access", "FromPort": 5060, "IpProtocol": "tcp", "ToPort": 5061, }, Object { "CidrIp": "99.77.253.0/24", "Description": "Allow Chime Voice Connector Signaling Access", "FromPort": 5000, "IpProtocol": "udp", "ToPort": 65000, }, Object { "CidrIp": "3.80.16.0/23", "Description": "Allow Chime Voice Connector Media Access", "FromPort": 5000, "IpProtocol": "udp", "ToPort": 65000, }, Object { "CidrIp": "52.55.62.128/25", "Description": "Allow Chime Voice Connector Media Access", "FromPort": 1024, "IpProtocol": "udp", "ToPort": 65535, }, Object { "CidrIp": "52.55.63.0/25", "Description": "Allow Chime Voice Connector Media Access", "FromPort": 1024, "IpProtocol": "udp", "ToPort": 65535, }, Object { "CidrIp": "34.212.95.128/25", "Description": "Allow Chime Voice Connector Media Access", "FromPort": 1024, "IpProtocol": "udp", "ToPort": 65535, }, Object { "CidrIp": "34.223.21.0/25", "Description": "Allow Chime Voice Connector Media Access", "FromPort": 1024, "IpProtocol": "udp", "ToPort": 65535, }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::SecurityGroup", }, "VPCIGWE1DD60CF": Object { "Properties": Object { "Tags": Array [ Object { "Key": "Name", "Value": "test/VPC/VPC", }, ], }, "Type": "AWS::EC2::InternetGateway", }, "VPCSSHSecurityGroup0495A24F": Object { "Properties": Object { "GroupDescription": "Security Group for SSH", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": Array [ Object { "CidrIp": "0.0.0.0/0", "Description": "from 0.0.0.0/0:22", "FromPort": 22, "IpProtocol": "tcp", "ToPort": 22, }, Object { "CidrIp": "0.0.0.0/0", "Description": "from 0.0.0.0/0:3000", "FromPort": 3000, "IpProtocol": "tcp", "ToPort": 3000, }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::SecurityGroup", }, "VPCServerPublicSubnet1DefaultRoute0DEC8857": Object { "DependsOn": Array [ "VPCVPCGW3AFA48F6", ], "Properties": Object { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": Object { "Ref": "VPCIGWE1DD60CF", }, "RouteTableId": Object { "Ref": "VPCServerPublicSubnet1RouteTable140320E2", }, }, "Type": "AWS::EC2::Route", }, "VPCServerPublicSubnet1RouteTable140320E2": Object { "Properties": Object { "Tags": Array [ Object { "Key": "Name", "Value": "test/VPC/VPC/ServerPublicSubnet1", }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::RouteTable", }, "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21": Object { "Properties": Object { "RouteTableId": Object { "Ref": "VPCServerPublicSubnet1RouteTable140320E2", }, "SubnetId": Object { "Ref": "VPCServerPublicSubnet1SubnetF3987995", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "VPCServerPublicSubnet1SubnetF3987995": Object { "Properties": Object { "AvailabilityZone": Object { "Fn::Select": Array [ 0, Object { "Fn::GetAZs": "", }, ], }, "CidrBlock": "10.0.0.0/24", "MapPublicIpOnLaunch": true, "Tags": Array [ Object { "Key": "aws-cdk:subnet-name", "Value": "ServerPublic", }, Object { "Key": "aws-cdk:subnet-type", "Value": "Public", }, Object { "Key": "Name", "Value": "test/VPC/VPC/ServerPublicSubnet1", }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::Subnet", }, "VPCServerPublicSubnet2DefaultRoute6A434666": Object { "DependsOn": Array [ "VPCVPCGW3AFA48F6", ], "Properties": Object { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": Object { "Ref": "VPCIGWE1DD60CF", }, "RouteTableId": Object { "Ref": "VPCServerPublicSubnet2RouteTableD6971BF3", }, }, "Type": "AWS::EC2::Route", }, "VPCServerPublicSubnet2RouteTableAssociationE261CDCA": Object { "Properties": Object { "RouteTableId": Object { "Ref": "VPCServerPublicSubnet2RouteTableD6971BF3", }, "SubnetId": Object { "Ref": "VPCServerPublicSubnet2SubnetDB508B90", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "VPCServerPublicSubnet2RouteTableD6971BF3": Object { "Properties": Object { "Tags": Array [ Object { "Key": "Name", "Value": "test/VPC/VPC/ServerPublicSubnet2", }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::RouteTable", }, "VPCServerPublicSubnet2SubnetDB508B90": Object { "Properties": Object { "AvailabilityZone": Object { "Fn::Select": Array [ 1, Object { "Fn::GetAZs": "", }, ], }, "CidrBlock": "10.0.1.0/24", "MapPublicIpOnLaunch": true, "Tags": Array [ Object { "Key": "aws-cdk:subnet-name", "Value": "ServerPublic", }, Object { "Key": "aws-cdk:subnet-type", "Value": "Public", }, Object { "Key": "Name", "Value": "test/VPC/VPC/ServerPublicSubnet2", }, ], "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::Subnet", }, "VPCVPCGW3AFA48F6": Object { "Properties": Object { "InternetGatewayId": Object { "Ref": "VPCIGWE1DD60CF", }, "VpcId": Object { "Ref": "VPC61AD6880", }, }, "Type": "AWS::EC2::VPCGatewayAttachment", }, "VPCasteriskEip406AFABB": Object { "Type": "AWS::EC2::EIP", }, "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventED6695D2": Object { "DependsOn": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy05211EE7", "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRole5008B784", ], "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf.zip", }, "Description": "AWS CDK resource provider framework - onEvent (test/VoiceConnector/pstnVoiceConnector/voiceConnectorRequest/PSTNResourceProvider)", "Environment": Object { "Variables": Object { "USER_ON_EVENT_FUNCTION_ARN": Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, }, }, "Handler": "framework.onEvent", "Role": Object { "Fn::GetAtt": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRole5008B784", "Arn", ], }, "Runtime": "nodejs18.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRole5008B784": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy05211EE7": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": Array [ Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, ":*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy05211EE7", "Roles": Array [ Object { "Ref": "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventServiceRole5008B784", }, ], }, "Type": "AWS::IAM::Policy", }, "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestpstnCustomResource27AF2C83": Object { "DeletionPolicy": "Delete", "Properties": Object { "ServiceToken": Object { "Fn::GetAtt": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestPSTNResourceProviderframeworkonEventED6695D2", "Arn", ], }, "properties": Object { "encryption": false, "name": "testVoiceConnectorpstnVoiceConnector668B4AE0", "origination": Array [ Object { "host": Object { "Ref": "VPCasteriskEip406AFABB", }, "port": 5060, "priority": 1, "protocol": "UDP", "weight": 1, }, ], "region": Object { "Ref": "AWS::Region", }, "termination": Object { "callingRegions": Array [ "US", ], "terminationCidrs": Array [ Object { "Fn::Join": Array [ "", Array [ Object { "Ref": "VPCasteriskEip406AFABB", }, "/32", ], ], }, ], }, }, "resourceType": "VoiceConnector", "uid": "testVoiceConnectorpstnVoiceConnector668B4AE0", }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEvent942D8AB0": Object { "DependsOn": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy7F02870F", "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleF87410C7", ], "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf.zip", }, "Description": "AWS CDK resource provider framework - onEvent (test/VoiceConnector/voiceConnectorPhoneNumber/ChimePhoneNumber/PSTNResourceProvider)", "Environment": Object { "Variables": Object { "USER_ON_EVENT_FUNCTION_ARN": Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, }, }, "Handler": "framework.onEvent", "Role": Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleF87410C7", "Arn", ], }, "Runtime": "nodejs18.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy7F02870F": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": Array [ Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ Object { "Fn::GetAtt": Array [ "PSTNResources1DB9F314", "Arn", ], }, ":*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleDefaultPolicy7F02870F", "Roles": Array [ Object { "Ref": "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleF87410C7", }, ], }, "Type": "AWS::IAM::Policy", }, "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEventServiceRoleF87410C7": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67": Object { "DeletionPolicy": "Delete", "Properties": Object { "ServiceToken": Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberPSTNResourceProviderframeworkonEvent942D8AB0", "Arn", ], }, "properties": Object { "phoneCountry": "US", "phoneNumberType": "Local", "phoneProductType": "VoiceConnector", "phoneState": "IL", }, "resourceType": "PhoneNumber", "uid": "testVoiceConnectorvoiceConnectorPhoneNumberD0E0D162", }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResourceRoleADB2DE88": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Description": "Amazon Chime PSTN Resources", "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", ], ], }, ], "Policies": Array [ Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "chime:CreateSipRule", "chime:DeleteSipRule", "chime:UpdateSipRule", "chime:GetSipRule", "chime:CreateSipMediaApplication", "chime:DeleteSipMediaApplication", "chime:GetPhoneNumberOrder", "chime:SearchAvailablePhoneNumbers", "chime:CreatePhoneNumberOrder", "chime:DeletePhoneNumber", "chime:GetPhoneNumber", "chime:CreateVoiceConnector", "chime:PutVoiceConnectorStreamingConfiguration", "chime:PutVoiceConnectorTermination", "chime:PutVoiceConnectorOrigination", "chime:ListPhoneNumbers", "chime:AssociatePhoneNumbersWithVoiceConnector", "chime:DisassociatePhoneNumbersFromVoiceConnector", "chime:DeleteVoiceConnector", "lambda:GetPolicy", "lambda:AddPermission", "iam:PutRolePolicy", "iam:CreateServiceLinkedRole", ], "Effect": "Allow", "Resource": "*", }, Object { "Action": Array [ "ssm:PutParameter", "ssm:GetParameter", "ssm:DeleteParameter", ], "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:aws:ssm:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":parameter/chime/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "chimePolicy", }, ], }, "Type": "AWS::IAM::Role", }, "VoiceConnectorvoiceConnectorPhoneNumberphoneAssociationC9EFBA64": Object { "DeletionPolicy": "Delete", "DependsOn": Array [ "VoiceConnectorvoiceConnectorPhoneNumberphoneAssociationCustomResourcePolicyB28D93E6", ], "Properties": Object { "Create": Object { "Fn::Join": Array [ "", Array [ "{\\"service\\":\\"Chime\\",\\"action\\":\\"associatePhoneNumbersWithVoiceConnector\\",\\"region\\":\\"us-east-1\\",\\"parameters\\":{\\"E164PhoneNumbers\\":[\\"", Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, "\\"],\\"VoiceConnectorId\\":\\"", Object { "Fn::GetAtt": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestpstnCustomResource27AF2C83", "voiceConnectorId", ], }, "\\",\\"ForceAssociate\\":true},\\"physicalResourceId\\":{\\"id\\":\\"testVoiceConnectorvoiceConnectorPhoneNumberphoneAssociation9BD740B3\\"}}", ], ], }, "Delete": Object { "Fn::Join": Array [ "", Array [ "{\\"service\\":\\"Chime\\",\\"action\\":\\"disassociatePhoneNumbersFromVoiceConnector\\",\\"region\\":\\"us-east-1\\",\\"parameters\\":{\\"E164PhoneNumbers\\":[\\"", Object { "Fn::GetAtt": Array [ "VoiceConnectorvoiceConnectorPhoneNumberChimePhoneNumberpstnCustomResource78CB2D67", "phoneNumber", ], }, "\\"],\\"VoiceConnectorId\\":\\"", Object { "Fn::GetAtt": Array [ "VoiceConnectorpstnVoiceConnectorvoiceConnectorRequestpstnCustomResource27AF2C83", "voiceConnectorId", ], }, "\\"},\\"physicalResourceId\\":{\\"id\\":\\"testVoiceConnectorvoiceConnectorPhoneNumberphoneAssociation9BD740B3\\"}}", ], ], }, "InstallLatestAwsSdk": true, "ServiceToken": Object { "Fn::GetAtt": Array [ "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "Arn", ], }, }, "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, "VoiceConnectorvoiceConnectorPhoneNumberphoneAssociationCustomResourcePolicyB28D93E6": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "chime:AssociatePhoneNumbersWithVoiceConnector", "Effect": "Allow", "Resource": "*", }, Object { "Action": "chime:DisassociatePhoneNumbersFromVoiceConnector", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "VoiceConnectorvoiceConnectorPhoneNumberphoneAssociationCustomResourcePolicyB28D93E6", "Roles": Array [ Object { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], }, "Type": "AWS::IAM::Policy", }, }, "Rules": Object { "CheckBootstrapVersion": Object { "Assertions": Array [ Object { "Assert": Object { "Fn::Not": Array [ Object { "Fn::Contains": Array [ Array [ "1", "2", "3", "4", "5", ], Object { "Ref": "BootstrapVersion", }, ], }, ], }, "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.", }, ], }, }, } `;