2013-03-27 78 views
0

我已经创建了一个新的冰川库用于开发。我为工作完成通知安装了SNS和SQS。冰川档案检索 - 无效的金库名称

我正在使用AWS的java SDK。我能够成功地将存档添加到保管库,但创建检索作业时出现错误。

我使用的代码是从SDK

InitiateJobRequest initJobRequest = new InitiateJobRequest() 
     .withVaultName(vaultName) 
     .withJobParameters(new JobParameters().withType("archive-retrieval").withArchiveId(archiveId)); 

我使用相同的代码在测试和生产,它工作正常,但在发展中,我得到这个错误:

Status Code: 400, AWS Service: AmazonGlacier, AWS Request ID: xxxxxxxx, AWS Error Code: InvalidParameterValueException, AWS Error Message: Invalid vault name: arn:aws:glacier:us-west-2:xxxxxxx:vaults/xxxxxx

我知道保管库名称是正确的,它存在,因为我使用相同的名称来运行添加归档作业,它完成正常。

我怀疑保险库可能会在创建后花费一些时间,然后才允许检索请求,但我找不到任何文档来确认这一点。

任何人有类似的问题吗?或者在您启动检索请求之前知道保管库是否有延迟?

回答

0
try { 
     // Get the S3 directory file. 
     S3Object object = null; 
     try { 
      object = s3.getObject(new GetObjectRequest(s3BucketName, key)); 
     } catch (com.amazonaws.AmazonClientException e) { 
      logger.error("Caught an AmazonClientException"); 
      logger.error("Error Message: " + e.getMessage()); 
      return; 
     } 

     // Show 
     logger.info("\tContent-Type: " 
       + object.getObjectMetadata().getContentType()); 
     GlacierS3Dir dir = GlacierS3Dir.digestS3GlacierDirectory(object 
       .getObjectContent()); 
     logger.info("\tGlacier object ID is " + dir.getGlacierFileID()); 

     // Connect to Glacier 
     ArchiveTransferManager atm = new ArchiveTransferManager(client,credentials); 
     logger.info("\tVault: " + vaultName); 

     // create a name 
     File f = new File(key); 
     String filename = f.getName(); 
     filename = path + filename.replace("dir", "tgz"); 

     logger.info("Downloading to '" + filename 
       + "'. This will take up to 4 hours..."); 
     atm.download(vaultName, dir.getGlacierFileID(), new File(filename)); 
     logger.info("Done."); 

    } catch (AmazonServiceException ase) { 
     logger.error("Caught an AmazonServiceException."); 
     logger.error("Error Message: " + ase.getMessage()); 
     logger.error("HTTP Status Code: " + ase.getStatusCode()); 
     logger.error("AWS Error Code: " + ase.getErrorCode()); 
     logger.error("Error Type:  " + ase.getErrorType()); 
     logger.error("Request ID:  " + ase.getRequestId()); 
    } catch (AmazonClientException ace) { 
     logger.error("Caught an AmazonClientException."); 
     logger.error("Error Message: " + ace.getMessage()); 
    }