TagSpecifications with requestSpotInstances UnexpectedParameter with aws-sdk

TagSpecifications with requestSpotInstances UnexpectedParameter with aws-sdk

我正在尝试向我的 AWS Spot 请求添加标签。但它已经返回我{ UnexpectedParameter: Unexpected key 'TagSpecifications' found in params.LaunchSpecification。 我已关注 this documentation,我已尝试将此代码移出 LaunchSpecification,但错误仍然存​​在。

  const params = {
    InstanceCount: 1,
    LaunchSpecification: {
      ImageId: config.aws.instanceAMI,
      KeyName: 'backoffice',
      InstanceType: config.aws.instanceType,
      SecurityGroupIds: [config.aws.instanceSecurityGroupId],
      TagSpecifications: [{
        ResourceType: 'instance',
        Tags: [{
          Key: 'Type',
          Value: 'Mongo-Dump',
        }],
      }],
      BlockDeviceMappings: [{
        DeviceName: '/dev/xvda',
        Ebs: {
          DeleteOnTermination: true,
          SnapshotId: 'snap-06e838ce2a80337a4',
          VolumeSize: 50,
          VolumeType: 'gp2',
          Encrypted: false,
        },
      }],
      IamInstanceProfile: {
        Name: config.aws.instanceProfileIAMName,
      },
      Placement: {
        AvailabilityZone: `${config.aws.region}a`,
      },
    },
    SpotPrice: config.aws.instancePrice,
    Type: 'one-time',
  };

  return ec2.requestSpotInstances(params).promise();

有些事情让我认为问题出在文档中或 Javascript 本身的 aws-sdk 中。我的选择用尽了。

错误信息正确。根据 documentationRequestSpotLaunchSpecification 对象没有名为 TagSpecifications.

的属性

但是,您可以在创建 Spot 实例请求后对其进行标记。

ec2.requestSpotInstances(params) returns SpotInstanceRequest 个对象的数组,每个对象包含一个 spotInstanceRequestId(例如 sir-012345678)。使用具有这些 Spot 实例请求 ID 的 CreateTags API 来添加标签。

const createTagParams = {
  Resources: [ 'sir-12345678' ], 
  Tags: [
    {
      Key: 'Type', 
      Value: 'Mongo-Dump'
    }
  ]
};
ec2.createTags(createTagParams, function(err, data) {
  // ...
});