Не удается подключиться к Elasticsearch (ключ доступа и секрет не соблюдаются) при работе под IIS - PullRequest
0 голосов
/ 20 марта 2019

Я использую класс ElasticClient C # для подключения к экземпляру Elasticsearch, размещенному на AWS.

var pool = new SingleNodeConnectionPool(new Uri(Url));
var httpConnection = new AwsHttpConnection(Region);
var config = new ConnectionSettings(pool, httpConnection)
                            .PrettyJson()
                            .DisableDirectStreaming()
                            .DefaultTypeName(TYPE)
                            .DefaultIndex(INDEX);
_client = new ElasticClient(config);

Для установки ключа доступа и секрета у меня есть файл учетных данных, хранящийся на моем компьютере с Windows здесь: C: \ Users \ {username} \. Aws \ credential. У него есть запись «по умолчанию», поэтому установка имени профиля вручную не требуется. Это работает нормально, когда я запускаю свое веб-приложение ASP.NET Core с Launch, установленным в Project.

enter image description here

Однако, как только я перехожу на Launch: IIS ...

enter image description here

... тогда соединение Elasticsearch не установлено. Всякий раз, когда я пытаюсь выполнить запрос, он выдает ошибку:

Сообщение = Неверный ответ NEST, созданный из неудачного низкого уровня вызов POST: / {url1} / {url2} / _ search? pretty = true & typed_keys = true

Журнал аудита этого вызова API:

  • 1 BadRequest: Узел: https://{url1}.us -east-1.es.amazonaws.com / Взял: 00: 00: 00.0090414

    OriginalException: System.Net.Http.HttpRequestException: была предпринята попытка операции с сокетом в недоступной сети --->

System.Net.Sockets.SocketException: была предпринята попытка операции с сокетом в недоступную сеть

Веб-сайт IIS работает с пулом приложений, настроенным на использование моей учетной записи Windows. Ясно, что он игнорирует учетные данные .aws при работе под IIS. Я также попытался создать профили с помощью расширения AWS Explorer Visual Studio 2017, как «по умолчанию», так и пользовательского.

enter image description here

Я попытался установить пакет nuget AWSSDK.Extensions.NETCore.Setup в моем проекте ASP.NET Core и указать пользовательский именованный профиль в appsettings.json, как:

"AWS": {
        "Profile": "local-dev-profile",
        "Region": "us-east-1"
    }

И вот так:

"AppSettings": {
        "AWSProfileName": "local-dev-profile",
    },

Ни одна из них не работает, я все еще получаю ту же ошибку "Операция с сокетом была предпринята для недоступной сети". Я следовал всем инструкциям AWS и чувствую, что делаю это правильно, но в IIS это просто не сработает. Любая помощь будет оценена.

1 Ответ

1 голос
/ 22 марта 2019

Мне удалось заставить это работать, по какой-то причине при запуске под IIS он не тянет ключ доступа и секрет, как обычно, вероятно, связанный с магией, возникающей в ASP.NET Core для запуска под IIS,Вместо этого мне пришлось добавить ключи в мой файл launchSettings.json, чтобы он работал в IIS (который копируется как ENVIRONMENT_VARIABLES в web.config.)

Вот как будет выглядеть профиль IIS в launchSettings.jsonвыглядеть так:

"MobileApi IIS (DEV)": {
            "commandName": "IIS",
            "launchUrl": "{url}",
            "environmentVariables": {
                "AWS_SECRET_ACCESS_KEY": "{value}",
                "AWS_ACCESS_KEY_ID": "{value}",
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "applicationUrl": "{url}"
        },
...