import os import json import requests import boto3 from botocore.config import Config CITIES = [ "Moscow,RU", "London,GB", "Paphos,CY", "Ulyanovsk,RU", "Santiago,CL", ] def main(event, context): api_key = os.environ["OWM_API_KEY"] sqs_endpoint = os.environ.get( "SQS_ENDPOINT", "http://shared-sqs.shared-sqs.svc.cluster.local:4100" ) access_key = os.environ["SQS_ACCESS_KEY"] secret_key = os.environ["SQS_SECRET_KEY"] queue_name = os.environ.get("SQS_QUEUE_NAME", "weather-data") cfg = Config(signature_version="s3v4", s3={"addressing_style": "path"}) sqs = boto3.client( "sqs", endpoint_url=sqs_endpoint, aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name="us-east-1", config=cfg, ) # Создаём очередь если не существует try: queue_url = sqs.get_queue_url(QueueName=queue_name)["QueueUrl"] except Exception: queue_url = sqs.create_queue(QueueName=queue_name)["QueueUrl"] results = [] for city in CITIES: try: resp = requests.get( "https://api.openweathermap.org/data/2.5/weather", params={"q": city, "appid": api_key, "units": "metric"}, timeout=10, ) resp.raise_for_status() data = resp.json() msg = { "city": data["name"], "country": data["sys"]["country"], "temperature": data["main"]["temp"], "feels_like": data["main"]["feels_like"], "humidity": data["main"]["humidity"], "pressure": data["main"]["pressure"], "wind_speed": data["wind"]["speed"], "description": data["weather"][0]["description"], "owm_timestamp": data["dt"], } sqs.send_message(QueueUrl=queue_url, MessageBody=json.dumps(msg)) results.append({"city": msg["city"], "temp": msg["temperature"]}) except Exception as e: results.append({"city": city, "error": str(e)}) return {"status": "ok", "sent": len(results), "results": results}