## 事象
以下のように`Cors`を追加しても[[CORS]]のヘッダを返却してくれない。
```yaml:template.yaml
Resources:
Api:
Type: AWS::Serverless::Api
Properties:
Name: "rest-api"
StageName: dev
DefinitionBody:
Fn::Transform:
Name: AWS::Include
Parameters:
Location: ./openapi.yaml
Cors:
AllowOrigin: "'*'"
AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
AllowMethods: "'GET, OPTIONS'"
AllowCredentials: true
```
## 対策
[[AWS SAMのLambdaでCORS可能可能なレスポンスヘッダを返す]]必要がある。
また、[[単純リクエスト]]以外の場合は`OPTION`が必要。`template.yaml`に`OptionFunction`を追加する。`...`は任意の値。
```yaml:template.yaml
OptionsFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ...
Handler: ...
Runtime: ...
Events:
loginOptions:
Type: Api
Properties:
Path: /{cors+}
Method: OPTIONS
Auth:
Authorizer: NONE
```
## 参考
- [\[Feature Request\] CORS Support in start\-api · Issue \#323 · aws/aws\-sam\-cli](https://github.com/aws/aws-sam-cli/issues/323)
- 他の回避方法は紹介されているが、それ以外の方法では根本的に解決できない..
---
**💽Change log**
- #2021/11/04 `OPTION`リクエスト関連を追加
- #2021/10/27 作成