Lambdassa voi ajaa koodia kutakuinkin ilmaiseksi – eikä tarvitse murehtia käyttöjärjestelmästä tai sen päivittämisestä!

Mikrobitin numerossa 5/2017 opastamme Lambdan käyttöön ja ohjelmoimme esimerkin, jossa Rasp­berry Pi -korttitietokone lähettää säädataa Api Gatewayn kautta Lambdalle.

Perinteisessä pilvipalvelinmallissa käyttäjä maksaa virtuaalikoneesta koko ajan riippumatta siitä, tehdäänkö palvelimella jotain vai ei. Monesti varsinkin harrasteprojekteissa palvelimet viettävät pääosan ajastaan huristen tyhjän panttina vailla oikeaa tekemistä. AWS Lambdan avulla käyttäjällä ei ole palvelinta turhaan valmiina, vaan käyttäjän kirjoittamaa ohjelmakoodia ajetaan vain, kun se on oikeasti tarpeellista.

Lambda-funktion käyttöönotto on suoraviivaista. Käytettävän ohjelmointikielen lisäksi funktiolle määritellään sallittu maksimiaika ja käytettävissä olevan muistin määrä. Vaikka käyttöliittymässä ei suoraan kerrotakaan, vaikuttaa muistin määrä alla olevaan rautaan siten, että mitä enemmän muistia on, sitä tehokkaampi suoritin koodia ajaa.

Koodin ajaminen Lambdassa ei maksa harrastelijalle juuri mitään, eikä käyttöjärjestelmäpäivityksistä tarvitse huolehtia. Kaiken lisäksi Lambda huolehtii automaattisesti suorituskyvystä luomalla itsestään kopioita kuorman kasvaessa.

Lue koko artikkeli Mikrobitistä 5/2017!

 

Raspberryssä pythonilla ajettava ohjelmakoodi:


# -*- coding: utf-8 -*-

from datetime import datetime
import requests
import json

# Laitetaan mittalaitteilta saadut arvot datarakenteeseen
measurements = {
   "timestamp": str(datetime.now()),
   "temperature": "21"
}

post_body = json.dumps(measurements)
# Lähetetään mittalaitteilta luettu data Api Gatewaylle
r = requests.post('https://mpaqvjbgal.execute-api.eu-west-1.amazonaws.com/prod/weatherMeasurementsToDatabase', data = post_body)

print(r.text)
 

Raspberryssä pythonilla ajettava ohjelma lähettää säädataa Api Gatewayn kautta lambdalle. Sääanturin arvon lukeminen on tapauskohtaista käytettävän komponentin mukaan, joten se jätetään kotitehtäväksi, samoin kuin tämän ohjelmakoodin suorittamisen ajastaminen. Huomaa, että Api Gatewayn osoite on uniikki, muista kopioida oikea osoite Lambdan triggers välilehdeltä luotuasi Lambda-funktion.

 

Lambda-funktion koodi:


const AWS = require('aws-sdk')

AWS.config.apiVersions = {
   dynamodb: '2012-08-10'
}

AWS.config.update({ region: "eu-west-1" })

const db = new AWS.DynamoDB({ endpoint: new AWS.Endpoint('http://dynamodb.eu-west-1.amazonaws.com') })

exports.handler = (event, context, callback) => {
   console.log('event' + event)

   const weatherParameters = {
   "TableName": "weatherMeasurements",
   "Item": {
   "id": { 'S': event.timestamp },
   "temperature": { 'S': event.temperature }
   }
}

db.putItem(weatherParameters, function (err, data) {
   if (err) {
      callback(null, Jotain meni pieleen: ' + err)
   } else {
      callback(null, Havainnot tallennettiin tietokantaan)
      } 
   })
}

Esimerkkimme Lambda-funktion tarkoituksena on siirtää Python-skriptillä Raspberry Piltä lähetetty data Dynamodb-tietokantaan.

 

Policy document:


{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
         "logs:CreateLogGroup",
         "logs:CreateLogStream",
         "logs:PutLogEvents"
      ],
         "Resource": "arn:aws:logs:*:*:*"
         },
         {
            "Action": [
               "dynamodb:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}

Yllä oleva policy document kirjoitetaan Lambdaa rakennettaessa kohtaan ”policy document” 

Tarkemmat tiedot Lambdasta ja API Gatewaysta:
https://aws.amazon.com/lambda/pricing/
https://aws.amazon.com/api-gateway/pricing/