AWS Lambda无服务器计算服务详解

AWS是一个提供广泛服务的云平台,这些服务可以协同工作,创建高度可扩展的应用。AWS在全球多个国家拥有许多数据中心集群,这些集群被称为区域。这些区域进一步细分为AZ或可用区。由于其庞大的全球覆盖范围,AWS常被许多拥有IT基础设施的公司使用。AWS提供的服务领域包括计算、存储、数据库和消息服务等。本文将聚焦于AWS最常用的服务之一——AWS Lambda。

AWS Lambda及其用途

AWS的计算服务允许开发计算应用程序并将它们部署到云端。AWS Lambda是其中一项服务,它是一种成本效益高的无服务器计算服务,意味着不需要预置或管理任何服务器。以Lambda函数的形式编写代码,AWS Lambda支持多种不同的运行时环境,因此可以用多种语言编写代码。AWS Lambda根据请求数量、函数使用的内存和代码运行的计算时间来计费,这使得Lambda对用户来说非常节省成本,因为不需要为未使用的资源付费。Lambda函数的一些常见用例包括处理上传到S3的对象、从API拉取数据的自动化、实时数据处理和日志分析。

选择AWS Lambda还是EC2?

AWS EC2是一项服务,允许创建具有多种操作系统和硬件配置选项的虚拟机。与AWS Lambda一样,它也是一种计算服务。可以决定哪种配置最适合应用程序,从4个CPU核心的虚拟机到64个CPU核心的虚拟机都可以选择。EC2实例适用于长期计算和需要较重工作负载的应用程序,而Lambda函数适用于需要短期计算的情况。对于EC2,需要选择满足要求的实例及其配置,但对于Lambda函数,不需要部署或管理任何VM实例。在AWS Lambda中,代码允许的最大计算时间是15分钟,而在EC2中,只要实例运行,脚本就可以计算任意长的时间。对于Lambda函数,开发人员只需要上传代码并设置触发Lambda函数脚本的触发器。可以选择一系列AWS服务作为触发Lambda函数的事件源。

创建第一个AWSLambda函数

现在将创建第一个Lambda函数。这个函数将从API拉取数据并将其存储在DynamoDB表中。将使用的API是Spotify API。使用这个API,将创建一个Lambda函数,每天从全球前50名榜单中获取数据并将其存储在NoSQL数据库中。在现实生活的行业项目中,很多时候需要自动化从API获取数据以存储数据的任务。

需要AWS账户才能使用其服务。需要Spotify账户,将在Spotify的开发者平台上创建一个应用程序以使用Spotify的API。

将首先在Spotify上创建一个开发者账户;需要凭据来使用python的Spotipy库连接到这个API。如果还没有Spotify账户,可以在open.spotify.com上创建一个。然后导航到developer.spotify.com/dashboard/并登录账户。在这里需要点击创建应用程序并写下它的名称和描述。之后,必须点击显示客户端密钥。看到的客户端ID和客户端密钥将是使用spotipy库连接到Spotify API的凭据。

在这一步中,将创建将保存数据的DynamoDB表。打开AWS控制台并登录账户。在搜索栏中输入DynamoDB并点击它。一旦到达仪表板,然后点击创建表。现在需要输入表名并选择一个分区键,它将是主键。在例子中,将键命名为“s_id”并选择了字符串数据类型。这个s_id将是将从Spotify API接收的歌曲_id。现在点击创建表,表将被创建。要查看表,可以从左侧面板转到表部分。

现在必须为Lambda函数创建一个IAM角色;这个IAM角色将允许Lambda函数向DynamoDB表添加数据。从AWS控制台的搜索栏导航到IAM页面。在左侧面板中,点击访问管理下的“角色”部分。一旦它打开,需要点击右侧的创建角色。选择AWS服务和Lambda,然后点击下一步。一旦这样做了,需要为这个角色指定权限,搜索DynamoDB并选择AmazonDynamoFullAccess策略。这个预定义的策略将允许Lambda连接到DynamoDB的表。点击下一步,命名IAM角色并点击创建。

现在将创建将调用API并更新DynamoDB表的Lambda函数。从搜索栏导航到Lambda仪表板并点击创建函数。命名函数并选择Python 3.9作为运行时环境。在权限标签下,必须点击现有角色并选择在前一步中创建的角色。现在需要点击创建函数。现在Lambda函数已经创建,需要为这个函数编写代码文件。将在本地系统上做这件事,并将代码文件上传为zip。为此,需要创建一个文件夹并给它命名。然后需要在这个文件夹内安装一些依赖项;为此,需要使用终端。在这个文件夹内打开终端并输入“pip install -t ./Spotipy”。还需要为示例安装pandas,所以应该也使用“pip install -t ./ pandas”来安装它。

在此之后,必须创建一个名为lambda_function.py的新文件,并在该文件中编写以下代码:

import json import spotipy from spotipy.oauth2 import SpotifyClientCredentials import boto3 from datetime import datetime import pandas as pd def lambda_handler(event, context): Client_ID = "# Client ID" Client_Secret = "# Client Secret" credentials_client = SpotifyClientCredentials(client_id=Client_ID, client_secret=Client_Secret) sp = spotipy.Spotify(client_credentials_manager=credentials_client) top_50_global = sp.playlist("https://open.spotify.com/playlist/37i9dQZEVXbMDoHDwVN2tF") timestamp = [item['added_at'] for item in top_50_global['tracks']['items']] albums = [item['track']['album']['name'] for item in top_50_global['tracks']['items']] artists = [[artists['name'] for artists in item['track']['album']['artists']] for item in top_50_global['tracks']['items']] songs = [item['track']['name'] for item in top_50_global['tracks']['items']] song_duration = [item['track']['duration_ms'] for item in top_50_global['tracks']['items']] song_popularity = [item['track']['popularity'] for item in top_50_global['tracks']['items']] s_id = [item['track']['id'] for item in top_50_global['tracks']['items']] top_50_df = pd.DataFrame({ 's_id' : s_id, 'timestamp' : timestamp, 'songs' : songs, 'albums' : albums, 'artists' : artists, 'duration' : song_duration, 'popularity' : song_popularity }) dynamo_client = boto3.client('dynamodb') for index, row in top_50_df.iterrows(): row = eval(row.to_json()) Item = {'s_id' : {'S': row['s_id']+str(datetime.now().date())}, 'timestamp' : {'S' : row['timestamp']}, 'songs' : {'S' : row['songs']}, 'albums' : {'S' : row['albums']}, 'artists' : {'S' : str(row['artists'])}, 'duration' : {'S' : str(row['duration'])}, 'popularity' : {'S' : str(row['popularity'])}} dynamo_client.put_item(TableName='spotify', Item=Item) return { 'statusCode': 200, 'body': json.dumps('Spotify Table Updated') }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485