Я запускаю функцию, активируемую большим двоичным объектом, на виртуальной машине Azure (Ubuntu 18.04) с помощью Azure Function Core Tools.
Я хочу получить информацию о больших двоичных объектах БЕЗ использования конечной точки службы.
В моей виртуальной сети у меня есть:
VM1, которая запускает функцию с помощью Core Tools
VM2, которая является DNS-сервером и отправляет VM1 HTTP-запрос, как показано ниже;
Хранилище BLOB-объектов с частной конечной точкой
Когда я включил конечную точку службы Microsoft.Storage в своей подсети, VM1 может запускать функцию, запускаемую большим двоичным объектом, может получать данные от VM2 и получать информацию о больших двоичных объектах (которая была передана в curl).
Однако, как только я удаляю конечную точку службы, VM1 не может запустить функцию и получает следующие ошибки, очевидно, не удалось подключиться к хранилищу:
Произошло необработанное исключение. Хост отключается.
Microsoft.WindowsAzure.Storage: Этот запрос не авторизован для выполнения этой операции.
Произошло необработанное исключение. Хост отключается.
Microsoft.WindowsAzure.Storage: операция отменена. System.Private.CoreLib: операция отменена.
Разрешение имени в частный IP-адрес хранилища, естественно, подходит как для ВМ1, так и для ВМ2, поскольку они находятся в одной подсети.
Есть ли способ решить эту проблему, например добавить маршрут в мою таблицу маршрутов?
Заранее спасибо.
Редактировать №1
Другие функции, которые не используют частные конечные точки, такие как функции, запускаемые HTTP, не затрагиваются и могут быть вызваны.
Я предполагаю, что среда выполнения основных инструментов не поддерживает частную ссылку, потому что, если я хочу, чтобы функция в функциях Azure (а не основные инструменты на локальном компьютере) подключалась к частным конечным точкам, необходимо использовать план Premium или план службы приложений.
@NancyXiong Спасибо за комментарий. Первый вопрос, да, все они находятся в одном регионе. Второй вопрос: нет, когда конечная точка службы не включена, функция blob не будет работать, и в этот момент я даже не могу вызвать http://{частный IP-адрес VM1}:{port}.
В этом случае, когда вы включаете точку обслуживания Microsoft.Storage
для подсети, Azure добавит маршрут к общедоступным IP-адресам для служб хранилища в таблице маршрутов этой подсети. Конечная точка службы Azure обеспечивает прямое подключение к службе Azure через инфраструктуру магистральной сети Microsoft. Использование конечных точек службы не удаляет общедоступную конечную точку из учетных записей хранилища Azure — это просто перенаправление трафика.
Когда вы включаете частную конечную точку для хранилища BLOB-объектов, ресурсы BLOB-объектов доступны только через вашу виртуальную сеть. Функция, активируемая большим двоичным объектом, будет взаимодействовать с назначенными ресурсами, используя частный IP-адрес для конкретного ресурса. Если вы удалили конечную точку службы подсети, маршрут по умолчанию к общедоступному IP-адресу ресурсов хранилища через следующий переход virtual network service endpoint
отсутствует. Исходящий трафик для служб Azure по умолчанию проходит через Интернет. Таким образом, другие функции, которые не используют частные конечные точки, такие как функции, запускаемые HTTP, не затрагиваются и могут быть вызваны.
В заключение следует отметить, что основные инструменты функций Azure на виртуальной машине Azure не могут подключаться к частным конечным точкам для хранилища BLOB-объектов БЕЗ использования конечной точки службы.
Надеюсь, это имеет смысл, для получения дополнительной информации вы можете прочитать эти блоги:
Находятся ли ваши виртуальные машины Azure, виртуальная сеть и учетная запись хранения в одном регионе? Можно ли напрямую вызвать конечную точку функции с помощью http://{частный IP-адрес ВМ1}:{порт}/api/{имя_функции}?