docomo Developer supportの@akatsukahaです
API GatewayのリソースをCloudFormationで作成後に,BinaryMediaTypesを追加して更新すると何故か失敗するのでその記録を残します.
Templateを作成
template_v1.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestApi:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Description: 'Test API'
Name: 'Test API'
FailOnWarnings: true
EndpointConfiguration:
Types:
- EDGE
TestApiResource:
Type: 'AWS::ApiGateway::Resource'
Properties:
RestApiId: !Ref TestApi
ParentId: !GetAtt TestApi.RootResourceId
PathPart: 'test'
Stackを作成する.
無事APIが作成されている.
続いて,BinaryMediaTypesをTemplateに追記してStackを更新してみる.
template_v2.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestApi:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Description: 'Test API'
Name: 'Test API'
FailOnWarnings: true
BinaryMediaTypes:
- image/jpeg
EndpointConfiguration:
Types:
- EDGE
TestApiResource:
Type: 'AWS::ApiGateway::Resource'
Properties:
RestApiId: !Ref TestApi
ParentId: !GetAtt TestApi.RootResourceId
PathPart: 'test'
何故か失敗する.
ログ見ると/binaryMediaTypes/image/jpeg
のパスのリソースを変更しようとしている?
Invalid patch path /binaryMediaTypes/image/jpeg (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID:
もちろん反映されていない
Stackを削除して,BinaryMediaTypesを追加した下記のTemplateを利用してStackをゼロから作成してみる.
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestApi:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Description: 'Test API'
Name: 'Test API'
FailOnWarnings: true
BinaryMediaTypes:
- image/jpeg
EndpointConfiguration:
Types:
- EDGE
TestApiResource:
Type: 'AWS::ApiGateway::Resource'
Properties:
RestApiId: !Ref TestApi
ParentId: !GetAtt TestApi.RootResourceId
PathPart: 'test'
サクッと作れた.
なぜかBinaryMediaTypesを指定すると更新ができない模様