diff --git a/Makefile b/Makefile index ed31d23a..ee499111 100644 --- a/Makefile +++ b/Makefile @@ -154,6 +154,6 @@ dev_health_check: prod_health_check: curl -f https://core.acm.illinois.edu/api/v1/healthz && curl -f https://core.acm.illinois.edu -lock_terraform: init_terraform +lock_terraform: terraform -chdir=terraform/envs/qa providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64 terraform -chdir=terraform/envs/prod providers lock -platform=windows_amd64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64 -platform=linux_arm64 diff --git a/cloudformation/main.yml b/cloudformation/main.yml index cc688642..be5b593c 100644 --- a/cloudformation/main.yml +++ b/cloudformation/main.yml @@ -65,15 +65,6 @@ Mappings: - subnet-0cbe89f6ab2665610 Resources: - AppLambdaWarmer: - Type: AWS::Serverless::Application - DependsOn: - - AppApiLambdaFunction - Properties: - Location: ./warmer.yml - Parameters: - FunctionToWarm: !Sub ${ApplicationPrefix}-lambda - AppSecurityRoles: Type: AWS::Serverless::Application Properties: diff --git a/cloudformation/warmer.yml b/cloudformation/warmer.yml deleted file mode 100644 index eae8e638..00000000 --- a/cloudformation/warmer.yml +++ /dev/null @@ -1,95 +0,0 @@ -AWSTemplateFormatVersion: 2010-09-09 -Description: Lambda function warmer -Transform: AWS::Serverless-2016-10-31 - -Parameters: - LambdaFunctionNameBase: - Type: String - AllowedPattern: ^[a-zA-Z0-9]+[a-zA-Z0-9-]+[a-zA-Z0-9]+$ - Default: infra-lambda-warmer - FunctionToWarm: - Type: String - AllowedPattern: ^[a-zA-Z0-9]+[a-zA-Z0-9-]+[a-zA-Z0-9]+$ - NumInstances: - Type: Number - Default: 3 - -Resources: - WarmerLambdaLogGroup: - Type: AWS::Logs::LogGroup - Properties: - LogGroupName: !Sub /aws/lambda/${LambdaFunctionNameBase}-${FunctionToWarm} - RetentionInDays: 7 - - WarmerLambdaIAMRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Version: "2012-10-17" - Statement: - - Action: - - sts:AssumeRole - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Policies: - - PolicyName: lambda-logging - PolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: Allow - Action: - - "logs:CreateLogGroup" - - "logs:CreateLogStream" - - "logs:PutLogEvents" - Resource: - - Fn::Sub: arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${LambdaFunctionNameBase}-${FunctionToWarm}:* - - PolicyName: lambda-invoke - PolicyDocument: - Version: "2012-10-17" - Statement: - - Action: - - lambda:InvokeFunction - Effect: Allow - Resource: - - Fn::Sub: "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionToWarm}" - - WarmerLambdaFunction: - Type: AWS::Serverless::Function - DependsOn: - - WarmerLambdaLogGroup - Properties: - Architectures: [arm64] - CodeUri: ../dist/warmer - AutoPublishAlias: live - Runtime: nodejs22.x - Description: !Sub "Lambda warmer for function ${FunctionToWarm}" - FunctionName: !Sub "${LambdaFunctionNameBase}-${FunctionToWarm}" - Handler: lambda.handler - MemorySize: 256 - Role: !GetAtt WarmerLambdaIAMRole.Arn - Timeout: 15 - Environment: - Variables: - LAMBDA_NAME: !Ref FunctionToWarm - NUM_INSTANCES: !Ref NumInstances - - WarmerSchedule: - Type: AWS::Events::Rule - Properties: - Description: !Sub "Schedule to run warmer for ${FunctionToWarm}" - ScheduleExpression: "rate(4 minutes)" - State: "ENABLED" - Targets: - - Id: "WarmerLambdaTarget" - Arn: !GetAtt WarmerLambdaFunction.Arn - Input: "{}" - - WarmerLambdaPermission: - Type: AWS::Lambda::Permission - Properties: - FunctionName: !GetAtt WarmerLambdaFunction.Arn - Action: "lambda:InvokeFunction" - Principal: "events.amazonaws.com" - SourceArn: !GetAtt WarmerSchedule.Arn diff --git a/terraform/envs/prod/.terraform.lock.hcl b/terraform/envs/prod/.terraform.lock.hcl index 3e2c3752..fe57a81c 100644 --- a/terraform/envs/prod/.terraform.lock.hcl +++ b/terraform/envs/prod/.terraform.lock.hcl @@ -1,6 +1,29 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. +provider "registry.terraform.io/hashicorp/archive" { + version = "2.7.1" + hashes = [ + "h1:62VrkalDPMKB9zerCBS4iKTbvxejwnAWn/XXYZZQWD4=", + "h1:A7EnRBVm4h9ryO9LwxYnKr4fy7ExPMwD5a1DsY7m1Y0=", + "h1:MwZ8uhTOmj3W8wiMeitCnzuf+897qka4/NBIAWFrm+k=", + "h1:RzToQiFwVaxcV0QmgbyaKgNOhqc6oLKiFyZTrQSGcog=", + "h1:Tr6LvLbm30zX4BRNPHhXo8SnOP0vg5UKAeunRNfnas8=", + "zh:19881bb356a4a656a865f48aee70c0b8a03c35951b7799b6113883f67f196e8e", + "zh:2fcfbf6318dd514863268b09bbe19bfc958339c636bcbcc3664b45f2b8bf5cc6", + "zh:3323ab9a504ce0a115c28e64d0739369fe85151291a2ce480d51ccbb0c381ac5", + "zh:362674746fb3da3ab9bd4e70c75a3cdd9801a6cf258991102e2c46669cf68e19", + "zh:7140a46d748fdd12212161445c46bbbf30a3f4586c6ac97dd497f0c2565fe949", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:875e6ce78b10f73b1efc849bfcc7af3a28c83a52f878f503bb22776f71d79521", + "zh:b872c6ed24e38428d817ebfb214da69ea7eefc2c38e5a774db2ccd58e54d3a22", + "zh:cd6a44f731c1633ae5d37662af86e7b01ae4c96eb8b04144255824c3f350392d", + "zh:e0600f5e8da12710b0c52d6df0ba147a5486427c1a2cc78f31eea37a47ee1b07", + "zh:f21b2e2563bbb1e44e73557bcd6cdbc1ceb369d471049c40eb56cb84b6317a60", + "zh:f752829eba1cc04a479cf7ae7271526b402e206d5bcf1fcce9f535de5ff9e4e6", + ] +} + provider "registry.terraform.io/hashicorp/aws" { version = "5.100.0" constraints = "~> 5.92" diff --git a/terraform/envs/prod/main.tf b/terraform/envs/prod/main.tf index 6f5c608b..f33bce93 100644 --- a/terraform/envs/prod/main.tf +++ b/terraform/envs/prod/main.tf @@ -77,3 +77,8 @@ resource "aws_dynamodb_table" "app_audit_log" { enabled = true } } + +module "lambda_warmer" { + source = "github.com/acm-uiuc/terraform-modules/lambda-warmer?ref=v0.1.1" + function_to_warm = "infra-core-api-lambda" +} diff --git a/terraform/envs/qa/.terraform.lock.hcl b/terraform/envs/qa/.terraform.lock.hcl index 3e2c3752..fe57a81c 100644 --- a/terraform/envs/qa/.terraform.lock.hcl +++ b/terraform/envs/qa/.terraform.lock.hcl @@ -1,6 +1,29 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. +provider "registry.terraform.io/hashicorp/archive" { + version = "2.7.1" + hashes = [ + "h1:62VrkalDPMKB9zerCBS4iKTbvxejwnAWn/XXYZZQWD4=", + "h1:A7EnRBVm4h9ryO9LwxYnKr4fy7ExPMwD5a1DsY7m1Y0=", + "h1:MwZ8uhTOmj3W8wiMeitCnzuf+897qka4/NBIAWFrm+k=", + "h1:RzToQiFwVaxcV0QmgbyaKgNOhqc6oLKiFyZTrQSGcog=", + "h1:Tr6LvLbm30zX4BRNPHhXo8SnOP0vg5UKAeunRNfnas8=", + "zh:19881bb356a4a656a865f48aee70c0b8a03c35951b7799b6113883f67f196e8e", + "zh:2fcfbf6318dd514863268b09bbe19bfc958339c636bcbcc3664b45f2b8bf5cc6", + "zh:3323ab9a504ce0a115c28e64d0739369fe85151291a2ce480d51ccbb0c381ac5", + "zh:362674746fb3da3ab9bd4e70c75a3cdd9801a6cf258991102e2c46669cf68e19", + "zh:7140a46d748fdd12212161445c46bbbf30a3f4586c6ac97dd497f0c2565fe949", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:875e6ce78b10f73b1efc849bfcc7af3a28c83a52f878f503bb22776f71d79521", + "zh:b872c6ed24e38428d817ebfb214da69ea7eefc2c38e5a774db2ccd58e54d3a22", + "zh:cd6a44f731c1633ae5d37662af86e7b01ae4c96eb8b04144255824c3f350392d", + "zh:e0600f5e8da12710b0c52d6df0ba147a5486427c1a2cc78f31eea37a47ee1b07", + "zh:f21b2e2563bbb1e44e73557bcd6cdbc1ceb369d471049c40eb56cb84b6317a60", + "zh:f752829eba1cc04a479cf7ae7271526b402e206d5bcf1fcce9f535de5ff9e4e6", + ] +} + provider "registry.terraform.io/hashicorp/aws" { version = "5.100.0" constraints = "~> 5.92" diff --git a/terraform/envs/qa/main.tf b/terraform/envs/qa/main.tf index eb920b6b..1b4e4072 100644 --- a/terraform/envs/qa/main.tf +++ b/terraform/envs/qa/main.tf @@ -16,6 +16,7 @@ terraform { } } + provider "aws" { region = "us-east-1" default_tags { @@ -64,3 +65,8 @@ resource "aws_dynamodb_table" "app_audit_log" { enabled = true } } + +module "lambda_warmer" { + source = "github.com/acm-uiuc/terraform-modules/lambda-warmer?ref=v0.1.1" + function_to_warm = "infra-core-api-lambda" +}