動作する API ゲートウェイを作成しました。https://example-api.amazonaws.com/Prod/some/endpoint
APIによってエンドポイントを手動でトリガーすると、望ましい結果が得られます。また、パスに/api/*
.
クラウドフロント ディストリビューションを介してエンドポイントにアクセスするhttps://xxxxxxx.cloudfront.net/some/endpoint
と、404 エラーが発生します。Cloudfront は /prod をパスに正しく追加します。これは、少なくとも何かが機能していることを示しています。
より具体的には、次のようになります。
404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
An Error Occurred While Attempting to Retrieve a Custom Error Document
正しくリダイレクトされるため、クラウドフロント ディストリビューションが機能していることがわかります。私はしばらくこれに苦労してきました。このエラー コードは役に立たないほどあいまいですか?
さらに掘り下げた後、クラウドフロントディストリビューションが私のs3でキーを持つオブジェクトを探しているようです。そのため、何らかの理由でPathPattern: /api/v1/*
が にリダイレクトされませんAPIOrigin
。
Cloudformation テンプレートを以下に添付しました。
Resources:
WebsiteCloudfront:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Comment: Cloudfront Distribution pointing to S3 bucket and API Gateway.
Origins:
- Id: S3Origin
DomainName: bucket-for-static-files.amazonaws.com
CustomOriginConfig:
HTTPPort: 80
HTTPSPort: 443
OriginProtocolPolicy: http-only
- Id: APIOrigin
DomainName: example.api.endpoint.amazonaws.com
OriginPath: /prod
CustomOriginConfig:
# HTTPPort: 80
HTTPSPort: 443
OriginProtocolPolicy: https-only
OriginSSLProtocols:
- TLSv1.2
Enabled: true
HttpVersion: 'http2'
DefaultRootObject: index.html
Aliases:
- !Ref DomainName
DefaultCacheBehavior:
AllowedMethods:
- DELETE
- GET
- HEAD
- OPTIONS
- PATCH
- POST
- PUT
Compress: true
# Logging: Logging
TargetOriginId: S3Origin
ForwardedValues:
QueryString: true
Cookies:
Forward: none
ViewerProtocolPolicy: redirect-to-https
CacheBehaviors:
- TargetOriginId: APIOrigin
ViewerProtocolPolicy: https-only
PathPattern: /api/v1/*
ForwardedValues:
QueryString: true
Headers:
- Host
AllowedMethods:
- DELETE
- GET
- HEAD
- OPTIONS
- PATCH
- POST
- PUT
PriceClass: PriceClass_All
ViewerCertificate:
AcmCertificateArn: arn:aws:acm:SOME_HARD_CODED_ARN
SslSupportMethod: sni-only
MinimumProtocolVersion: TLSv1.2_2019
ただし、クラウドフロントディストリビューションが/prod
. pathPattern が API Gateway に正しくルーティングされているかのように見せかけます。
編集:現在、API ゲートウェイのヘッダーが欠落している可能性があると考えています。