AWS Chalice — Acısız Serverless Serüveni (3)

Kemalcan Bora
3 min readJul 11, 2022

Serüvenimize kaldığımız yerden devam ediyoruz. Bir önceki seri için;

— Acısız Serverless Serüveni (2)

En son ufak bir download scripti yazmıştık şimdi dışarıdan buraya nasıl parametre atarız buna bakacağız.

Öncelikle burada bir POST methodu olacak bunun için bir kaç yöntemimiz var bunlardan birisi query string URL-path diğeri ise body request. [1]

Hangi tarz hangi durumlarda kullanırız?

Body ne zaman kullanmanız gerekir:

  • Serileştirilmiş ikili veriler gibi değerler insan tarafından okunamazsa.
  • Çok sayıda argümanınız olduğu zaman.

Query string ne zaman kullanılır:

  • Kodu geliştirirken bunları manuel olarak arayabilmek istediğinizde, örn. curl ile
  • Zaten application/octet-streamakışı gibi farklı bir içerik türü gönderiyorsanız.
@app.route('/users/')
def users():
name = app.current_request.query_params.get('name')
return {'name': name}

body seklinde gitmek istersek eğer.

@app.route('/users/')
def users():
body = app.current_request.json_body
username = body["username"]
return {'name': username}

Bizim case’imize en uygun olan durum şuan query parameter olarak ilerlemek aşağıda örnek olarak oluşturacağımız URL i görebilirsiniz.

0.0.0.0/convert?v=b-I2s5zRbHg

Eğer localimizde test etmek istiyorsak tek yapmamız gereken şey

chalice local

Evet istek attık ve videomuz indi. Şimdi yapmamız gereken şey ise tmp file ımıza inen dosyayı ilk önce S3 e atmak ardından da tmp den silmek.

İlk önce AWS helper isimli bir py dosyası oluşturdum ve ardından S3 de yapacağım işlemler için ufak bir geliştirme yaptım.

burada presigned url kullanıyorum. AWS bunu söyle açıklıyor Önceden imzalanmış bir URL oluşturduğunuzda, güvenlik kimlik bilgilerinizi sağlamanız ve ardından bir paket adı, bir nesne anahtarı, bir HTTP yöntemi (nesneleri yüklemek için PUT) ve bir son kullanma tarihi ve saati belirtmeniz gerekir. Önceden imzalanmış URL’ler yalnızca belirtilen süre boyunca geçerlidir. Yani, eylemi son kullanma tarihi ve saatinden önce başlatmalısınız.[2] Yani güvenlik için güzel bir olay diyebiliriz.

E her şey iyi güzel peki lambdanın S3 e erişimi var mı? Evet burada yapmamız gereken şey ise bir policy yazmak. Ben şuan güvenlik falan mevzularını geçip ayı gibi hepsine izin vermiş bulunuyorum eğer siz prod’a bir şey geliştiriyorsanız buradaki policy kısmını daha özenli yapmanızı tavsiye ederim.

ve ardından config.json’ı düzenlememiz gerekiyor.

{
"version": "2.0",
"app_name": "podtube",
"automatic_layer": true,
"stages": {
"dev": {
"api_gateway_stage": "api",
"autogen_policy": false,
"api_gateway_policy_file": "policy.json"
}
}
}

Artık yapmamız gereken şey ise parçaları bir araya getirmek.

config dosyasını ayarlıyoruz.

{
"version": "2.0",
"app_name": "podtube",
"automatic_layer": true,
"stages": {
"dev": {
"api_gateway_stage": "api",
"autogen_policy": false,
"iam_policy_file": "policy.json"
}
}
}

Bir sonraki yazı dizisinde download endpointini yazacağız ve schedule cron her gece bizim S3'ümüze erişip her şeyi silecek.

Referanslar

--

--