2015-04-21 2 views
0

Ниже приведен мой код с использованием API для создания VPC в AWS, но я получаю сообщение об ошибке.Не удалось создать VPC в AWS с использованием Java SDK

Код:

CreateAccessKeyRequest key = new CreateAccessKeyRequest(); 
BasicAWSCredentials cred = new BasicAWSCredentials("", ""); 
key.setRequestCredentials(cred); 
AmazonEC2 ec2 = new AmazonEC2Client(); 
System.out.println("Creating VPC.....\n"); 
CreateVpcRequest newVPC = new CreateVpcRequest("In"); 
newVPC.setRequestCredentials(key.getRequestCredentials()); 
String cidrBlock = "192.168.1.70/28"; 
newVPC.setCidrBlock(cidrBlock); 
newVPC.setInstanceTenancy(Tenancy.Default); 
AmazonIdentityManagementClient client = new AmazonIdentityManagementClient(cred); 
CreateVpcResult res = ec2.createVpc(newVPC); 
Vpc vp = res.getVpc(); 
vp.setIsDefault(true); 
String vpcId = vp.getVpcId(); 
System.out.println("Created VPC" + vpcId); 

Ошибка:

Exception in thread "main" com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain 
    at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117) 
    at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:10540) 
    at com.amazonaws.services.ec2.AmazonEC2Client.createVpc(AmazonEC2Client.java:5709) 
    at CreateUserRequest.main(CreateUserRequest.java:29) 
+0

Сообщение об ошибке жалуется на отсутствие учетных данных, и вы делаете «новые BasicAWSCredentials (« »,« »)'? – bsvingen

+0

Я жестко закодировал учетные данные внутри класса BasicAWSCredentials, по-прежнему та же ошибка. –

+1

Зачем нужен объект CreateAccessKeyRequest? Почему бы просто не использовать непосредственно объект «BasicAWSCredentials»? Или даже лучше, почему бы не взять все учетные данные из вашего кода и использовать файл профиля учетных данных или переменные среды (согласно [Предоставление AWS Credentials в AWS SDK для Java] (http: //docs.aws.amazon. ком/AWSSdkDocsJava/последний/DeveloperGuide/credentials.html))? – bsvingen

ответ

0

Есть несколько вопросов, с помощью фрагмента кода выше.

Во-первых, это плохая идея для жесткого кодирования ключа доступа/секретного ключа. Они должны храниться во внешнем файле конфигурации или в переменных среды. Если этот код предназначен для запуска из экземпляра EC2, вместо этого вы должны использовать «Роли» и «Экземпляры профилей». Это четко объяснено на http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html

, как говорится, если это только для быстрой проверки, давайте предположим, что жесткое кодирование ключ доступа и секретный ключ действительно возможность, есть и другие проблемы на уровне кода:

  • вам не нужно использовать CreateAccessKeyRequest, как это API вызов для генерации ключа доступа нового/Secret Key

  • AmazonEC2Client ваши не имеет никакого отношения к поставщику мандатного

  • нет необходимости устанавливать поставщика учетных данных для самого VPC Запрос

  • setInstanceTenancy не требуется, это по умолчанию

  • vp.setIsDefault(true); бесполезно. Если вы хотите создать по умолчанию VPC, сделать запрос в нашу службу поддержки, они будут флаг вашей VPC как один по умолчанию (см https://aws.amazon.com/premiumsupport/knowledge-center/deleted-default-vpc/)

Вот модифицированный пример кода, который создают VPC

package com.stormacq; 

import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.regions.*; 
import com.amazonaws.services.ec2.AmazonEC2; 
import com.amazonaws.services.ec2.AmazonEC2Client; 
import com.amazonaws.services.ec2.model.CreateVpcRequest; 
import com.amazonaws.services.ec2.model.CreateVpcResult; 
import com.amazonaws.services.ec2.model.Vpc; 

public class Main { 

    public static void main(String[] args) { 
     BasicAWSCredentials cred = new BasicAWSCredentials("AK...OQ", "gH...tp"); 
     AmazonEC2 ec2 = new AmazonEC2Client(cred); 
     ec2.setRegion(Region.getRegion(Regions.US_EAST_1)); 

     System.out.println("Creating VPC..."); 
     CreateVpcRequest newVPC = new CreateVpcRequest("In"); 

     newVPC.setCidrBlock("192.168.1.70/28"); 
     CreateVpcResult res = ec2.createVpc(newVPC); 
     Vpc vp = res.getVpc(); 

     String vpcId = vp.getVpcId(); 
     System.out.println("Created VPC " + vpcId); 
    } 
} 
0

Спасибо Sébastien Stormacq за то, что вы поддержали меня с ответом. Мы нашли решение этой проблемы. На самом деле мое рабочее время на рабочем столе окончилось на 6 минут до фактического времени. Таким образом, он получает конфликт для проверки учетных данных AWS. Мы синхронизировали время вручную с точным временем и теперь работаем как шарм. Пожалуйста, один раз проверьте время Windows, когда вы получаете ту же проблему.

Смежные вопросы