如何为AWS CDK搭配Elastic Beanstalk指定Node.js版本?
我完全懂你的困扰——CDK关于Elastic Beanstalk的文档确实太简略了,尤其是针对特定语言版本的配置细节。不过别担心,我们可以通过直接指定完整的平台ARN来锁定精确的Node.js 10.15.0版本,避开自动升级的坑。
第一步:获取对应Node.js 10.15.0的完整平台ARN
首先得拿到eu-central-1区域里,匹配Node.js 10.15.0的Elastic Beanstalk平台ARN,有两种简单方式:
AWS CLI方式:确保你的AWS CLI已配置eu-central-1区域,然后运行命令:
aws elasticbeanstalk list-platform-versions --filters "Type=PlatformName,Values=Node.js running on 64bit Amazon Linux" --region eu-central-1在输出的
PlatformSummaryList里,找到PlatformVersion为10.15.0的条目,复制对应的PlatformArn即可。控制台方式:登录AWS控制台进入Elastic Beanstalk的「Platforms」页面,找到「Node.js running on 64bit Amazon Linux」平台,展开版本列表,定位到10.15.0的版本,查看并复制它的ARN。
第二步:在CDK代码中指定精确平台ARN
拿到ARN后,直接在创建Elastic Beanstalk环境时,通过platformArn属性传入这个完整ARN,替代之前的简化ARN。
以下是TypeScript的示例代码(其他语言逻辑完全一致):
import * as cdk from 'aws-cdk-lib'; import * as elasticbeanstalk from 'aws-cdk-lib/aws-elasticbeanstalk'; import * as s3assets from 'aws-cdk-lib/aws-s3-assets'; export class NodeJsEbStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // 打包并上传你的Node.js应用代码 const appAsset = new s3assets.Asset(this, 'NodeJsAppCode', { path: './your-app-directory', // 替换为你的应用代码路径 }); // 创建Elastic Beanstalk应用实例 const ebApp = new elasticbeanstalk.Application(this, 'NodeJsApplication'); // 创建应用版本 const appVersion = new elasticbeanstalk.ApplicationVersion(this, 'NodeJsAppVersion', { application: ebApp, sourceBundle: elasticbeanstalk.SourceBundle.fromAsset(appAsset), }); // 创建环境并锁定精确平台版本 new elasticbeanstalk.Environment(this, 'NodeJsEnvironment', { application: ebApp, applicationVersion: appVersion, // 替换为你获取到的对应Node.js 10.15.0的完整ARN platformArn: 'arn:aws:elasticbeanstalk:eu-central-1:123456789012:platform/Node.js running on 64bit Amazon Linux/4.10.2/2.11.14', environmentName: 'NodeJs-10-15-0-Prod-Env', // 可按需添加实例类型、环境变量等其他配置 }); } }
为什么这种方式可靠?
当你使用简化ARN(比如arn:aws:elasticbeanstalk:eu-central-1::platform/Node.js running on 64bit Amazon Linux/4.10.2)时,Elastic Beanstalk会自动指向该平台分支下的最新可用版本。而指定包含账户ID和具体版本后缀的完整ARN,会强制CloudFormation/CDK使用你指定的精确版本,不会自动升级。
注意事项
- 确保ARN的区域是
eu-central-1,不同区域的平台ARN存在差异。 - 后续若需升级Node.js版本,只需替换对应的平台ARN即可。
内容的提问来源于stack exchange,提问作者kossmoboleat

