如何用TypeScript在AWS CDK应用中创建S3 Glacier存储库?构建报错求助
在AWS CDK TypeScript应用中创建S3 Glacier存储库的解决方案
核心结论
可以在AWS CDK TypeScript应用中创建S3 Glacier存储库,推荐使用CDK官方提供的构造类,而非直接调用AWS SDK v3——后者会因版本兼容问题导致构建失败。
方法一:使用CDK官方构造(推荐)
AWS CDK的aws-cdk-lib内置了Glacier相关的CloudFormation构造类CfnVault,直接通过它就能定义Glacier存储库,无需依赖额外SDK包,且能被CloudFormation完整跟踪基础设施状态。
示例代码:
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { CfnVault } from 'aws-cdk-lib/aws-glacier'; export class MyGlacierStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // 创建Glacier存储库 new CfnVault(this, 'MyGlacierVault', { vaultName: 'my-glacier-vault', // 可选:设置访问策略、通知配置等 accessPolicy: JSON.stringify({ Version: '2012-10-17', Statement: [ { Effect: 'Allow', Principal: '*', Action: 'glacier:ListVaults', Resource: `arn:aws:glacier:${this.region}:${this.account}:vaults/my-glacier-vault` } ] }) }); } }
方法二:解决AWS SDK v3的构建失败问题(不推荐)
如果一定要使用@aws-sdk/client-glacier,你的构建失败根源是版本不兼容:
- 你的TypeScript版本是
~3.9.7,而AWS SDK v3要求TypeScript版本至少为4.7 @types/node版本为10.17.27,过于老旧,无法匹配SDK v3的类型定义
需要修改package.json中的依赖版本:
{ "devDependencies": { "@types/node": "^16.18.0", "typescript": "~4.9.5" } }
修改后执行npm install重新安装依赖,再尝试实例化GlacierClient。
注意:不推荐在CDK中直接调用SDK,因为CDK是声明式的基础设施即代码工具,SDK调用属于命令式运行时操作,会导致基础设施状态无法被CloudFormation跟踪,增加运维复杂度。
内容的提问来源于stack exchange,提问作者Joseph Katzman
相关产品推荐
相关产品推荐

