具有自定义域的 AWS SAM API
AWS SAM API with custom domain
我将 Jersey API 迁移到 Cloudformation(使用 AWS SAM)并且它在 amazonaws 域中正常工作...像 https://xxxxx.execute-api.us-east-1.amazonaws.com/Stage/endpoint
一样可访问
现在我需要能够使用我自己的域访问它,例如 https://api.mydomain.com/endpoint
。
我在证书管理器 (api.mydomain.com) 中配置了证书并将 CNAME 记录添加到我的 route53 托管区域。然后,我将这部分添加到我的 YML 文件中:
Api:
EndpointConfiguration: REGIONAL
Domain:
DomainName: api.mydomain.com
CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
这是我的 YML 部分:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Serverless Jersey API - com.mydomain::mydomain
Globals:
Function:
Environment:
Variables:
•••
Api:
EndpointConfiguration: REGIONAL
Domain:
DomainName: api.mydomain.com
CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
Resources:
MyServiceFunction:
Type: AWS::Serverless::Function
Properties:
Handler: com.mydomain.app.StreamLambdaHandler::handleRequest
Runtime: java8
CodeUri: .
MemorySize: 512
Policies: AWSLambdaBasicExecutionRole
Timeout: 30
Events:
ProxyResource:
Type: Api
Properties:
Path: /{proxy+}
Method: any
Policies:
•••
Outputs:
MyServiceApi:
Description: URL for application
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/endpoint'
Export:
Name: MyServiceApi
它只是不能与我的自定义域一起使用。无法访问请求的 URL。请帮助:(
好的,最后我通过这些步骤解决了问题
- 在 Certificate Manager 中创建一个证书,其中 url 需要:
api.mydomain.com
- 将创建的DomainName和CertificateArn添加到
yml 文件
- 转到 API 网关 -> 自定义域名 和 select
域。然后,从配置中复制 API 网关域名
- 转到Route53,并添加一个带有域的A记录
api.mydomain.com 值为 API 网关域名
我将 Jersey API 迁移到 Cloudformation(使用 AWS SAM)并且它在 amazonaws 域中正常工作...像 https://xxxxx.execute-api.us-east-1.amazonaws.com/Stage/endpoint
现在我需要能够使用我自己的域访问它,例如 https://api.mydomain.com/endpoint
。
我在证书管理器 (api.mydomain.com) 中配置了证书并将 CNAME 记录添加到我的 route53 托管区域。然后,我将这部分添加到我的 YML 文件中:
Api:
EndpointConfiguration: REGIONAL
Domain:
DomainName: api.mydomain.com
CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
这是我的 YML 部分:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Serverless Jersey API - com.mydomain::mydomain
Globals:
Function:
Environment:
Variables:
•••
Api:
EndpointConfiguration: REGIONAL
Domain:
DomainName: api.mydomain.com
CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
Resources:
MyServiceFunction:
Type: AWS::Serverless::Function
Properties:
Handler: com.mydomain.app.StreamLambdaHandler::handleRequest
Runtime: java8
CodeUri: .
MemorySize: 512
Policies: AWSLambdaBasicExecutionRole
Timeout: 30
Events:
ProxyResource:
Type: Api
Properties:
Path: /{proxy+}
Method: any
Policies:
•••
Outputs:
MyServiceApi:
Description: URL for application
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/endpoint'
Export:
Name: MyServiceApi
它只是不能与我的自定义域一起使用。无法访问请求的 URL。请帮助:(
好的,最后我通过这些步骤解决了问题
- 在 Certificate Manager 中创建一个证书,其中 url 需要: api.mydomain.com
- 将创建的DomainName和CertificateArn添加到 yml 文件
- 转到 API 网关 -> 自定义域名 和 select 域。然后,从配置中复制 API 网关域名
- 转到Route53,并添加一个带有域的A记录 api.mydomain.com 值为 API 网关域名