{ "version": 4, "terraform_version": "1.5.7", "serial": 26, "lineage": "7852dd8b-8193-0b86-c2b0-3f17456f405e", "outputs": { "api_gateway_stage_url": { "value": "https://yov87xk6nb.execute-api.ap-northeast-1.amazonaws.com/$default", "type": "string" }, "api_gateway_url": { "value": "https://yov87xk6nb.execute-api.ap-northeast-1.amazonaws.com", "type": "string" }, "discord_interactions_endpoint": { "value": "https://yov87xk6nb.execute-api.ap-northeast-1.amazonaws.com/interactions", "type": "string" }, "dynamodb_conversations_table_arn": { "value": "arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-conversations", "type": "string" }, "dynamodb_conversations_table_name": { "value": "ppal-conversations", "type": "string" }, "dynamodb_users_table_arn": { "value": "arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-users", "type": "string" }, "dynamodb_users_table_name": { "value": "ppal-users", "type": "string" }, "lambda_function_arn": { "value": "arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler", "type": "string" }, "lambda_function_name": { "value": "ppal-discord-handler", "type": "string" }, "lambda_function_url": { "value": "https://b6hld4ksms3np2le3anzdnxsc40cnqfg.lambda-url.ap-northeast-1.on.aws/", "type": "string" }, "lambda_role_arn": { "value": "arn:aws:iam::432500874071:role/ppal-lambda-role", "type": "string" }, "secrets_discord_bot_token_arn": { "value": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "type": "string", "sensitive": true }, "secrets_discord_public_key_arn": { "value": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "type": "string", "sensitive": true }, "secrets_github_token_arn": { "value": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "type": "string", "sensitive": true }, "secrets_openai_api_key_arn": { "value": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "type": "string", "sensitive": true } }, "resources": [ { "mode": "data", "type": "aws_ecr_image", "name": "lambda", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "sha256:7299feb08dc74019cf4b52bf70b79b2446f7e282ffc6a10042ee47a2760ba0b2", "image_digest": "sha256:7299feb08dc74019cf4b52bf70b79b2446f7e282ffc6a10042ee47a2760ba0b2", "image_pushed_at": 1769345537, "image_size_in_bytes": 59536975, "image_tag": "production", "image_tags": [ "production" ], "image_uri": "432500874071.dkr.ecr.ap-northeast-1.amazonaws.com/ppal-lambda@sha256:7299feb08dc74019cf4b52bf70b79b2446f7e282ffc6a10042ee47a2760ba0b2", "most_recent": null, "registry_id": "432500874071", "repository_name": "ppal-lambda" }, "sensitive_attributes": [] } ] }, { "mode": "data", "type": "aws_ecr_repository", "name": "lambda", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:ecr:ap-northeast-1:432500874071:repository/ppal-lambda", "encryption_configuration": [ { "encryption_type": "AES256", "kms_key": "" } ], "id": "ppal-lambda", "image_scanning_configuration": [ { "scan_on_push": true } ], "image_tag_mutability": "MUTABLE", "most_recent_image_tags": [ "production" ], "name": "ppal-lambda", "registry_id": "432500874071", "repository_url": "432500874071.dkr.ecr.ap-northeast-1.amazonaws.com/ppal-lambda", "tags": {} }, "sensitive_attributes": [] } ] }, { "mode": "managed", "type": "aws_apigatewayv2_api", "name": "discord_interactions", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "api_endpoint": "https://yov87xk6nb.execute-api.ap-northeast-1.amazonaws.com", "api_key_selection_expression": "$request.header.x-api-key", "arn": "arn:aws:apigateway:ap-northeast-1::/apis/yov87xk6nb", "body": null, "cors_configuration": [], "credentials_arn": null, "description": "HTTP API for PPAL Discord Bot Interactions Endpoint", "disable_execute_api_endpoint": false, "execution_arn": "arn:aws:execute-api:ap-northeast-1:432500874071:yov87xk6nb", "fail_on_warnings": null, "id": "yov87xk6nb", "ip_address_type": "ipv4", "name": "ppal-discord-interactions", "protocol_type": "HTTP", "route_key": null, "route_selection_expression": "$request.method $request.path", "tags": { "Name": "ppal-discord-interactions" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-discord-interactions", "Project": "ppal" }, "target": null, "version": "" }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_apigatewayv2_integration", "name": "lambda", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "api_id": "yov87xk6nb", "connection_id": "", "connection_type": "INTERNET", "content_handling_strategy": "", "credentials_arn": "", "description": "Lambda integration for Discord interactions", "id": "bp80qi0", "integration_method": "POST", "integration_response_selection_expression": "", "integration_subtype": "", "integration_type": "AWS_PROXY", "integration_uri": "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler/invocations", "passthrough_behavior": "", "payload_format_version": "2.0", "request_parameters": null, "request_templates": null, "response_parameters": [], "template_selection_expression": "", "timeout_milliseconds": 30000, "tls_config": [] }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_apigatewayv2_api.discord_interactions", "aws_cloudwatch_log_group.lambda_logs", "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role", "aws_iam_role_policy.lambda_dynamodb", "aws_iam_role_policy.lambda_secrets", "aws_iam_role_policy_attachment.lambda_basic", "aws_lambda_function.discord_handler", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key", "data.aws_ecr_image.lambda", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_apigatewayv2_route", "name": "discord_interactions", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "api_id": "yov87xk6nb", "api_key_required": false, "authorization_scopes": null, "authorization_type": "NONE", "authorizer_id": "", "id": "a2pcf84", "model_selection_expression": "", "operation_name": "", "request_models": null, "request_parameter": [], "route_key": "POST /interactions", "route_response_selection_expression": "", "target": "integrations/bp80qi0" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_apigatewayv2_api.discord_interactions", "aws_apigatewayv2_integration.lambda", "aws_cloudwatch_log_group.lambda_logs", "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role", "aws_iam_role_policy.lambda_dynamodb", "aws_iam_role_policy.lambda_secrets", "aws_iam_role_policy_attachment.lambda_basic", "aws_lambda_function.discord_handler", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key", "data.aws_ecr_image.lambda", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_apigatewayv2_stage", "name": "default", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "access_log_settings": [ { "destination_arn": "arn:aws:logs:ap-northeast-1:432500874071:log-group:/aws/apigateway/ppal-discord-interactions", "format": "{\"caller\":\"$context.identity.caller\",\"httpMethod\":\"$context.httpMethod\",\"integrationErrorMessage\":\"$context.integrationErrorMessage\",\"ip\":\"$context.identity.sourceIp\",\"protocol\":\"$context.protocol\",\"requestId\":\"$context.requestId\",\"requestTime\":\"$context.requestTime\",\"resourcePath\":\"$context.resourcePath\",\"responseLength\":\"$context.responseLength\",\"status\":\"$context.status\",\"user\":\"$context.identity.user\"}" } ], "api_id": "yov87xk6nb", "arn": "arn:aws:apigateway:ap-northeast-1::/apis/yov87xk6nb/stages/$default", "auto_deploy": true, "client_certificate_id": "", "default_route_settings": [ { "data_trace_enabled": false, "detailed_metrics_enabled": false, "logging_level": "", "throttling_burst_limit": 0, "throttling_rate_limit": 0 } ], "deployment_id": "", "description": "", "execution_arn": "arn:aws:execute-api:ap-northeast-1:432500874071:yov87xk6nb/$default", "id": "$default", "invoke_url": "https://yov87xk6nb.execute-api.ap-northeast-1.amazonaws.com/", "name": "$default", "route_settings": [], "stage_variables": null, "tags": { "Name": "ppal-default-stage" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-default-stage", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_apigatewayv2_api.discord_interactions", "aws_cloudwatch_log_group.api_gateway" ] } ] }, { "mode": "managed", "type": "aws_cloudwatch_log_group", "name": "api_gateway", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:logs:ap-northeast-1:432500874071:log-group:/aws/apigateway/ppal-discord-interactions", "id": "/aws/apigateway/ppal-discord-interactions", "kms_key_id": "", "log_group_class": "STANDARD", "name": "/aws/apigateway/ppal-discord-interactions", "name_prefix": "", "retention_in_days": 7, "skip_destroy": false, "tags": { "Name": "ppal-api-gateway-logs" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-api-gateway-logs", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_cloudwatch_log_group", "name": "lambda_logs", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:logs:ap-northeast-1:432500874071:log-group:/aws/lambda/ppal-discord-handler", "id": "/aws/lambda/ppal-discord-handler", "kms_key_id": "", "log_group_class": "STANDARD", "name": "/aws/lambda/ppal-discord-handler", "name_prefix": "", "retention_in_days": 7, "skip_destroy": false, "tags": { "Name": "ppal-lambda-logs" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-lambda-logs", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_dynamodb_table", "name": "conversations", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 1, "attributes": { "arn": "arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-conversations", "attribute": [ { "name": "conversation_id", "type": "S" }, { "name": "created_at", "type": "S" }, { "name": "user_id", "type": "S" } ], "billing_mode": "PAY_PER_REQUEST", "deletion_protection_enabled": false, "global_secondary_index": [ { "hash_key": "user_id", "name": "UserIndex", "non_key_attributes": [], "on_demand_throughput": [], "projection_type": "ALL", "range_key": "created_at", "read_capacity": 0, "write_capacity": 0 } ], "hash_key": "conversation_id", "id": "ppal-conversations", "import_table": [], "local_secondary_index": [], "name": "ppal-conversations", "on_demand_throughput": [], "point_in_time_recovery": [ { "enabled": true, "recovery_period_in_days": 35 } ], "range_key": null, "read_capacity": 0, "replica": [], "restore_date_time": null, "restore_source_name": null, "restore_source_table_arn": null, "restore_to_latest_time": null, "server_side_encryption": [ { "enabled": true, "kms_key_arn": "" } ], "stream_arn": "", "stream_enabled": false, "stream_label": "", "stream_view_type": "", "table_class": "STANDARD", "tags": { "Name": "ppal-conversations" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-conversations", "Project": "ppal" }, "timeouts": null, "ttl": [ { "attribute_name": "", "enabled": false } ], "write_capacity": 0 }, "sensitive_attributes": [], "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjozNjAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=" } ] }, { "mode": "managed", "type": "aws_dynamodb_table", "name": "users", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 1, "attributes": { "arn": "arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-users", "attribute": [ { "name": "guild_id", "type": "S" }, { "name": "user_id", "type": "S" } ], "billing_mode": "PAY_PER_REQUEST", "deletion_protection_enabled": false, "global_secondary_index": [ { "hash_key": "guild_id", "name": "GuildIndex", "non_key_attributes": [], "on_demand_throughput": [], "projection_type": "ALL", "range_key": "", "read_capacity": 0, "write_capacity": 0 } ], "hash_key": "user_id", "id": "ppal-users", "import_table": [], "local_secondary_index": [], "name": "ppal-users", "on_demand_throughput": [], "point_in_time_recovery": [ { "enabled": true, "recovery_period_in_days": 35 } ], "range_key": null, "read_capacity": 0, "replica": [], "restore_date_time": null, "restore_source_name": null, "restore_source_table_arn": null, "restore_to_latest_time": null, "server_side_encryption": [ { "enabled": true, "kms_key_arn": "" } ], "stream_arn": "", "stream_enabled": false, "stream_label": "", "stream_view_type": "", "table_class": "STANDARD", "tags": { "Name": "ppal-users" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-users", "Project": "ppal" }, "timeouts": null, "ttl": [ { "attribute_name": "", "enabled": false } ], "write_capacity": 0 }, "sensitive_attributes": [], "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjozNjAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=" } ] }, { "mode": "managed", "type": "aws_iam_role", "name": "lambda_role", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:iam::432500874071:role/ppal-lambda-role", "assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}", "create_date": "2026-01-25T12:57:48Z", "description": "", "force_detach_policies": false, "id": "ppal-lambda-role", "inline_policy": [], "managed_policy_arns": [], "max_session_duration": 3600, "name": "ppal-lambda-role", "name_prefix": "", "path": "/", "permissions_boundary": "", "tags": { "Name": "ppal-lambda-role" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-lambda-role", "Project": "ppal" }, "unique_id": "AROAWJMYPTNLXOHPZ5STS" }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_iam_role_policy", "name": "lambda_dynamodb", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "ppal-lambda-role:ppal-dynamodb-policy", "name": "ppal-dynamodb-policy", "name_prefix": "", "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":[\"dynamodb:GetItem\",\"dynamodb:PutItem\",\"dynamodb:UpdateItem\",\"dynamodb:DeleteItem\",\"dynamodb:Query\",\"dynamodb:Scan\",\"dynamodb:BatchGetItem\",\"dynamodb:BatchWriteItem\"],\"Effect\":\"Allow\",\"Resource\":[\"arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-users\",\"arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-conversations\",\"arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-users/index/*\",\"arn:aws:dynamodb:ap-northeast-1:432500874071:table/ppal-conversations/index/*\"]}]}", "role": "ppal-lambda-role" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role" ] } ] }, { "mode": "managed", "type": "aws_iam_role_policy", "name": "lambda_ecr", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "ppal-lambda-role:ppal-ecr-policy", "name": "ppal-ecr-policy", "name_prefix": "", "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":[\"ecr:GetDownloadUrlForLayer\",\"ecr:BatchGetImage\",\"ecr:BatchCheckLayerAvailability\"],\"Effect\":\"Allow\",\"Resource\":\"arn:aws:ecr:ap-northeast-1:432500874071:repository/ppal-lambda\"},{\"Action\":[\"ecr:GetAuthorizationToken\"],\"Effect\":\"Allow\",\"Resource\":\"*\"}]}", "role": "ppal-lambda-role" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_iam_role.lambda_role", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_iam_role_policy", "name": "lambda_logs", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "ppal-lambda-role:ppal-logs-policy", "name": "ppal-logs-policy", "name_prefix": "", "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":[\"logs:CreateLogGroup\",\"logs:CreateLogStream\",\"logs:PutLogEvents\"],\"Effect\":\"Allow\",\"Resource\":\"arn:aws:logs:ap-northeast-1:*:log-group:/aws/lambda/ppal*\"}]}", "role": "ppal-lambda-role" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_iam_role.lambda_role" ] } ] }, { "mode": "managed", "type": "aws_iam_role_policy", "name": "lambda_secrets", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "ppal-lambda-role:ppal-secrets-policy", "name": "ppal-secrets-policy", "name_prefix": "", "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":[\"secretsmanager:GetSecretValue\",\"secretsmanager:DescribeSecret\"],\"Effect\":\"Allow\",\"Resource\":[\"arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR\",\"arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ\",\"arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP\",\"arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U\"]}]}", "role": "ppal-lambda-role" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_iam_role.lambda_role", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key" ] } ] }, { "mode": "managed", "type": "aws_iam_role_policy_attachment", "name": "lambda_basic", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "ppal-lambda-role-20260125125749117600000009", "policy_arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", "role": "ppal-lambda-role" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_iam_role.lambda_role" ] } ] }, { "mode": "managed", "type": "aws_lambda_function", "name": "discord_handler", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "architectures": [ "x86_64" ], "arn": "arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler", "code_sha256": "7299feb08dc74019cf4b52bf70b79b2446f7e282ffc6a10042ee47a2760ba0b2", "code_signing_config_arn": "", "dead_letter_config": [], "description": "PPAL Discord Bot command handler", "environment": [ { "variables": { "CONVERSATIONS_TABLE_NAME": "ppal-conversations", "DISCORD_BOT_TOKEN_SECRET_ARN": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "DISCORD_PUBLIC_KEY_SECRET_ARN": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "ENVIRONMENT": "production", "GITHUB_TOKEN_SECRET_ARN": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "OPENAI_API_KEY_SECRET_ARN": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "USERS_TABLE_NAME": "ppal-users" } } ], "ephemeral_storage": [ { "size": 512 } ], "file_system_config": [], "filename": null, "function_name": "ppal-discord-handler", "handler": "", "id": "ppal-discord-handler", "image_config": [], "image_uri": "432500874071.dkr.ecr.ap-northeast-1.amazonaws.com/ppal-lambda@sha256:7299feb08dc74019cf4b52bf70b79b2446f7e282ffc6a10042ee47a2760ba0b2", "invoke_arn": "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler/invocations", "kms_key_arn": "", "last_modified": "2026-01-25T12:58:12.065+0000", "layers": null, "logging_config": [ { "application_log_level": "", "log_format": "Text", "log_group": "/aws/lambda/ppal-discord-handler", "system_log_level": "" } ], "memory_size": 256, "package_type": "Image", "publish": false, "qualified_arn": "arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler:$LATEST", "qualified_invoke_arn": "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler:$LATEST/invocations", "replace_security_groups_on_destroy": null, "replacement_security_group_ids": null, "reserved_concurrent_executions": -1, "role": "arn:aws:iam::432500874071:role/ppal-lambda-role", "runtime": "", "s3_bucket": null, "s3_key": null, "s3_object_version": null, "signing_job_arn": "", "signing_profile_version_arn": "", "skip_destroy": false, "snap_start": [], "source_code_hash": "", "source_code_size": 0, "tags": { "Name": "ppal-discord-handler" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-discord-handler", "Project": "ppal" }, "timeout": 30, "timeouts": null, "tracing_config": [ { "mode": "PassThrough" } ], "version": "$LATEST", "vpc_config": [] }, "sensitive_attributes": [], "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19", "dependencies": [ "aws_cloudwatch_log_group.lambda_logs", "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role", "aws_iam_role_policy.lambda_dynamodb", "aws_iam_role_policy.lambda_secrets", "aws_iam_role_policy_attachment.lambda_basic", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key", "data.aws_ecr_image.lambda", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_lambda_function_url", "name": "discord_handler", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "authorization_type": "NONE", "cors": [ { "allow_credentials": true, "allow_headers": [ "Content-Type", "X-Discord-Timestamp", "X-Signature-Ed25519", "X-Signature-Timestamp" ], "allow_methods": [ "POST" ], "allow_origins": [ "https://discord.com" ], "expose_headers": null, "max_age": 0 } ], "function_arn": "arn:aws:lambda:ap-northeast-1:432500874071:function:ppal-discord-handler", "function_name": "ppal-discord-handler", "function_url": "https://b6hld4ksms3np2le3anzdnxsc40cnqfg.lambda-url.ap-northeast-1.on.aws/", "id": "ppal-discord-handler", "invoke_mode": "RESPONSE_STREAM", "qualifier": "", "timeouts": null, "url_id": "b6hld4ksms3np2le3anzdnxsc40cnqfg" }, "sensitive_attributes": [], "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDB9fQ==", "dependencies": [ "aws_cloudwatch_log_group.lambda_logs", "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role", "aws_iam_role_policy.lambda_dynamodb", "aws_iam_role_policy.lambda_secrets", "aws_iam_role_policy_attachment.lambda_basic", "aws_lambda_function.discord_handler", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key", "data.aws_ecr_image.lambda", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_lambda_permission", "name": "apigateway", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "action": "lambda:InvokeFunction", "event_source_token": null, "function_name": "ppal-discord-handler", "function_url_auth_type": null, "id": "AllowAPIGatewayInvoke", "principal": "apigateway.amazonaws.com", "principal_org_id": null, "qualifier": "", "source_account": null, "source_arn": "arn:aws:execute-api:ap-northeast-1:432500874071:yov87xk6nb/*/*", "statement_id": "AllowAPIGatewayInvoke", "statement_id_prefix": "" }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_apigatewayv2_api.discord_interactions", "aws_cloudwatch_log_group.lambda_logs", "aws_dynamodb_table.conversations", "aws_dynamodb_table.users", "aws_iam_role.lambda_role", "aws_iam_role_policy.lambda_dynamodb", "aws_iam_role_policy.lambda_secrets", "aws_iam_role_policy_attachment.lambda_basic", "aws_lambda_function.discord_handler", "aws_secretsmanager_secret.discord_bot_token", "aws_secretsmanager_secret.discord_public_key", "aws_secretsmanager_secret.github_token", "aws_secretsmanager_secret.openai_api_key", "data.aws_ecr_image.lambda", "data.aws_ecr_repository.lambda" ] } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret", "name": "discord_bot_token", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "description": "Discord bot token for PPAL Discord Bot", "force_overwrite_replica_secret": false, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "kms_key_id": "", "name": "ppal/discord/bot-token", "name_prefix": "", "policy": "", "recovery_window_in_days": 7, "replica": [], "tags": { "Name": "ppal-discord-bot-token" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-discord-bot-token", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret", "name": "discord_public_key", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "description": "Discord public key for verifying interactions", "force_overwrite_replica_secret": false, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "kms_key_id": "", "name": "ppal/discord/public-key", "name_prefix": "", "policy": "", "recovery_window_in_days": 7, "replica": [], "tags": { "Name": "ppal-discord-public-key" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-discord-public-key", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret", "name": "github_token", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "description": "GitHub token for PPAL Discord Bot", "force_overwrite_replica_secret": false, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "kms_key_id": "", "name": "ppal/github/token", "name_prefix": "", "policy": "", "recovery_window_in_days": 7, "replica": [], "tags": { "Name": "ppal-github-token" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-github-token", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret", "name": "openai_api_key", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "description": "OpenAI API key for PPAL Discord Bot", "force_overwrite_replica_secret": false, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "kms_key_id": "", "name": "ppal/openai/api-key", "name_prefix": "", "policy": "", "recovery_window_in_days": 7, "replica": [], "tags": { "Name": "ppal-openai-api-key" }, "tags_all": { "Environment": "production", "ManagedBy": "Terraform", "Name": "ppal-openai-api-key", "Project": "ppal" } }, "sensitive_attributes": [], "private": "bnVsbA==" } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret_version", "name": "discord_bot_token", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "has_secret_string_wo": null, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR|terraform-20260125125747558000000005", "secret_binary": "", "secret_id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/bot-token-m5gWjR", "secret_string": "{\"token\":\"PLACEHOLDER_DISCORD_BOT_TOKEN\"}", "secret_string_wo": null, "secret_string_wo_version": null, "version_id": "terraform-20260125125747558000000005", "version_stages": [ "AWSCURRENT" ] }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_secretsmanager_secret.discord_bot_token" ] } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret_version", "name": "discord_public_key", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "has_secret_string_wo": null, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ|terraform-20260125125747570400000007", "secret_binary": "", "secret_id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/discord/public-key-V36DXQ", "secret_string": "{\"public_key\":\"PLACEHOLDER_DISCORD_PUBLIC_KEY\"}", "secret_string_wo": null, "secret_string_wo_version": null, "version_id": "terraform-20260125125747570400000007", "version_stages": [ "AWSCURRENT" ] }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_secretsmanager_secret.discord_public_key" ] } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret_version", "name": "github_token", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "has_secret_string_wo": null, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP|terraform-20260125125747584500000008", "secret_binary": "", "secret_id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/github/token-612RwP", "secret_string": "{\"token\":\"PLACEHOLDER_GITHUB_TOKEN\"}", "secret_string_wo": null, "secret_string_wo_version": null, "version_id": "terraform-20260125125747584500000008", "version_stages": [ "AWSCURRENT" ] }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_secretsmanager_secret.github_token" ] } ] }, { "mode": "managed", "type": "aws_secretsmanager_secret_version", "name": "openai_api_key", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "has_secret_string_wo": null, "id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U|terraform-20260125125747559200000006", "secret_binary": "", "secret_id": "arn:aws:secretsmanager:ap-northeast-1:432500874071:secret:ppal/openai/api-key-f7Cz3U", "secret_string": "{\"api_key\":\"PLACEHOLDER_OPENAI_API_KEY\"}", "secret_string_wo": null, "secret_string_wo_version": null, "version_id": "terraform-20260125125747559200000006", "version_stages": [ "AWSCURRENT" ] }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ "aws_secretsmanager_secret.openai_api_key" ] } ] } ], "check_results": null }