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

如何通过AWS CDK构建含API网关与Lambda的AWS Amplify后端

解决Amplify与CDK创建的Lambda/API Gateway关联问题

核心原因

你直接通过CDK创建的Lambda和API Gateway属于独立AWS资源,未纳入Amplify的后端管理体系,因此Amplify控制台不会自动识别展示这些资源,前端aws-amplify库也无法自动关联。要实现关联,需通过Amplify专用CloudFormation资源或CDK构造将资源绑定到Amplify App。

方案1:通过Amplify CloudFormation资源关联(适配现有CDK代码)

在现有代码基础上,添加Amplify后端环境、后端函数和后端API的CloudFormation资源,将已创建的Lambda和API Gateway绑定到Amplify App:

class AmplifyInfraStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # 创建Amplify App
        amplify_app = amplify.CfnApp(self, "MyApp", name='MyAppName')

        # 创建Lambda函数
        lambda_function = lambda_.Function(
            self, 
            'MyFunction', 
            code=lambda_.InlineCode(inline_code),
            handler='index.lambda_handler', 
            runtime=lambda_.Runtime.PYTHON_3_9
        )

        # 创建API Gateway
        api = apiGateway.LambdaRestApi(self, 'MyAPI', handler=lambda_function)

        # 创建Amplify后端环境(关联后端资源的基础)
        backend_env = amplify.CfnBackendEnvironment(self, "MyBackendEnv",
            app_id=amplify_app.attr_app_id,
            environment_name="prod",
            stack_name="AmplifyBackendProdStack"
        )

        # 将Lambda关联为Amplify后端函数,让控制台识别
        amplify_backend_function = amplify.CfnBackendFunction(self, "AmplifyMyFunction",
            app_id=amplify_app.attr_app_id,
            environment_name=backend_env.environment_name,
            function_name="MyFunction",
            lambda_function_config=amplify.CfnBackendFunction.LambdaFunctionConfigProperty(
                lambda_arn=lambda_function.function_arn,
                runtime="PYTHON_3_9"
            )
        )

        # 将API Gateway关联为Amplify后端API,让控制台识别
        amplify_backend_api = amplify.CfnBackendAPI(self, "AmplifyMyAPI",
            app_id=amplify_app.attr_app_id,
            environment_name=backend_env.environment_name,
            api_name="MyAPI",
            backend_api_config=amplify.CfnBackendAPI.BackendAPIConfigProperty(
                rest_api_config=amplify.CfnBackendAPI.RestAPIConfigProperty(
                    endpoint=api.url,
                    authorization_type="NONE"  # 根据需求调整认证类型,如API_KEY、AWS_IAM等
                )
            )
        )

关键说明

  • CfnBackendEnvironment:为Amplify App创建后端环境,是关联后端资源的基础载体
  • CfnBackendFunction:将已有Lambda的ARN绑定到Amplify后端体系,使控制台识别为Amplify托管函数
  • CfnBackendAPI:将API Gateway的URL和配置绑定到Amplify后端,控制台会展示该API条目

方案2:配置前端aws-amplify对接外部资源

若无需在Amplify控制台展示资源,仅需前端能调用API,可通过Amplify App环境变量注入API信息,再在前端手动配置:

1. 在CDK中为Amplify App添加环境变量

amplify_app = amplify.CfnApp(self, "MyApp", 
    name='MyAppName',
    environment_variables={
        "API_URL": api.url,
        "AWS_REGION": self.region
    }
)

2. 前端配置aws-amplify

在前端代码中手动导入API配置:

import { Amplify, API } from 'aws-amplify';

Amplify.configure({
  API: {
    endpoints: [
      {
        name: "MyAPI",
        endpoint: process.env.REACT_APP_API_URL, // 对应Amplify环境变量
        region: process.env.REACT_APP_AWS_REGION
      }
    ]
  }
});

// API调用示例
API.get("MyAPI", "/your-path").then(response => {
  console.log(response);
});

注意事项

  • 方案1需确保Lambda和API Gateway的权限配置正确,可通过CDK为Amplify执行角色添加对应资源的调用权限
  • 认证类型需根据实际场景调整,如使用AWS_IAM认证时,前端需配置IAM身份验证逻辑,确保用户具备API和Lambda的调用权限

内容的提问来源于stack exchange,提问作者Fin M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:55:37