paint-brush
整合 AWS Serverless API 和 CICD 输送管道的白皮书 所经@pchandel09
6,697 讀數
6,697 讀數

构建 AWS Serverless API 和 CICD 管道的指南

經過 Puneet Chandel11m2023/10/27
Read on Terminal Reader

太長; 讀書

本文演示了如何利用 AWS 服务开发无服务器 API,并在 AWS 环境中建立持续集成/持续部署 (CICD) 管道。
featured image - 构建 AWS Serverless API 和 CICD 管道的指南
Puneet Chandel HackerNoon profile picture


概述

本论文标准了怎么样去 借助 AWS 服务性性发展无服务性性器 API,并在 AWS 环境中国铁建立连续集合/连续安排 (CICD) 管道铺设。


第 1 部分:探索如何创建 Lambda 函数来处理来自 API 网关的请求并使用无服务器应用程序模型将数据保留在 DynamoDB 中。


第 2 部分:详细介绍在 AWS 中配置 CodeCommit 存储库并设置 CICD 管道的必要步骤,该管道在向存储库提交新更改后自动启动构建过程。

先决条件

这对于为此目,您都要有一个 AWS 账号(全免 费用就充足的了)。将施用下类 AWS 构件:


  • AWS API网关
  • AWS Lambda
  • AWS 动态数据库
  • AWS 代码提交
  • AWS 代码构建
  • AWS 代码管道
  • AWS S3
  • 其他 - CloudWatch、IAM 等


确认您的网上开发管理区域环境装置相应:


  1. 安装 AWS CLI :按照指南安装 AWS 命令行界面。


  2. 安装 AWS SAM(无服务器应用程序模型) :按照说明安装 SAM CLI。


  3. 选择IDE :使用IntelliJ或类似的IDE进行开发。我更喜欢IntelliJ


  4. 用于打包的 Maven :确保您已安装 Maven 以打包您的应用程序。


  5. 可选:Docker (如果您需要在本地测试 Lambda 函数):如果您计划在本地测试 Lambda 函数,请安装 Docker。


等方法和插件将组合某项必要性基础知识。

第 1 部分:开发

在整节课中,他们将见到食用 AWS SAM 新建进入項目的历程,包含成功净化处理步骤类、搭建、推进到 AWS 或食用 Postman 来检验


环境设置

  1. AWS 设置

    转到 AWS 有效控制面板 ,适用您的菅理员使用者凭据账号登录。
    1. 在 IAM 中创建用户
      • 在 IAM 中,创建一个专用于本地开发和 CLI/SAM 使用的用户。
    2. 创建 DynamoDB 表
      • 名称:“users”,主键:“id”(类型:字符串)
  2. 在本地计算机上配置 AWS CLI

    • 打开终端并运行$ aws configure
    • 提供之前创建的 IAM 用户的访问密钥和其他默认值
  3. 使用 AWS 无服务器应用程序模型 (SAM) 初始化项目

    • 打开终端并运行$ sam init
    • 选择 AWS 快速入门模板。
    • 选择“Hello World”示例。
    • 选择Java 11或17,包类型为zip,并使用Maven作为依赖管理器。
    • 使用 CloudWatch 和 XRay 启用日志记录和监控。
  4. 重命名项目:将项目重命名为您喜欢的名称。

  5. 在 IntelliJ 中打开项目:启动 IntelliJ,然后打开项目。

  6. 将依赖项添加到 pom.xml

    • 将必要的依赖项添加到pom.xml文件中。您只需添加 DynamoDB,因为 SAM 将自动包含其他依赖项。

       <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.12.573</version> </dependency> </dependencies>



编写处理程序类

