AWS API网关,与CDK的默认基本映射



我正在使用AWS CDK设置环境,但我在API网关和自定义域的基本映射方面遇到麻烦。

我得到了一个API,应该有两个阶段:"内部"one_answers";external"。每当我创建一个新的RestApi并指定domainName作为构造函数的道具时,或者之后使用addDomainName方法。这将总是创建一个默认的Base Mapping,这是我不想要的。我想添加我自己的映射,像这样:

apiGateway.domainName.addBasePathMapping(apiGateway, { basePath: 'internal', stage: internalStage });
apiGateway.domainName.addBasePathMapping(apiGateway, { basePath: 'external', stage: externalStage });

如果我这样做的问题是,默认映射已经被创建,因为它将创建一个空的basePath,我不能添加任何其他映射到相同的API。

我已经检查了源代码,似乎没有一种方法来传递映射,当你添加一个域,他们总是自动创建。

是否有办法改变默认映射,或者以另一种方式解决这个问题?举个好例子:apiGateway.domainName.basePathMappings[0] = { ... }

我现在的代码:

const apiGateway = new apigw.RestApi(this, 'RestApi', {
deploy: false,
domainName: {
domainName: 'sub.example.com',
certificate,
endpointType: apigw.EndpointType.REGIONAL,
securityPolicy: apigw.SecurityPolicy.TLS_1_2,
},
});
const deployment = new apigw.Deployment(this, 'Deployment', { api: apiGateway });
const internalStage = new apigw.Stage(this, 'InternalStage', {
stageName: 'internal',
deployment,
});
apiGateway.domainName.addBasePathMapping(apiGateway, { basePath: 'internal', stage: internalStage });
const externalStage = new apigw.Stage(this, 'ExternalStage', {
stageName: 'external',
deployment,
});
apiGateway.domainName.addBasePathMapping(apiGateway, { basePath: 'external', stage: externalStage });

当我运行Synth时,生成的语法将显示3个不同的AWS:: apiggateway::BasePathMapping。一个用于内部,一个用于外部(basePath设置正确),一个是默认创建的一个,没有basePath(我想要删除)。

当我们通过传递给RestApi或通过调用.addDomainName添加domainName时,cdk正在添加一个基本路径映射/

我能够通过使用cfn资源进行域名和基本路径映射来解决问题。

const cfnInternalDomain = new apigw.CfnDomainName(this, "internal-domain", {
domainName: internalDomainName,      
regionalCertificateArn: myCert.certificateArn,
endpointConfiguration: { types: [apigw.EndpointType.REGIONAL] },
});
const intBasePath = new apigw.CfnBasePathMapping(
this,
"internal-base-path",
{
basePath: "intPath",
domainName: cfnInternalDomain.ref,
restApiId: myRestApi.restApiId,
stage: internalStage.stageName,
}
);

这是完整的代码。

const myRestApi = new apigw.RestApi(this, "rest-api", {
deploy: false,
});
myRestApi.root.addMethod("ANY", new apigw.MockIntegration());
const deployment = new apigw.Deployment(this, "api-deployment", {
api: myRestApi,
retainDeployments: false,
});
const internalStage = new apigw.Stage(this, "internal-stage", {
stageName: "internal",
deployment,
});
const internalDomainName = "internal.mytest.domain.com";
const cfnInternalDomain = new apigw.CfnDomainName(this, "internal-domain", {
domainName: internalDomainName,      
regionalCertificateArn: myCert.certificateArn,
endpointConfiguration: { types: [apigw.EndpointType.REGIONAL] },
});
const intBasePath = new apigw.CfnBasePathMapping(
this,
"internal-base-path",
{
basePath: "intPath",
domainName: cfnInternalDomain.ref,
restApiId: myRestApi.restApiId,
stage: internalStage.stageName,
}
);

相关内容

  • 没有找到相关文章

最新更新