diff --git a/workers/ppal-aws/terraform/terraform.tfstate b/workers/ppal-aws/terraform/terraform.tfstate new file mode 100644 index 000000000..f5e440bcc --- /dev/null +++ b/workers/ppal-aws/terraform/terraform.tfstate @@ -0,0 +1,1202 @@ +{ + "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 +}