Как упомянуто в документации,
По своей структуре вы получаете доступ к ресурсам Amazon DocumentDB (с совместимостью с MongoDB) из экземпляра Amazon EC2 в том же Amazon VPC, что и ресурсы Amazon DocumentDB. Однако предположим, что ваш вариант использования требует, чтобы вы или ваше приложение обращались к ресурсам Amazon DocumentDB из-за пределов кластера Amazon VPC. В этом случае вы можете использовать SSH-туннелирование (также известное как «переадресация портов») для доступа к вашим ресурсам Amazon DocumentDB.
blockquote>Ваш кластер Amazon DocumentDB должен работать в виртуальном частном облаке по умолчанию (VPC) по умолчанию. Для взаимодействия с кластером Amazon DocumentDB вы должны запустить экземпляр Amazon Elastic Compute Cloud (Amazon EC2) в своем VPC по умолчанию, в том же регионе AWS, где вы создали кластер Amazon DocumentDB.
blockquote>Следуйте инструкциям по подключению к кластеру Кластер AWS DocumentDB
Обновление :
Для подключения через SSL используйте ниже логики, установив SSL_CERTIFICATE , указывая на промежуточный сертификат, специфичный для региона aws.
Это можно загрузить из SSL-сертификатов и скопировать в базовый каталог. Кроме того, вы можете указать абсолютный путь к переменной SSL_CERTIFICATE .
private static final String SSL_CERTIFICATE = "rds-ca-2015-us-east-1.pem"; private static final String KEY_STORE_TYPE = "JKS"; private static final String KEY_STORE_PROVIDER = "SUN"; private static final String KEY_STORE_FILE_PREFIX = "sys-connect-via-ssl-test-cacerts"; private static final String KEY_STORE_FILE_SUFFIX = ".jks"; private static final String DEFAULT_KEY_STORE_PASSWORD = "changeit"; public static void main(String[] args) { SSLContextHelper.setSslProperties(); SpringApplication.run(Application.class, args); } protected static class SSLContextHelper{ /** * This method sets the SSL properties which specify the key store file, its type and password: * @throws Exception */ private static void setSslProperties() { try { System.setProperty("javax.net.ssl.trustStore", createKeyStoreFile()); } catch (Exception e) { e.printStackTrace(); } System.setProperty("javax.net.ssl.trustStoreType", KEY_STORE_TYPE); System.setProperty("javax.net.ssl.trustStorePassword", DEFAULT_KEY_STORE_PASSWORD); } private static String createKeyStoreFile() throws Exception { return createKeyStoreFile(createCertificate()).getPath(); } /** * This method generates the SSL certificate * @return * @throws Exception */ private static X509Certificate createCertificate() throws Exception { CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); URL url = new File(SSL_CERTIFICATE).toURI().toURL(); if (url == null) { throw new Exception(); } try (InputStream certInputStream = url.openStream()) { return (X509Certificate) certFactory.generateCertificate(certInputStream); } } /** * This method creates the Key Store File * @param rootX509Certificate - the SSL certificate to be stored in the KeyStore * @return * @throws Exception */ private static File createKeyStoreFile(X509Certificate rootX509Certificate) throws Exception { File keyStoreFile = File.createTempFile(KEY_STORE_FILE_PREFIX, KEY_STORE_FILE_SUFFIX); try (FileOutputStream fos = new FileOutputStream(keyStoreFile.getPath())) { KeyStore ks = KeyStore.getInstance(KEY_STORE_TYPE, KEY_STORE_PROVIDER); ks.load(null); ks.setCertificateEntry("rootCaCertificate", rootX509Certificate); ks.store(fos, DEFAULT_KEY_STORE_PASSWORD.toCharArray()); } return keyStoreFile; } }
выход для подключения :
019-01-17 13:33:22.316 INFO 3598 --- [onaws.com:27017] org.mongodb.driver.cluster : Canonical address mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017 does not match server address. Removing mongodb.cluster-cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017 from client view of cluster 2019-01-17 13:33:22.401 INFO 3598 --- [onaws.com:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:2}] to mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017 2019-01-17 13:33:22.403 INFO 3598 --- [onaws.com:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=2132149, setName='rs0', canonicalAddress=mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017, hosts=[mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017], passives=[], arbiters=[], primary='mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017', tagSet=TagSet{[]}, electionId=7fffffff0000000000000001, setVersion=null, lastWriteDate=Thu Jan 17 13:33:21 UTC 2019, lastUpdateTimeNanos=516261208876} 2019-01-17 13:33:22.406 INFO 3598 --- [onaws.com:27017] org.mongodb.driver.cluster : Discovered replica set primary mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017 2019-01-17 13:33:22.595 INFO 3598 --- [ main] com.barath.app.CustomerService : Saving the customer with customer details com.barath.app.Customer@6c130c45 2019-01-17 13:33:22.912 INFO 3598 --- [ main] org.mongodb.driver.connection : Opened connection [connectionId{localValue:3}] to mongodb.cktoiipu3bbd.us-east-1.docdb.amazonaws.com:27017 2019-01-17 13:33:23.936 INFO 3598 --- [ main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity
springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] Ссылка : aws-documentdb
Проверьте CaptureStackBackTrace () функция, которая находится в Kernel32.dll. Это должно сделать все, в чем Вы нуждаетесь.
Получает стек, назад прослеживают путем хождения по стеку и записи информации для каждого кадра.
USHORT WINAPI CaptureStackBackTrace(
__in ULONG FramesToSkip,
__in ULONG FramesToCapture,
__out PVOID *BackTrace,
__out_opt PULONG BackTraceHash
);
Если Вы хотите сделать это чрезвычайно непортативно, можно просто читать, EBP регистрируют и обходят стек сами. Это будет только работать на x86 архитектуру, и она также предполагает, что время выполнения C, которое Вы используете правильно, инициализирует EBP к 0 прежде, чем вызвать первую функцию.
uint32_t read_ebp(void)
{
uint32_t my_ebp;
__asm
{
mov ebp, my_ebp
}
return my_ebp;
}
void backtrace(void)
{
uint32_t ebp = read_ebp();
printf("backtrace:\n");
while(ebp != 0)
{
printf("0x%08x\n", ebp);
ebp = ((uint32_t *)ebp)[1];
}
}
Предыдущий вариант не работает на меня (msvc 6), таким образом:
unsigned long prev;
unsigned long addr;
__asm { mov prev, ebp }
while(addr!=0) {
addr = ((unsigned long *)prev)[1];
printf("0x%08x\n", addr);
prev = ((unsigned long *)prev)[0];
}
Adam, благодарит выделить путь!