面对lambda函数公式,插入图片sam主动自动生成的除理环节类,并插入以下的二维码;这才是一种简洁明了的二维码,面对合理内容,您很有可能可以运行更摸块化的二维码。
 public class UserRequestHandler implements RequestHandler<Map<String,String>, Map<String,String>> { private AmazonDynamoDB amazonDynamoDB; private String DYNAMODB_TABLE_NAME = "users"; private Regions REGION = Regions.US_EAST_1; @Override public Map<String,String> handleRequest(Map<String,String> input, Context context) { this.initDynamoDbClient(); LambdaLogger logger = context.getLogger(); logger.log("Input payload:" + input.toString()); String userId = UUID.randomUUID().toString(); String firstName= input.get("firstName"); String lastName= input.get("lastName"); Map<String, AttributeValue> attributesMap = new HashMap<>(); attributesMap.put("id", new AttributeValue(userId)); attributesMap.put("firstName", new AttributeValue(firstName)); attributesMap.put("lastName", new AttributeValue(lastName)); logger.log(attributesMap.toString()); amazonDynamoDB.putItem(DYNAMODB_TABLE_NAME, attributesMap); Map<String, String> response = new HashMap<>(); response.put("id", userId); response.put("firstName", firstName); response.put("lastName", lastName); return response; } private void initDynamoDbClient() { this.amazonDynamoDB = AmazonDynamoDBClientBuilder.standard() .withRegion(REGION) .build(); } }


更新 SAM 模板文件

SAM 模板免费资料在引入和的部署 AWS 修改部分推动着重中之重效应。更新换代该项目的资料。该资料中须得私信的重中之重属性是 Lambda 涵数标题和 API 网关端点。这些是无服务于器广泛应用方式系统的目标。


 AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > pc-aws-user-api Sample SAM Template for pc-aws-user-api # More info about Globals: //github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 20 MemorySize: 128 Tracing: Active Api: TracingEnabled: true Resources: UserRequestHandlerLambdaFunction: Type: AWS::Serverless::Function # More info about Function Resource: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: PcAwsUsersApi Handler: com.pc.aws.users.UserRequestHandler::handleRequest Runtime: java11 Architectures: - x86_64 MemorySize: 512 Environment: # More info about Env Vars: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object Variables: PARAM1: VALUE JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 # More info about tiered compilation //aws.amazon.com/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ Events: PcUsers: Type: Api # More info about API Event Source: //github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /users Method: post ApplicationResourceGroup: Type: AWS::ResourceGroups::Group Properties: Name: Fn::Sub: ApplicationInsights-SAM-${AWS::StackName} ResourceQuery: Type: CLOUDFORMATION_STACK_1_0 ApplicationInsightsMonitoring: Type: AWS::ApplicationInsights::Application Properties: ResourceGroupName: Ref: ApplicationResourceGroup AutoConfigurationEnabled: 'true' Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # //github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api PcAwsUsersApi: Description: API Gateway endpoint URL for Prod stage Value: !Sub "//${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/users/" UserRequestHandlerLambdaFunction: Description: Lambda Function ARN Value: !GetAtt UserRequestHandlerLambdaFunction.Arn UserRequestHandlerLambdaFunctionIamRole: Description: Implicit IAM Role created Value: !GetAtt UserRequestHandlerLambdaFunctionRole.Arn


使用 SAM 构建和部署代码

在 IntelliJ 中,使用 末端,然而来执行下类指令:

$ sam build

$ sam deploy –guided


出现了警告时,出示堆栈品牌“PcAwsUsersApi”,而后确定设置应用设置。


输出的将展示英文已新创建的 CloudFormation 堆栈,还将出示 API 网关端点。

测试API

在试验 API 前,请获取 DynamoDB 对 SAM 创办的 Lambda 游戏角色的访问就会管理员权限。
  • 在 AWS 控制台中打开 Lambda 函数。


  • 导航到“权限”,然后找到角色名称。


  • 向此角色添加“DynamoDBFullAccess”权限。


此操作步骤保证 Lambda 涵数兼备与 DynamoDB 交互技术需要备考的授权。




导航到 API Gateway,然后按照以下步骤获取您的服务的 URL:

  1. 转到 AWS 有效命令行中的 API 网关。
  2. 选购您的 API。
  3. 在左面边栏中,单击“步骤”。
  4. 在“一一阶段”下,取舍“Prod”一一阶段。
  5. 在阶段中,插入图片器个部分中,您将寻找“传参 URL”。全选此站点。



  • 启动邮递员应用程序。
  • 创建 POST 请求:使用以下详细信息设置新请求:
    • 方法:邮寄
    • URL:粘贴之前获取的 API 网关端点 URL。
  • 设置标头:添加任何必要的标头(例如Content-Type: application/json )。


  • 添加请求正文:创建一个 JSON 对象,表示要在请求中发送的用户数据。这将是您希望存储在 DynamoDB 中的数据。


