API Gateway Terraform CORS

이재호·2023년 4월 10일
1

API Gateway Terraform CORS

API Gateway를 사용할 때 CORS를 테라폼을 이용해 제어하는 방법은 다음과 같다.

Lambda 함수 응답에서 헤더 설정

resp, err := service.PostCommunity(&LambdaProperties)
	if err != nil {
		return events.APIGatewayProxyResponse{Body: err.Error(), StatusCode: 500,
			Headers: map[string]string{
				"Access-Control-Allow-Headers": "Content-Type",
				"Access-Control-Allow-Origin":  "*",
				"Access-Control-Allow-Methods": "OPTIONS,POST,GET",
			},
		}, nil
	} else {
		return events.APIGatewayProxyResponse{Body: string(resp), StatusCode: 200,
			Headers: map[string]string{
				"Access-Control-Allow-Headers": "Content-Type",
				"Access-Control-Allow-Origin":  "*",
				"Access-Control-Allow-Methods": "OPTIONS,POST,GET",
			},
		}, nil
	}

위와 같이 Access-Control-Allow-Headers Access-Control-Allow-Origin Access-Control-Allow-Methods 세가지 옵션을 응답헤더로 설정해준다.

Option 메소드 추가

두 번째로 해야할 것은 작성중인 리소스에 prefilght 요청을 허용해주기 위해서 Option 메소드를 추가해주는 작업을 해야한다. 관련 메소드를 생성해주는 모듈이 있어서 사용했다.

module "community_cors" {
  source  = "squidfunk/api-gateway-enable-cors/aws"
  version = "0.3.3"

  api_id          = aws_api_gateway_rest_api.api.id
  api_resource_id = aws_api_gateway_resource.community_root.id
}

위와 같이 api_idapi_resource_id 를 넣어주면 해당 리소스에 Option 메소드가 생성이 된다.

메소드 응답 리소스 설정

세 번째로 해야할 것은 작성중인 해당 메소드에 응답리소스를 만들어주는 것이다.

resource "aws_api_gateway_method_response" "post_community_response_200" {
  rest_api_id = aws_api_gateway_rest_api.api.id
  resource_id = aws_api_gateway_method.post_community.resource_id
  http_method = aws_api_gateway_method.post_community.http_method
  status_code = "200"
  response_parameters = {
    "method.response.header.Access-Control-Allow-Origin" = true
  }
  depends_on = [aws_api_gateway_method.post_community]
}

resource "aws_api_gateway_integration_response" "post_community_response_200" {
  rest_api_id = aws_api_gateway_rest_api.api.id
  resource_id = aws_api_gateway_method.post_community.resource_id
  http_method = aws_api_gateway_method.post_community.http_method
  status_code = "200"
  depends_on  = [aws_api_gateway_method.post_community]
}

위와 같이 aws_api_gateway_method_response 리소스에 response_parametersmethod.response.header.Access-Control-Allow-Origin 를 true로 설정해준다.

고찰

생각보다 신경쓸 것이 많은 작업이었다. 서버가 있을때는 서버에서 CORS옵션을 설정해주면 끝이었지만, 서버리스로 작업을 하니 연결된 리소스마다 CORS관련 옵션을 설정해주어야한다. 그래도 옵션을 설정할 수 있는 방법이 있기 때문에 다행이라고 생각한다.

profile
복세편살

0개의 댓글