У меня есть некоторый рабочий код для загрузки файла в S3 cia Chalice / Lambda:
вот код, я скопировал этот конкретный блок из другой записи stackoverflow :
from chalice import Chalice, Response
import boto3
app = Chalice(app_name='helloworld') # I'm just modifying the script I used for the tutorial
s3 = boto3.client('s3', region_name='us-west-2')
BUCKET = 'chalicetest1'
@app.route('/')
def index():
return {'status_code': 200,
'message': 'welcome to test API'}
@app.route('/upload/{file_name}, methods=['PUT'], content_types=['application/octet-stream'])
def upload_to_s3(file_name):
try:
body = app.current_request.raw_body
temp_file = '/tmp/' + file_name
with open(temp_file, 'wb') as f:
f.write(body)
s3.upload_file(temp_file, BUCKET, file_name)
return Response(message='upload successful',
headers=['Content-Type': 'text/plain'],
status_code=200)
except Exception, e:
app.log.error('error occurred during upload %s' % e)
return Response(message='upload failed',
headers=['Content-Type': 'text/plain'],
status_code=400)
Этот код работает как брелок, без проблем. Однако другой части моего кода требуется доступ к конечной точке ec2 на другом сервере. Поэтому я добавил в конфигурацию «subnet_ids» & «security_group_ids». json В этот момент вызов ec2 работает нормально, но загрузка s3 больше не работает. Когда я удаляю параметры в конфиге. json загрузка s3 снова работает, но вызов ec2 не удался.
Я попытался отредактировать конфигурацию json для корзины, но безуспешно. Какие параметры мне нужно добавить, чтобы корзина была доступна в группе безопасности? Самое странное, что я могу получить доступ к корзине с сервера ec2 без проблем. Так что меня удивляет, почему лямбда может получить доступ к корзине, а не когда я добавляю лямбду в группу безопасности. Какие-нибудь мысли?