Go 开发人员基于亚马逊云科技进行构建的指南

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/BOA201-A_Go_developer_s_guide_to_building_on_AWS-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 Go 已成为现代云原生开发的通用语言。Go 为 Kubernetes 和 Docker 等颠覆性技术提供了强大的支持,因此在过去 5 年中跻身 "最受喜爱"(静态类型)编程语言前五名也就不足为奇了。本演示课程将深入探讨如何将 Go 与 Amazon Lambda、Amazon App Runner 和 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 等各种亚马逊云科技服务结合使用,以构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序、数据密集型工作负载和云基础设施。本讲座的目标是让您广泛了解如何在亚马逊云科技上使用 Go。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1400字,阅读时间大约是7分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 欢迎参加2022年re:Invent!作为亚马逊云科技的高级开发者倡导者,Fuzz来自热情洋溢的迪拜市,向各位问好。他表示,本次演讲的核心内容是关于如何在亚马逊云科技上使用Go编程语言构建应用程序的开发者指南。 Fuzz指出,这次演讲的内容是基于他与众多客户的深入沟通,尤其是那些正在使用Go编程语言构建应用程序并将其部署到各种计算平台上的客户。作为一场面向约200名观众的演讲,他希望能够涵盖一系列广泛的入门主题和资源,帮助刚开始在亚马逊云科技上使用Go的观众。 他还特别提到了他的合作伙伴Abhishek Gupta,他在构建这次演讲中做出了巨大贡献,但由于个人原因无法参加今年的re:Invent。Fuzz再次强调,这次演讲和演示是一个团队合作的成果,Abhishek做出了巨大的贡献。 接下来,Fuzz介绍了Go的语言优势,如静态类型、编译型编程语言等特点。由于这些特性,Go成为了构建API、基础设施、devops工具和数据处理管道的理想选择。这使得Go成为云原生应用的理想选择。 在亚马逊云科技上开始使用一门新语言时,开发者首先会查看SDK(软件开发工具包)的支持情况。亚马逊云科技提供了各种语言的SDK,具有一致的功能特征。这些SDK包含库,可以帮助开发者更快地使用亚马逊云科技服务来构建应用。 Fuzz解释了使用SDK时的典型请求生命周期,即调用者代码连接到SDK客户端,将对象序列化为HTTP请求发送到亚马逊云科技,然后从服务返回的响应被SDK解序列化为可被调用代码使用的对象。这种抽象层使得开发者在他们的首选语言中工作,而不需要处理更底层的网络调用。 亚马逊云科技的Go SDK已经存在了很长时间,它提供了加速应用开发的实用工具。Fuzz强调,SDK版本现在与Go语言版本保持一致,以确保兼容性。但是,开发者还需要确定如何将他们的Go应用部署到哪里和如何部署。 在计算领域,亚马逊云科技通过EC2提供虚拟机服务,通过ECS和EKS提供容器服务,并采用Fargate实现[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构。此外,App Runner还实现了混合模型。Fuzz表示,App Runner是一种专门为Web应用程序和API设计的全托管服务,它不仅涵盖了容器的部署,还包括流量路由和自动扩展。 App Runner已经支持Go语言的运行时。开发者只需将代码库指向App Runner,由App Runner负责打包、部署和提供安全的端点。这种方式相较于单独管理构建管道和基础设施,可以减少许多额外的开销。 Fuzz进一步解释了App Runner与Fargate之间的区别。App Runner负责更高级别的栈级操作,包括负载均衡器和语言运行时。开发者只需关注应用代码。通过一个简单的配置文件,可以定义运行时、构建步骤和应用入口点。 除了基本的部署需求外,应用程序通常还需要持久化数据。亚马逊云科技提供了多种专门设计的数据库,包括关系型、文档型、图形和其他类型。Go SDK可以直接与DynamoDB、Timestream和Neptune集成。此外,ElastiCache、[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail)和[Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for PostgreSQL和MySQL等服务也支持Go开发者使用的开源驱动程序。对于文档数据库,[Amazon DocumentDB](https://aws.amazon.com/cn/documentdb/?trk=cndc-detail)和[Amazon Keyspaces](https://aws.amazon.com/cn/keyspaces/?trk=cndc-detail)提供了与MongoDB和Apache Cassandra API兼容的选项,使得现有客户端能够连接。 在处理数据存储之后,Fuzz指出许多应用程序还需要数据处理和分析功能。诸如Amazon MSK、[Amazon Kinesis](https://aws.amazon.com/cn/kinesis/?trk=cndc-detail)和[Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail)等服务可以通过Kafka、Kinesis和OpenSearch客户端直接从Go中使用。另外,将这些服务作为事件源,可以用于编写Go的亚马逊云科技Lambda函数。 例如,DynamoDB Streams可以触发Lambda函数来处理域驱动设计中的数据修改。Fuzz表示,Lambda自定义运行时是处理Go函数的理想选择。通过将函数封装为直接调用Lambda运行时API的二进制文件,而不是使用托管的语言运行时,可以提供较小的部署。 近期,Lambda 已支持 Amazon Linux 2023 作为其运行时环境。这意味着任何能编译成本地二进制文件的语言,如 Go 和 Rust,都能受益于此。Fuzz 详细介绍了如何利用 Docker 镜像部署 Lambda 函数。这个过程包括一个多阶段构建流程,从应用程序编译开始,然后将其二进制文件复制到 Amazon Linux 或其他基础镜像中。 在人工智能应用领域,虽然 Python 通常被视为首选语言,但 Go 开发者也有机会参与。[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 为各种语言的开发者提供了实时代码建议和补全功能,包括 Go。要构建对话式 AI 应用,可以使用 [Amazon Lex](https://aws.amazon.com/cn/lex/?trk=cndc-detail) 和 [Amazon CodeGuru](https://aws.amazon.com/cn/codeguru/?trk=cndc-detail) 作为可选方案。 Fuzz 强调了 [Amazon DevOps Guru](https://aws.amazon.com/cn/devops-guru/?trk=cndc-detail) 和 [Amazon CodeGuru](https://aws.amazon.com/cn/codeguru/?trk=cndc-detail) 这两项服务的重要性,前者可以帮助检测操作问题,后者则用于代码审查和推荐改进。亚马逊云科技工具包插件将这些服务集成到 IDE 中,提升了开发者的工作效率。 针对生成性 AI,Fuzz 介绍了 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail),它提供一个用于大型语言模型的 API。通过 Bedrock SDK 和 Go 运行时,应用程序可以轻松调用这些 API。例如,Abhishek 发表了一篇详细的指南和博客文章,讲述了如何使用 Bedrock 构建 Go 原型。 Fuzz 还提到了一个常见需求,即实现具有历史记录和上下文跟踪的完整生成性应用。LangChain(一个基于 Python 的平台)可以通过提供不同功能的模块来满足这一需求。现在,Go 版本也已经推出,可以与 Bedrock 集成并管理对话状态。 在演示过程中,Fuzz 展示了一个使用 Go 构建并在 App Runner 上部署的短链接应用。它使用 DynamoDB 存储短代码和原始 URL 之间的映射。他展示了创建短链接、访问它们以及删除映射的过程。 接下来,一位专家展示了一个在Lambda上运行的Go语言的对话型AI原型,该原型采用了Bedrock来实现其生成式功能。为了存储聊天历史记录,它使用了DynamoDB,而LangChain则负责保持对话的上下文。在与一个名为Claude的模型进行了简短互动后,Fuzz展示了这个AI能够回忆之前的对话内容。 Fuzz向Claude介绍自己时说:“你好,我是Fuzz。” Claude回应道:“你好,Fuzz。我叫Claude。很高兴认识你。” 当Fuzz稍后询问他的名字时,Claude能够准确地回忆并回答:“你的名字是Fuzz。” 在回顾代码时,Fuzz详细解释了与Bedrock集成的各个组件,包括调用模型并实时传输响应的过程。他表示愿意在之后为对生成式AI感兴趣的开发者分享更多的详细信息。这次演示展示了一些可能的应用场景,这些应用场景可以利用亚马逊云科技的服务来构建。 在工具和生产效率方面,Fuzz提到了[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)作为一个选项,它可以根据上下文提供代码建议和完成工作。[Amazon DevOps Guru](https://aws.amazon.com/cn/devops-guru/?trk=cndc-detail)可以检测潜在的运维问题并发出警报。亚马逊云科技Toolkit插件可以与IDE集成,提高开发者的体验。 尽管相较于Python和JavaScript等语言,CodeWhisperer对Go的支持目前还有限,但Fuzz认为它仍然有助于发现导入和开始编写的代码片段。他展示了一个Demo,展示了CodeWhisperer如何为一个S3文件上传用例提出相关的亚马逊云科技SDK导入和客户初始化的建议。 正如Fuzz所总结的那样,亚马逊云科技为Go开发者提供了一揽子服务和功能,从SDK和部署到最先进的人工智能。通过计算、数据库、分析、[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)等等,开发人员可以在亚马逊云科技上高效地构建各种类型的应用程序。Fuzz再次强调,他演讲中提到的所有参考资料都将被共享,以便进一步学习。 **下面是一些演讲现场的精彩瞬间:** 亚马逊云科技为Go应用程序提供了支持,包括[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)开发和部署服务,从而让开发者无需管理底层基础设施。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_0.png) 由于其卓越的性能、可移植性和向后兼容性,Go已成为构建云原生应用的热门选择。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_1.png) 行业领导者们强调了亚马逊云科技的软件开发工具包(SDK)如何在多种编程语言间提供一致的功能集,使开发者能够轻松地开始基于亚马逊云科技的项目。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_2.png) 通过SDK客户端处理网络调用的能力,开发者可以专注于他们的应用逻辑。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_3.png) 此外,诸如ElastiCache、DocumentDB和Keyspaces等亚马逊云科技服务支持开源数据库协议和库,使得在内部部署和云环境之间实现代码可移植性成为可能。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_4.png) 领导者们还探讨了如何使用亚马逊云科技版本2以及S3存储桶的相关问题。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA201-A_Go_developer_s_guide_to_building_on_AWS/images/rebranded/BOA201-A_Go_developer_s_guide_to_building_on_AWS_5.png) ## 总结 一位演讲者发布了一份关于如何使用Go语言在亚马逊云科技(亚马逊云科技)上构建应用程序的开发人员指南。他首先解释了为何Go语言非常适合云原生应用,原因在于其卓越的性能、丰富的标准库以及能编译成单一可执行文件的特点。 接下来,他概述了将Go应用程序部署到亚马逊云科技上的多种方式,包括使用虚拟机、容器化技术、[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)功能的Amazon Lambda以及最新推出的App Runner服务。他强调,App Runner是Go开发者的理想选择,因为它原生支持Go运行时。 至于数据存储,演讲者讨论了亚马逊云科技上专为特定需求设计的各种数据库,这些数据库均支持Go SDK。同时,他还介绍了诸如Amazon MSK和Kinesis等数据处理选项,可与采用Go编写的Lambda函数无缝集成。 演讲者还演示了一个简单的Go网页应用程序,该程序已在App Runner上部署并使用DynamoDB进行数据存储。他展示了App Runner如何与GitHub仓库连接并自动完成部署过程。 最后,演讲者简要介绍如何在Go应用程序中利用亚马逊云科技的AI服务,例如通过Bedrock SDK和LangChain使用的亚马逊Bedrock。他还展示了一个与Lambda和Bedrock协同工作的聊天机器人示例,用户可以与之进行实时互动。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