You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Angular Universal自动创建Lambda并通过Terraform部署Angular应用到AWS Lambda

如何用Terraform替代CloudFormation部署Angular Universal到AWS Lambda

一、阻止Angular Universal自动创建CloudFormation资源

完全可以跳过Angular Universal的自动部署流程,只保留构建环节即可。默认的Angular Universal部署命令(如npm run deploy)会触发CloudFormation,你只需执行构建命令生成部署产物,不执行部署步骤:

  • 构建前端静态资源:ng build --prod
  • 构建Server-Side Rendering(SSR)服务端代码:ng run <你的项目名>:server:production

执行完成后,项目根目录会生成dist文件夹,包含browser(前端静态文件)和server(服务端SSR代码)两个子目录。

二、用Terraform创建Lambda资源并手动部署Angular应用

步骤1:编写Terraform配置创建Lambda

创建main.tf文件,示例配置如下:

# 配置AWS Provider
provider "aws" {
  region = "us-east-1" # 替换为你的AWS区域
}

# 创建Lambda执行角色
resource "aws_iam_role" "lambda_exec_role" {
  name = "angular-universal-lambda-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      }
    ]
  })
}

# 为角色添加基础Lambda执行权限
resource "aws_iam_role_policy_attachment" "lambda_basic_execution" {
  role       = aws_iam_role.lambda_exec_role.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}

# 创建Lambda函数
resource "aws_lambda_function" "angular_universal" {
  filename      = "angular-lambda-deploy.zip" # 你的部署包文件名
  function_name = "angular-universal-ssr"
  role          = aws_iam_role.lambda_exec_role.arn
  handler       = "server/main.handler" # SSR服务端代码入口,对应dist/server/main.js
  runtime       = "nodejs18.x" # 替换为与本地项目匹配的Node.js版本

  # 若部署包体积较大,可上传至S3后引用
  # s3_bucket = "your-deployment-bucket"
  # s3_key    = "angular-lambda-deploy.zip"

  environment {
    variables = {
      NODE_ENV = "production"
    }
  }
}

步骤2:打包Angular Universal部署包

进入dist目录,将静态资源和服务端代码打包为zip:

cd dist
zip -r ../angular-lambda-deploy.zip browser server

注:若项目依赖额外Node.js包,可将node_modules一并打包,或使用Lambda层管理依赖以减小包体积。

步骤3:部署Terraform资源并上传部署包

  1. 初始化Terraform:
    terraform init
    
  2. 预览执行计划:
    terraform plan
    
  3. 应用配置创建Lambda:
    terraform apply
    
  4. 手动更新Lambda代码(若Terraform配置未指定filename):
    aws lambda update-function-code --function-name angular-universal-ssr --zip-file fileb://angular-lambda-deploy.zip
    

额外说明

  • 静态资源优化:若browser目录体积较大,建议将其上传至S3并配置CloudFront分发,Lambda仅负责SSR渲染,可提升性能并降低成本。
  • 版本兼容性:确保Lambda的Node.js runtime版本与本地开发环境一致,避免兼容性问题。
  • 功能验证:部署完成后,可通过Lambda控制台的测试功能发送模拟API请求,验证SSR渲染是否正常。

内容的提问来源于stack exchange,提问作者Biju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:09:45