其他分享
首页 > 其他分享> > Day 28 - AWS Lambda 结合 Dynamodb

Day 28 - AWS Lambda 结合 Dynamodb

作者:互联网

Day 28 - AWS Lambda 结合 Dynamodb

有了 DynamoDB 可以存储资料,接着需要透过适当的方法去存取 DynamoDB ,于是 AWS 提供了 AWS Lambda 作为撰写程式的全托管服务。

AWS Lambda

AWS Lambda 是一种无伺服器的运算服务,可让软体设计者开发并执行程式但不必布建或管理伺服器、建立工作负载感知丛集扩展逻辑、维护事件整合或管理执行阶段。使用 Lambda,软体设计者可以透过虚拟方式执行任何类型的应用程式或后端服务,全部无需管理。只要以 ZIP 档案或容器映像上传您的程式码,Lambda 就可以自动并精准地分配运算执行力,并根据传入请求或事件执行您的程式码,适用于任何规模的流量。可以将自己的程式码设成可以从超过 200 种 AWS 服务和 SaaS 应用程式自动触发,或从任何 Web 或行动应用程式直接呼叫。可以用自己最喜爱的语言 (Node.js、Python、Go、Java 等) 写入 Lambda 函式,而且可以使用 AWS SAM 或 Docker CLI 等无伺服器和容器工具建置、测试和部署您的函式。

下图列出了传统布署与无服务器布署的差异,在无服务器的环境中,软体开发者可以更专心的在软体的开发跟维运上。云计算的其中一个优势是,使用者可以抽象化基础设施层,例如,选择一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型,并使用 Elastic Load Balancing 和 EC2 Auto Scaling 对其进行配置以处理需求。

然而,无伺服器计算进一步扩展了基础设施抽象,软体设计者可以专注于应用程式的代码,不必管理实例、操作系统或伺服器,无服务器环境处理运行和扩展高度可用的应用程式所需的一切工作。此外,借助无伺服器计算,您的代码仅在需要时运行,代码未运行时,您无需为任何基础设施付费。

在这里插入图片描述
图 1、传统布署与无服务器布署的差异

AWS Lambda 工作原理

下图说明 AWS Lambda 工作原理,事件源是向 AWS Lambda 发布事件的实体,而 Lambda 函式是提供的用于处理事件的自定义代码,AWS Lambda 执行 Lambda 函式,AWS Lambda 与其他 AWS 服务集成以调用函式,最后回应呼叫的事件源。

在这里插入图片描述
图 2、AWS Lambda 工作原理

下图说明 AWS Lambda 的内容组成包含了:

在这里插入图片描述
图 3、AWS Lambda 的内容组成

下图说明 AWS Lambda 的许可权类型,AWS Lambda 具有两种类型的许可权:

调用和执行许可权通过 AWS Identity and Access Management (IAM) 进行处理。

在这里插入图片描述
图 4、AWS Lambda 的调用许可权和执行许可权

AWS Lambda 结合 Amazon DynamoDB

如同图 3. AWS Lambda 的内容组成中说明,整个 AWS Lambda 应该包含了访问许可权、触发事件、代码、依赖项和库、配置,基于由浅入深原则,我们只处理必要的元素就是访问许可权和代码这两个部分,其他三个会在后续文章中提到。

访问许可权

我们要透过 AWS Lambda 存取 DynamoDB ,所以需要赋予 DynamoDB 的执行许可权,这个部分可以透过 IAM 来完成,在 IAM 中建立一个角色 (Role),并赋予它存取 DynamoDB 的许可权。

打开 IAM 管理控制台,点击左手边功能选单的 角色,接着点击右手边主画面的 建立角色 按钮,如下图所示。

在这里插入图片描述
图 5、IAM 管理控制台中新增角色

建立角色共有四个步骤:

  1. 选择使用案例
  2. 黏贴(attach)许可政策
  3. 建立标签
  4. 检阅

下图是选择使用案例画面,使用案例指的是主动的 AWS 服务,也就是透过这个服务来调用其他 AWS 服务,我们的案例就是透过 AWS Lambda 来读取 DynamoDB ,所以在这里要选择 Lambda,接着点击 下一个:许可

在这里插入图片描述
图 6、新增角色中选择使用案例

要存取的是 DynamoDB,所以在筛选政策中输入 dynamo ,会看到下方出现很多跟 dynamo 有关的政策,选取 AmazonDynamoDBFullAccess,并点击 下一个:标签。其实以我们的功能指会读取 DynamoDB,所以选取 AmazonDynamoDBReadOnlyAccess 更为洽当。

在这里插入图片描述
图 7、AWS Lambda 的调用许可权和执行许可权

标签部分我们就不设定,继续跳到下一个检阅画面,下图就是检阅画面,输入角色名称,特别注意一下底下的受信任实体与政策,这说明这个角色是可以被 AWS Lambda 所调用,且拥有完全存取 DynamoDB 的许可权。

在这里插入图片描述
图 8、AWS Lambda 的调用许可权和执行许可权

代码
进入 AWS Lambda 控制台,点击左手边功能选单的 函式 ,接着再点击右手边主画面的 建立函式,如下图所示。
在这里插入图片描述
图 9、AWS Lambda 的建立函式画面

输入函式名称,如 getDataFromDynamoDB ,指定执行时间所用的程式语言 Python 3.8,再指定执行角色,就是先前设定的角色,完成后点击 建立函式
在这里插入图片描述
图 10、AWS Lambda 的函式配置画面

进入函式编辑画面,点选上方的函式名称,再下方会有一个操作介面,选取 程式码 页签,再撰写程式码后记得要先布署 (Deploy),才可以进行测试 (Test):下方的画面分布:左手边为档案管理画面,右手边则是代码区。

在这里插入图片描述
图 11、AWS Lambda 函式编辑画面

撰写代码后要先进行测试来判断代码是否正确,点击 Test 会进入AWS Lambda 的测试配置画面,如下图所示,输入事件名称,测试内容不用修改,直接存储即可。

在这里插入图片描述
图 12、AWS Lambda 的测试配置画面

输入以下代码后,点击 Deploy 后,在点击 Test,就会出现代码运行结果,如下图,显示测试名称,回传结果,运行时间,运行时所用的记忆体数量,如果需要观察结果,还可以用 print() 来显示内容。

import json
import boto3

client = boto3.client('dynamodb')

def lambda_handler(event, context):
  data = client.get_item(
    TableName='fishInfoTbl',
    Key={
        'LatinName': {
          'S': 'Altolamprologus compressiceps'
        }
    }
  )
  print(data['Item'])
  response = {
      'statusCode': 200,
      'body': json.dumps(data['Item']),
      'headers': {
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
      },
  }
  return response

在这里插入图片描述
图 13、AWS Lambda 的测试结果

参考资料

标签:DynamoDB,28,代码,AWS,Dynamodb,许可权,函式,Lambda
来源: https://blog.csdn.net/m0_50614038/article/details/121060144