从 EC2 实例 ID 创建 AMI 时,command.resolveMiddleware 不是 AWS SDK 的函数,想知道为什么?

2024-05-11

我当时正在开发 AWS SDK 版本 3,并尝试以编程方式从 EC2 实例创建 AMI。以下是我使用的脚本:

// Imports
// TODO: Import the ec2 client

const {
  EC2Client,
  CreateImageCommand
} = require('@aws-sdk/client-ec2')

function sendCommand (command) {
  const client = new EC2Client({ region: process.env.AWS_REGION })
  return client.send(command)
}

createImage('i-0672b492fb7f92bfd', 'hamsterImage')
  .then(() => console.log('Complete'))

async function createImage (seedInstanceId, imageName) {
  // TODO: Implement AMI creation
  const params = {
    InstanceId: seedInstanceId,
    Name: imageName
  };
  const command = new CreateImageCommand(params);
  return sendCommand(params);
}

实例 ID 是从以下 JSON 对象中捕获的,用于列出我的代码中所有正在运行的实例

[
  {
    AmiLaunchIndex: 0,
    ImageId: 'ami-0b5eea76982371e91',    
    InstanceId: 'i-0672b492fb7f92bfd',   
    InstanceType: 't2.micro',
    KernelId: undefined,
    KeyName: 'hamster_key',
    LaunchTime: 2022-12-27T03:10:12.000Z,
    Monitoring: { State: 'disabled' },   
    Placement: {
      AvailabilityZone: 'us-east-1c',    
      Affinity: undefined,
      GroupName: '',
      PartitionNumber: undefined,        
      HostId: undefined,
      Tenancy: 'default',
      SpreadDomain: undefined,
      HostResourceGroupArn: undefined
    },
    Platform: undefined,
    PrivateDnsName: 'ip-172-31-80-74.ec2.internal',
    PrivateIpAddress: '172.31.80.74',
    ProductCodes: [],
    PublicDnsName: 'ec2-54-162-64-244.compute-1.amazonaws.com',
    PublicIpAddress: '54.162.64.244',
    RamdiskId: undefined,
    State: { Code: 16, Name: 'running' },
    StateTransitionReason: '',
    SubnetId: 'subnet-09fbb143b92cb9d1b',
    VpcId: 'vpc-0ba9dffc72ac05ef6',
    Architecture: 'x86_64',
    BlockDeviceMappings: [ [Object] ],
    ClientToken: 'bd84c832-4429-482d-bdf9-323ddbb8cad4',
    EbsOptimized: false,
    EnaSupport: true,
    Hypervisor: 'xen',
    IamInstanceProfile: undefined,
    InstanceLifecycle: undefined,
    ElasticGpuAssociations: undefined,
    ElasticInferenceAcceleratorAssociations: undefined,
    NetworkInterfaces: [ [Object] ],
    OutpostArn: undefined,
    RootDeviceName: '/dev/xvda',
    RootDeviceType: 'ebs',
    SecurityGroups: [ [Object] ],
    SourceDestCheck: true,
    SpotInstanceRequestId: undefined,
    SriovNetSupport: undefined,
    StateReason: undefined,
    Tags: undefined,
    VirtualizationType: 'hvm',
    CpuOptions: { CoreCount: 1, ThreadsPerCore: 1 },
    CapacityReservationId: undefined,
    CapacityReservationSpecification: {
      CapacityReservationPreference: 'open',
      CapacityReservationTarget: undefined
    },
    HibernationOptions: { Configured: false },
    Licenses: undefined,
    MetadataOptions: {
      State: 'applied',
      HttpTokens: 'optional',
      HttpPutResponseHopLimit: 1,
      HttpEndpoint: 'enabled',
      HttpProtocolIpv6: 'disabled'
    },
    EnclaveOptions: { Enabled: false },
    BootMode: undefined
  }
]

我得到的错误是

C:\Users\jiali\OneDrive\Desktop\aws-developer-designing-developing\03\demos\before\node_modules\@aws-sdk\smithy-client\dist\cjs\client.js:13
        const handler = command.resolveMiddleware(this.middlewareStack, this.config, options);                                ^

TypeError: command.resolveMiddleware is not a function
    at EC2Client.send (C:\Users\jiali\OneDrive\Desktop\aws-developer-designing-developing\03\demos\before\node_modules\@aws-sdk\smithy-client\dist\cjs\client.js:13:33)
    at sendCommand (C:\Users\jiali\OneDrive\Desktop\aws-developer-designing-developing\03\demos\before\scripts\03\create-ami.js:11:17)
    at createImage (C:\Users\jiali\OneDrive\Desktop\aws-developer-designing-developing\03\demo
PS C:\Users\jiali\OneDrive\Desktop\aws-developer-designing-developing\03\demos\before\scripts\03> node .\manage-ec2-instance.js

我很困惑为什么,我的代码有错误吗?


事实证明,您遇到了与我相同的问题,即意外忘记传递实际的命令对象。

您使用params构建命令对象但执行sendCommand with params代替command作为参数。

你应该执行sendCommand(command);并不是sendCommand(params);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 EC2 实例 ID 创建 AMI 时,command.resolveMiddleware 不是 AWS SDK 的函数,想知道为什么? 的相关文章

随机推荐