diff --git a/deployment/BedrockProxy.template b/deployment/BedrockProxy.template index 0ec4e23..5cb3ac3 100644 --- a/deployment/BedrockProxy.template +++ b/deployment/BedrockProxy.template @@ -1,4 +1,5 @@ { + "Description": "Bedrock Access Gateway - OpenAI-compatible RESTful APIs for Amazon Bedrock", "Parameters": { "ApiKeyParam": { "Type": "String", @@ -388,7 +389,8 @@ }, "model" ] - } + }, + "DEFAULT_EMBEDDING_MODEL": "cohere.embed-multilingual-v3" } }, "MemorySize": 1024, @@ -569,6 +571,10 @@ "eu-central-1": { "repoArn": "arn:aws:ecr:eu-central-1:366590864501:repository/bedrock-proxy-api", "model": "anthropic.claude-v2:1" + }, + "eu-west-3": { + "repoArn": "arn:aws:ecr:eu-west-3:366590864501:repository/bedrock-proxy-api", + "model": "anthropic.claude-3-sonnet-20240229-v1:0" } } }, diff --git a/deployment/BedrockProxyFargate.template b/deployment/BedrockProxyFargate.template new file mode 100644 index 0000000..303e640 --- /dev/null +++ b/deployment/BedrockProxyFargate.template @@ -0,0 +1,1036 @@ +{ + "Description": "Bedrock Access Gateway - OpenAI-compatible RESTful APIs for Amazon Bedrock", + "Parameters": { + "ApiKeyParam": { + "Type": "String", + "Default": "", + "Description": "The parameter name in System Manager used to store the API Key, leave blank to use a default key" + } + }, + "Resources": { + "VPCB9E5F0B4": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.250.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC" + } + ] + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/Resource" + } + }, + "VPCPublicSubnet1SubnetB4246D30": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.250.0.0/24", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet1/Subnet" + } + }, + "VPCPublicSubnet1RouteTableFEE4B781": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet1/RouteTable" + } + }, + "VPCPublicSubnet1RouteTableAssociation0B0896DC": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VPCPublicSubnet1RouteTableFEE4B781" + }, + "SubnetId": { + "Ref": "VPCPublicSubnet1SubnetB4246D30" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet1/RouteTableAssociation" + } + }, + "VPCPublicSubnet1DefaultRoute91CEF279": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VPCIGWB7E252D3" + }, + "RouteTableId": { + "Ref": "VPCPublicSubnet1RouteTableFEE4B781" + } + }, + "DependsOn": [ + "VPCVPCGW99B986DC" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet1/DefaultRoute" + } + }, + "VPCPublicSubnet2Subnet74179F39": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.250.1.0/24", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet2/Subnet" + } + }, + "VPCPublicSubnet2RouteTable6F1A15F1": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet2/RouteTable" + } + }, + "VPCPublicSubnet2RouteTableAssociation5A808732": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "VPCPublicSubnet2RouteTable6F1A15F1" + }, + "SubnetId": { + "Ref": "VPCPublicSubnet2Subnet74179F39" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet2/RouteTableAssociation" + } + }, + "VPCPublicSubnet2DefaultRouteB7481BBA": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "VPCIGWB7E252D3" + }, + "RouteTableId": { + "Ref": "VPCPublicSubnet2RouteTable6F1A15F1" + } + }, + "DependsOn": [ + "VPCVPCGW99B986DC" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/PublicSubnet2/DefaultRoute" + } + }, + "VPCIGWB7E252D3": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "BedrockProxyFargate/VPC" + } + ] + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/IGW" + } + }, + "VPCVPCGW99B986DC": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "InternetGatewayId": { + "Ref": "VPCIGWB7E252D3" + }, + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/VPC/VPCGW" + } + }, + "ProxyExecRole6947A5BE": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ecs-tasks.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ExecRole/Resource" + } + }, + "ProxyExecRoleDefaultPolicyED41DFE7": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:BatchGetImage", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:BatchGetImage" + ], + "Effect": "Allow", + "Resource": { + "Fn::FindInMap": [ + "ProxyRegionTable03E5BEB3", + { + "Ref": "AWS::Region" + }, + "repoArn" + ] + } + }, + { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProxyExecRoleDefaultPolicyED41DFE7", + "Roles": [ + { + "Ref": "ProxyExecRole6947A5BE" + } + ] + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ExecRole/DefaultPolicy/Resource" + } + }, + "ProxyTaskRole5DB6A540": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ecs-tasks.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/TaskRole/Resource" + } + }, + "ProxyTaskRoleDefaultPolicy933321B8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "bedrock:InvokeModel", + "bedrock:InvokeModelWithResponseStream" + ], + "Effect": "Allow", + "Resource": "arn:aws:bedrock:*::foundation-model/*" + }, + { + "Action": [ + "ssm:DescribeParameters", + "ssm:GetParameters", + "ssm:GetParameter", + "ssm:GetParameterHistory" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/", + { + "Ref": "ApiKeyParam" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProxyTaskRoleDefaultPolicy933321B8", + "Roles": [ + { + "Ref": "ProxyTaskRole5DB6A540" + } + ] + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/TaskRole/DefaultPolicy/Resource" + } + }, + "ProxyBedrockCluster893F4261": { + "Type": "AWS::ECS::Cluster", + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/BedrockCluster/Resource" + } + }, + "ProxyBedrockClusterD9C31EFF": { + "Type": "AWS::ECS::ClusterCapacityProviderAssociations", + "Properties": { + "CapacityProviders": [ + "FARGATE", + "FARGATE_SPOT" + ], + "Cluster": { + "Ref": "ProxyBedrockCluster893F4261" + }, + "DefaultCapacityProviderStrategy": [] + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/BedrockCluster/BedrockCluster" + } + }, + "ProxyTaskDef9F2A72E5": { + "Type": "AWS::ECS::TaskDefinition", + "Properties": { + "ContainerDefinitions": [ + { + "Environment": [ + { + "Name": "API_KEY_PARAM_NAME", + "Value": { + "Ref": "ApiKeyParam" + } + }, + { + "Name": "DEBUG", + "Value": "false" + }, + { + "Name": "DEFAULT_MODEL", + "Value": { + "Fn::FindInMap": [ + "ProxyRegionTable03E5BEB3", + { + "Ref": "AWS::Region" + }, + "model" + ] + } + }, + { + "Name": "DEFAULT_EMBEDDING_MODEL", + "Value": "cohere.embed-multilingual-v3" + } + ], + "Essential": true, + "Image": { + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 4, + { + "Fn::Split": [ + ":", + { + "Fn::FindInMap": [ + "ProxyRegionTable03E5BEB3", + { + "Ref": "AWS::Region" + }, + "repoArn" + ] + } + ] + } + ] + }, + ".dkr.ecr.", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + ":", + { + "Fn::FindInMap": [ + "ProxyRegionTable03E5BEB3", + { + "Ref": "AWS::Region" + }, + "repoArn" + ] + } + ] + } + ] + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/bedrock-proxy-api-ecs:latest" + ] + ] + }, + "Name": "proxy-api", + "PortMappings": [ + { + "ContainerPort": 80, + "HostPort": 80, + "Protocol": "tcp" + } + ] + } + ], + "Cpu": "1024", + "ExecutionRoleArn": { + "Fn::GetAtt": [ + "ProxyExecRole6947A5BE", + "Arn" + ] + }, + "Family": "BedrockProxyFargateProxyTaskDefCD902792", + "Memory": "2048", + "NetworkMode": "awsvpc", + "RequiresCompatibilities": [ + "FARGATE" + ], + "RuntimePlatform": { + "CpuArchitecture": "ARM64", + "OperatingSystemFamily": "LINUX" + }, + "TaskRoleArn": { + "Fn::GetAtt": [ + "ProxyTaskRole5DB6A540", + "Arn" + ] + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/TaskDef/Resource" + } + }, + "ProxyApiService8651D882": { + "Type": "AWS::ECS::Service", + "Properties": { + "CapacityProviderStrategy": [ + { + "CapacityProvider": "FARGATE", + "Weight": 1 + } + ], + "Cluster": { + "Ref": "ProxyBedrockCluster893F4261" + }, + "DeploymentConfiguration": { + "Alarms": { + "AlarmNames": [], + "Enable": false, + "Rollback": false + }, + "MaximumPercent": 200, + "MinimumHealthyPercent": 50 + }, + "DesiredCount": 1, + "EnableECSManagedTags": false, + "HealthCheckGracePeriodSeconds": 60, + "LoadBalancers": [ + { + "ContainerName": "proxy-api", + "ContainerPort": 80, + "TargetGroupArn": { + "Ref": "ProxyALBListenerTargetsGroup187739FA" + } + } + ], + "NetworkConfiguration": { + "AwsvpcConfiguration": { + "AssignPublicIp": "ENABLED", + "SecurityGroups": [ + { + "Fn::GetAtt": [ + "ProxyApiServiceSecurityGroup51EBD9B8", + "GroupId" + ] + } + ], + "Subnets": [ + { + "Ref": "VPCPublicSubnet1SubnetB4246D30" + }, + { + "Ref": "VPCPublicSubnet2Subnet74179F39" + } + ] + } + }, + "TaskDefinition": { + "Ref": "ProxyTaskDef9F2A72E5" + } + }, + "DependsOn": [ + "ProxyALBListener933E9515", + "ProxyALBListenerTargetsGroup187739FA", + "ProxyTaskRoleDefaultPolicy933321B8", + "ProxyTaskRole5DB6A540" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ApiService/Service" + } + }, + "ProxyApiServiceSecurityGroup51EBD9B8": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "BedrockProxyFargate/Proxy/ApiService/SecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "DependsOn": [ + "ProxyTaskRoleDefaultPolicy933321B8", + "ProxyTaskRole5DB6A540" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ApiService/SecurityGroup/Resource" + } + }, + "ProxyApiServiceSecurityGroupfromBedrockProxyFargateProxyALBSecurityGroup9C12825880081F8FE2": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "Description": "Load balancer to target", + "FromPort": 80, + "GroupId": { + "Fn::GetAtt": [ + "ProxyApiServiceSecurityGroup51EBD9B8", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "ProxyALBSecurityGroup0D6CA3DA", + "GroupId" + ] + }, + "ToPort": 80 + }, + "DependsOn": [ + "ProxyTaskRoleDefaultPolicy933321B8", + "ProxyTaskRole5DB6A540" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ApiService/SecurityGroup/from BedrockProxyFargateProxyALBSecurityGroup9C128258:80" + } + }, + "ProxyALB87756780": { + "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + "Properties": { + "LoadBalancerAttributes": [ + { + "Key": "deletion_protection.enabled", + "Value": "false" + } + ], + "Scheme": "internet-facing", + "SecurityGroups": [ + { + "Fn::GetAtt": [ + "ProxyALBSecurityGroup0D6CA3DA", + "GroupId" + ] + } + ], + "Subnets": [ + { + "Ref": "VPCPublicSubnet1SubnetB4246D30" + }, + { + "Ref": "VPCPublicSubnet2Subnet74179F39" + } + ], + "Type": "application" + }, + "DependsOn": [ + "VPCPublicSubnet1DefaultRoute91CEF279", + "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "VPCPublicSubnet2DefaultRouteB7481BBA", + "VPCPublicSubnet2RouteTableAssociation5A808732" + ], + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ALB/Resource" + } + }, + "ProxyALBSecurityGroup0D6CA3DA": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "Automatically created Security Group for ELB BedrockProxyFargateProxyALB481672E7", + "SecurityGroupIngress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow from anyone on port 80", + "FromPort": 80, + "IpProtocol": "tcp", + "ToPort": 80 + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ALB/SecurityGroup/Resource" + } + }, + "ProxyALBSecurityGrouptoBedrockProxyFargateProxyApiServiceSecurityGroupDDA1C56480393D1E44": { + "Type": "AWS::EC2::SecurityGroupEgress", + "Properties": { + "Description": "Load balancer to target", + "DestinationSecurityGroupId": { + "Fn::GetAtt": [ + "ProxyApiServiceSecurityGroup51EBD9B8", + "GroupId" + ] + }, + "FromPort": 80, + "GroupId": { + "Fn::GetAtt": [ + "ProxyALBSecurityGroup0D6CA3DA", + "GroupId" + ] + }, + "IpProtocol": "tcp", + "ToPort": 80 + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ALB/SecurityGroup/to BedrockProxyFargateProxyApiServiceSecurityGroupDDA1C564:80" + } + }, + "ProxyALBListener933E9515": { + "Type": "AWS::ElasticLoadBalancingV2::Listener", + "Properties": { + "DefaultActions": [ + { + "TargetGroupArn": { + "Ref": "ProxyALBListenerTargetsGroup187739FA" + }, + "Type": "forward" + } + ], + "LoadBalancerArn": { + "Ref": "ProxyALB87756780" + }, + "Port": 80, + "Protocol": "HTTP" + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ALB/Listener/Resource" + } + }, + "ProxyALBListenerTargetsGroup187739FA": { + "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", + "Properties": { + "HealthCheckEnabled": true, + "HealthCheckPath": "/health", + "Port": 80, + "Protocol": "HTTP", + "TargetGroupAttributes": [ + { + "Key": "stickiness.enabled", + "Value": "false" + } + ], + "TargetType": "ip", + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/Proxy/ALB/Listener/TargetsGroup/Resource" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/31S0W7bMAz8lr4rWpJ+Qep1RYEOM5yirwMtMy4bhRJEKkFg+N8H22njrkCfeDyecORBa7u6vbXLGzjJwjX7hafadlsFtzfFjktIcEDFZOAkfzt0a9u9RDeMXsrClLn25La5ZtSBu6IqZMVnqD1e+Su3EQmOQCnwh3gAj6yYGPUBFE9wvthcuo0quNcDspotupxIzw8p5DgafEs8cptQ5At/P9K9ITjYrgrTrmMtgyc3+k+oN+iSrTAGIQ3pfAeCBp3YrvBZhnyKHX+FBURwpOcyhSM1mGZ3i/kFqYUhENn/xB0xvcfxPxNYgRjTjLu83WI6kpsinmBv0IMoOR+gqcEDO+L2uLbdJkZPbvR+CtDcjbNp20/9XEeiyBfNO57NnyG1qB+Zz9q+NxVKyGla7jfESNwO8E/WmKcvMhMUgZvxst5waNC+yY/jemlXK7u8eROiRcqsdEBbTfUfruxAGrYCAAA=" + }, + "Metadata": { + "aws:cdk:path": "BedrockProxyFargate/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + } + }, + "Mappings": { + "ProxyRegionTable03E5BEB3": { + "us-east-1": { + "repoArn": "arn:aws:ecr:us-east-1:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-3-sonnet-20240229-v1:0" + }, + "us-west-2": { + "repoArn": "arn:aws:ecr:us-west-2:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-3-sonnet-20240229-v1:0" + }, + "ap-southeast-1": { + "repoArn": "arn:aws:ecr:ap-southeast-1:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-v2" + }, + "ap-northeast-1": { + "repoArn": "arn:aws:ecr:ap-northeast-1:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-v2:1" + }, + "eu-central-1": { + "repoArn": "arn:aws:ecr:eu-central-1:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-v2:1" + }, + "eu-west-3": { + "repoArn": "arn:aws:ecr:eu-west-3:366590864501:repository/bedrock-proxy-api-ecs", + "model": "anthropic.claude-3-sonnet-20240229-v1:0" + } + } + }, + "Outputs": { + "APIBaseUrl": { + "Description": "Proxy API Base URL (OPENAI_API_BASE)", + "Value": { + "Fn::Join": [ + "", + [ + "http://", + { + "Fn::GetAtt": [ + "ProxyALB87756780", + "DNSName" + ] + }, + "/api/v1" + ] + ] + } + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + ] + } + } +} \ No newline at end of file