예제 #1
0
        private string generateSwaggerSpec(string dnsName, string userPoolId, VpcLink vpcLink)
        {
            string currentPath    = Directory.GetCurrentDirectory();
            var    schemaFilePath = Path.Combine(currentPath, "../api-swagger.json");
            var    apiSchema      = File.ReadAllText(schemaFilePath);
            var    schema         = Regex.Replace(apiSchema, @"\REPLACE_ME_REGION\b", Amazon.CDK.Aws.REGION);

            schema = Regex.Replace(schema, @"\REPLACE_ME_ACCOUNT_ID\b", Amazon.CDK.Aws.ACCOUNT_ID);
            schema = Regex.Replace(schema, @"\REPLACE_ME_COGNITO_USER_POOL_ID\b", userPoolId);
            schema = Regex.Replace(schema, @"\REPLACE_ME_VPC_LINK_ID\b", vpcLink.VpcLinkId);
            schema = Regex.Replace(schema, @"\REPLACE_ME_NLB_DNS\b", dnsName);
            return(schema);
        }
예제 #2
0
        public APIGatewayStack(Construct parent, string id, APIGatewayStackProps props) : base(parent, id, props)
        {
            var nlb = NetworkLoadBalancer.FromNetworkLoadBalancerAttributes(this, "NLB",
                                                                            new NetworkLoadBalancerAttributes
            {
                LoadBalancerArn = props.loadBalancerArn
            });
            var vpcLink = new VpcLink(this, "VPCLink", new VpcLinkProps
            {
                Description = "VPC Link for our  REST API",
                VpcLinkName = "MysfitsApiVpcLink",
                Targets     = new INetworkLoadBalancer[]
                {
                    nlb
                }
            });

            var schema     = this.generateSwaggerSpec(props.loadBalancerDnsName, props.userPoolId, vpcLink);
            var jsonSchema = JObject.Parse(schema);
            var api        = new CfnRestApi(this, "Schema", new CfnRestApiProps
            {
                Name                  = "MysfitsApi",
                Body                  = jsonSchema,
                FailOnWarnings        = true,
                EndpointConfiguration = new EndpointConfigurationProperty
                {
                    Types = new[]
                    {
                        "REGIONAL"
                    }
                }
            });

            new CfnDeployment(this, "Prod", new CfnDeploymentProps
            {
                RestApiId = api.Ref,
                StageName = "prod"
            });
            new CfnOutput(this, "APIID", new CfnOutputProps
            {
                Value       = api.Ref,
                Description = "API Gateway ID"
            });
            this.apiId = api.Ref;
        }