У меня есть лямбда в VPC, потому что ему нужен доступ к базе данных. Теперь эта лямбда также должна будет иметь возможность использовать видеопотоки Firehose Kinesis (https://aws.amazon.com/kinesis/video-streams/). Моя лямбда-версия построена на Python, и это мой код для создания видео-клиента kinesis:
client = boto3.client('kinesisvideo')
def create_stream(stream_name):
response = client.create_stream(
DeviceName='BE',
StreamName=stream_name,
MediaType='video/h264',
DataRetentionInHours=1,
Tags={
'string': 'Livestream'
}
)
stream_ARN = response['StreamARN']
print('Printing ARN: ', stream_ARN)
return stream_ARN
Сейчаскогда я вызываю create_stream ('TEST'), моя лямбда истекает через 90 секунд:
[DEBUG] 2019-11-05T15:02:47.66Z 2e094ebe-8a92-4a10-ab6c-433cf223cb5b retry needed, retryable exception caught: Connect timeout on endpoint URL: "https://kinesisvideo.eu-west-1.amazonaws.com/createStream"
Traceback (most recent call last):
File "/var/runtime/urllib3/connection.py", line 160, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "/var/runtime/urllib3/util/connection.py", line 80, in create_connection
raise err
File "/var/runtime/urllib3/util/connection.py", line 70, in create_connection
sock.connect(sa)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/var/runtime/botocore/httpsession.py", line 262, in send
chunked=self._chunked(request.headers),
File "/var/runtime/urllib3/connectionpool.py", line 641, in urlopen
_stacktrace=sys.exc_info()[2])
File "/var/runtime/urllib3/util/retry.py", line 344, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/var/runtime/urllib3/packages/six.py", line 686, in reraise
raise value
File "/var/runtime/urllib3/connectionpool.py", line 603, in urlopen
chunked=chunked)
File "/var/runtime/urllib3/connectionpool.py", line 344, in _make_request
self._validate_conn(conn)
File "/var/runtime/urllib3/connectionpool.py", line 843, in _validate_conn
conn.connect()
File "/var/runtime/urllib3/connection.py", line 316, in connect
conn = self._new_conn()
File "/var/runtime/urllib3/connection.py", line 165, in _new_conn
(self.host, self.timeout))
urllib3.exceptions.ConnectTimeoutError: (<botocore.awsrequest.AWSHTTPSConnection object at 0x7fcf62a7e128>, 'Connection to kinesisvideo.eu-west-1.amazonaws.com timed out. (connect timeout=60)')
Из того, что я понимаю, моя лямбда не может подключиться к https://kinesisvideo.eu -west-1.amazonaws.com / createStream потому что он в VPC. Чтобы проверить это, я создал новую временную лямбду вне моего VPC, и она отлично работала, он мог без проблем подключаться к Kinesis Video Stream.
ИсправитьВ этой проблеме я понимаю, что мне нужно создать конечную точку, чтобы моя лямбда в моем VPC могла получить доступ к сервису AWS, такому как Kinesis Video Streaming. Я пошел на консоль конечной точки VPC и создал новую конечную точку. Я выбрал «com.amazonaws». .eu-west-1.kinesis-streams "и убедился, что использовал ту же VPC, подсети и группу безопасности, что и в моей лямбде. После создания конечной точки я попытался вызвать create_streя сноваК сожалению, я получаю тот же результат, тайм-аут при попытке подключения.
Итак, мой вопрос: возможен ли вообще сервис AWS из VPC? Если да, то как?
ОБНОВЛЕНИЕ
В ответ на ответы я попробовал следующее, но все равно получаю ту же ошибку:
MyЛямбда в VPC имеет SG со всеми исходящими разрешениями. Затем я создал новый SG, входящий из SG VPC, и назначил его конечной точке.