| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # ============================================================
- # API Gateway (HTTP API)
- # ============================================================
- resource "aws_apigatewayv2_api" "api" {
- name = "${local.prefix}-api"
- protocol_type = "HTTP"
- cors_configuration {
- allow_origins = ["*"]
- allow_methods = ["POST", "OPTIONS"]
- allow_headers = ["Content-Type", "X-Api-Key"]
- max_age = 86400
- }
- }
- resource "aws_apigatewayv2_stage" "default" {
- api_id = aws_apigatewayv2_api.api.id
- name = "$default"
- auto_deploy = true
- }
- resource "aws_apigatewayv2_integration" "submit" {
- api_id = aws_apigatewayv2_api.api.id
- integration_type = "AWS_PROXY"
- integration_uri = aws_lambda_function.submit.invoke_arn
- payload_format_version = "2.0"
- }
- resource "aws_apigatewayv2_route" "submit" {
- api_id = aws_apigatewayv2_api.api.id
- route_key = "POST /submit"
- target = "integrations/${aws_apigatewayv2_integration.submit.id}"
- }
- resource "aws_lambda_permission" "apigw" {
- statement_id = "AllowAPIGateway"
- action = "lambda:InvokeFunction"
- function_name = aws_lambda_function.submit.function_name
- principal = "apigateway.amazonaws.com"
- source_arn = "${aws_apigatewayv2_api.api.execution_arn}/*/*"
- }
- # ============================================================
- # Outputs
- # ============================================================
- output "api_endpoint" {
- value = aws_apigatewayv2_stage.default.invoke_url
- }
- output "s3_bucket" {
- value = aws_s3_bucket.media.id
- }
|