Не удается подключиться к Elasticsearch (ключ доступа и секрет не соблюдаются) при работе под IIS

Я использую класс C# ElasticClient для подключения к экземпляру 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\{имя пользователя}\.aws\credential. Он имеет запись «по умолчанию», поэтому установка имени профиля вручную не требуется. Это работает нормально, когда я запускаю свое веб-приложение ASP.NET Core с параметром Launch, установленным на Project.

введите здесь описание изображения

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

введите здесь описание изображения

...тогда соединение с 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 #P15#

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

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

введите здесь описание изображения

Я попытался установить пакет 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. Любая помощь будет оценена по достоинству.


person Justin    schedule 20.03.2019    source источник


Ответы (1)


Мне удалось заставить это работать, по какой-то причине при работе под 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}"
        },
person Justin    schedule 22.03.2019