第二部分 实施 CICD 管道

在本的部分中,.我将操作演示怎么样去便用 AWS CodeCommit、CodeBuild 和 CodePipeline 搭建 CICD 管线。该管线将开始其中一个搭建的时候,从内存表中收集编码,便用搭建系统文件开始搭建,并引起 CloudFormation 新创建堆栈。


创建 CodeCommit 存储库

登录账号 AWS,接着快速搜索 CodeCommit 精准服务。


在 AWS CodeCommit 中创建新存储库来存储项目的源代码。

将代码提交到存储库

在 IntelliJ 中,点击POS机并设置以內系统命令以上交在步驟 I 中打造的码
$ git init → This initialize local git $ git add . → This will stage files $ git commit -m "commit to CodeCommit"


将更改推送到远程存储库

从 aws 把控台另存 CodeCommit 数据库库 URL。
 $ git remote add origin <repo URL> $ git push --set-upstream origin master --> This will prompt for user/password



创建 AWS CodeBuild 项目

设立一位 CodeBuild 工程项目来选定如果创建选用应用。这还包括名词解释创建周围环境、创建系统命令和依赖感项。


  • 创建一个 S3 存储桶来存储构建文件。


  • 搜索 AWS Code Build,创建一个新项目,并提供 CodeCommit 作为代码源和 S3 用于工件存储


要设置 CodeBuild,您需要在项目目录中创建一个名为buildspec.yml的构建规范文件。该文件将包含 CodeBuild 的构建命令和说明。


您可以参考官方文档,了解有关创建buildspec.yml文件的详细说明。


 version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - sam build - sam package --output-template-file pcoutputtemplate.yaml --s3-bucket com-appsdev-pc-001 post_build: commands: - echo Build completed on `date` artifacts: files: - pcoutputtemplate.yaml


将新文档文件从原生精准投放到随意调节库。


时候,您能否创造出一个大型项目以查询编码是不是从 Repo 中领取并创造出一个了工件的。


创建代码管道

  • 在 AWS CodePipeline 中创建新管道。


  • 将管道连接到您的 CodeCommit 存储库作为源。


  • 配置管道以使用 CodeBuild 作为构建阶段。


  • 添加部署阶段以使用您创建的模板触发 CloudFormation。


pvc管道将按照 git 上传一键建立和谋划代码怎么用。



测试管道


  • 在 IntelliJ 中打开您的项目。


  • 对其中一个文件进行一些小的更改,例如添加另一个记录器行。


  • 将更改提交到本地 Git 存储库。


  • 将提交推送到 CodeCommit 存储库。


 $ git branch CR01 $ git checkout CR01 $ git add . $ git commit -m “CR01” $ git push --set-upstream origin CR01 You cand also create a pull request in aws code commit, just for simplicity I am merging from local $ git checkout master $ git merge --ff-only CR01 $ git push
  • 转到 AWS CodePipeline 控制台。


  • 您应该看到管道自动启动。它将从存储库中提取最新代码,使用 CodeBuild 构建项目,并使用 CloudFormation 进行部署。


  • 在 CodePipeline 仪表板中监控进度。


这将模拟系统对编码怎么用做好改换、将其推荐到随意调节库及及让 CICD 供水管道自行捕获和构建内容更新的编码怎么用的过程中 。







































完成合理利用 AWS API Gateway、Lambda、DynamoDB、CodeCommit、CodeBuild 和 CodePipeline,我们演示讲解了怎么样去搭配回弹力且自动化的布署具体流程。


谢谢您的阅览。衷心祝愿的无安全数据库服务器奋发努力要先拿到实现目标和改革创新!
바카라사이트 바카라사이트 온라인바카라