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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:20:24