本章提供了设置 AWS 环境以及 Go 运行时和开发环境的指南。将向您介绍功能强大的 AWS CLI,它将使部署无服务器应用更加高效,并极大地提高您的生产效率。
此外,还将为您提供一套关于如何选择 Go集成开发环境(IDE的提示和建议。
在继续安装和配置 AWS 和 Go 环境之前,建议您在笔记本电脑(Windows、Linux 或 macOS X)上预装 Python 2 版本 2.6.5+或 Python 3 版本 3.3+并设置 AWS 帐户,以便轻松执行给定命令。本章的代码包托管在 GitHub 上的https://github.com/PacktPublishing/Hands-On-serverless-Applications-with-Go 。
本节将指导您如何安装和配置 AWS 命令行。CLI 是一个可靠的强制性工具,将在后续章节中介绍;通过自动化 Lambda 功能和其他 AWS 服务的部署和配置,这将为我们节省大量时间。
AWS CLI 是从终端会话管理 AWS 服务和资源的强大工具。它构建在 AWS API 之上,因此可以通过 AWS 管理控制台完成的所有操作都可以通过 CLI 完成;这使它成为一个方便的工具,可用于通过脚本自动化和控制 AWS 基础设施。后面的章节将提供有关使用 CLI 管理 Lambda 功能和围绕 Lambda 创建其他 AWS 服务的信息。
让我们看一下 AWS CLI 的安装过程;您可以在AWS 管理控制台部分找到有关其配置和测试的信息。
首先,打开一个新的终端会话,然后使用pip
Python 软件包管理器安装awscli
的最新稳定版本:
pip install awscli
如果已安装 CLI,出于安全考虑,建议您升级到最新版本:
pip install --upgrade awscli
Windows 用户也可以使用 MSI 安装程序(https://s3.amazonaws.com/aws-cli/AWSCLI64.msi 或https://s3.amazonaws.com/aws-cli/AWSCLI32.msi ,不需要安装 Python。
*安装后,您需要将 AWS 二进制路径添加到PATH
环境变量中,如下所示:
- 对于 Windows,按 Windows 键并键入环境变量。在“环境变量”窗口中,突出显示系统变量部分中的
PATH
变量。编辑该变量并在最后一个路径后添加一个路径,在最后一个路径后添加分号,输入安装 CLI 二进制文件的文件夹的完整路径。 - 对于 Linux、Mac 或任何 Unix 系统,打开 shell 的配置文件脚本(
.bash_profile
、.profile
或.bash_login
,并在文件末尾添加以下行:
export PATH=~/.local/bin:$PATH
最后,将配置文件加载到当前会话中:
source ~/.bash_profile
通过打开新的终端会话并键入以下命令,验证 CLI 是否已正确安装:
aws --version
您应该能够看到 AWS CLI 版本;在我的情况下,安装了 1.14.60:
让我们测试一下,并以法兰克福地区的 Lambda 函数为例:
aws lambda list-functions --region eu-central-1
上一个命令将显示以下输出:
使用 CLI 时,通常需要 AWS 凭据才能使用 AWS 服务进行身份验证。有多种方法可以配置 AWS 凭据:
-
环境凭证:
AWS_ACCESS_KEY_ID
和AWS_SECRET_KEY
变量。 -
共享凭证文件:
~/.aws/credentials
文件。 -
IAM 角色:如果您在 EC2 实例中使用 CLI,则无需在生产中管理凭据文件。
在下一节中,我将向您展示如何使用AWS 身份和访问管理(IAM服务为 CLI 创建新用户。
IAM 是一项允许您管理用户、组及其对 AWS 服务的访问级别的服务。
强烈建议您不要将 AWS 根帐户用于除计费任务以外的任何任务,因为它拥有创建和删除 IAM 用户、更改计费、关闭帐户以及对您的 AWS 帐户执行所有其他操作的最终权限。因此,我们将创建一个新的 IAM 用户,并按照最低特权的原则授予其访问正确 AWS 资源所需的权限。在这种情况下,用户将拥有对 AWS Lambda 服务的完全访问权:
- 登录 AWS 管理控制台(https://console.aws.amazon.com/console/home )使用您的 AWS 电子邮件地址和密码。
- 从安全、身份&合规部分打开IAM控制台:
- 从导航窗格中,选择用户并单击添加用户按钮,然后为用户设置名称并选择编程访问(如果希望同一用户访问控制台,还可以选择 AWS 管理控制台访问):
- 在“设置权限”部分中,将 AWSLambdaFullAccess 策略分配给用户:
- 在最后一页上,您应该看到用户的 AWS 凭据:
确保将访问密钥保存在安全位置,因为您将无法再次看到它们:
我们的 IAM 用户已创建。让我们提供访问密钥和密钥以及默认区域。这可以使用aws configure
命令完成:
CLI 将在~/.aws/credentials
(或 Windows 上的%UserProfile%\.aws/credentials
中)的本地文件中存储上述命令中指定的凭据,其中包含以下内容:
[default]
aws_access_key_id = AKIAJYZMNSSSMS4EKH6Q
aws_secret_access_key = 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
region=eu-central-1
应该是这样,;尝试以下命令,如果您有任何 Lambda 函数,您应该能够看到它们列出:
默认输出是 JSON。您可以通过添加--output
选项来更改命令的输出格式(支持值:json、表格、文本)。以下是以表格形式显示的结果:
此外,您可以使用--query
选项从这个 JSON 文档中提取输出元素。例如,要输出函数名属性,可以使用以下命令:
aws lambda list-functions --query Functions[].FunctionName
输出应类似于以下内容:
可以使用jq
之类的工具来操作 JSON。它使我们能够对 CLI 返回的 JSON 进行过滤、映射、计数和执行其他高级 JSON 过程:
aws lambda list-functions | jq '.Functions[].FunctionName'
控制台将显示以下输出:
本节将引导您了解如何在多个平台上下载和安装 Go,如何构建一个简单的 Hello World 应用,以及如何使用 IDE 加速 Go 开发。在此过程中,您将熟悉在 Go 中编写 Lambda 函数所需的 Go 命令。
从 Go 下载页面(下载适合您的操作系统和体系结构的软件包 https://golang.org/dl/ :
- **对于 macOS X:**下载
goVersion.darwin.amd64.pkg
文件并按照安装提示进行操作。要使更改生效,您可能需要重新启动任何打开的终端会话。 - 对于 Windows:下载 MSI 安装程序并按照向导操作。安装程序将为您设置环境变量。
- 对于 Linux:打开一个新的终端会话并键入以下命令(撰写本文时,当前版本为 1.10):
**```go curl https://golang.org/doc/install?download=go1.10.1.linux-amd64.tar.gz -O /tmp/go1.10.tar.gz tar -C /usr/local -xzf /tmp/go1.10.tar.gz
前面的命令将使用`curl`*下载最新的 Go 包。*然后使用`tar`打开包装。接下来,通过将以下行添加到 shell 的概要脚本中,将`/usr/local/go/bin`添加到`PATH`环境变量中:
```go
export PATH=$PATH:/usr/local/go/bin
如果在自定义目录而不是/usr/local
中安装 Go,则必须将GOROOT
环境变量设置为指向安装它的目录:
export GOROOT=PATH/go
export PATH=$PATH:$GOROOT/bin
然后,您必须重新加载用户配置文件以应用更改:
$ source ~/.bash_profile
现在 Go 已经正确安装,并且为您的机器设置了路径,让我们测试一下。创建一个工作区,我们将在其上构建本书中的无服务器应用:
mkdir -p $HOME/go/src
Go 源代码位于工作区中;默认为$HOME/go
。如果要使用其他目录,则需要设置GOPATH
环境变量。
要验证 Go 工作区配置是否正确,可以运行go env
命令:
如果设置了GOPATH
变量,您就可以开始了。在工作区内,使用具有以下内容的vim
创建一个main.go
文件:
package main
import "fmt"
func main(){
fmt.Println("Welcome to 'Hands-On serverless Applications with Go'")
}
使用以下命令编译文件:
go run main.go
文件运行成功后显示Welcome to 'Hands-On serverless Applications with Go'
;这表明 Go 正在正确编译文件。
Go 是一种编译语言,因此您可以使用以下命令为应用生成单个二进制文件:
go build -o app main.go
如果要为特定操作系统和体系结构构建可执行文件,可以覆盖GOOS
和GOARCH
参数:
GOOS=linux GOARCH=amd64 go build -o app main.go
使用 vim 文本编辑器编辑 Go 不是最佳选择;因此,在下一节中,我将向您展示如何使用 VSCode 作为 Go 编辑器来提高您的开发效率/体验。
拥有 IDE 可以提高开发速度并节省大量时间,这些时间可以用来调试和搜索正确的语法。此外,您还可以轻松导航和搜索 Lambda 函数代码。
但是我们应该用哪一个呢?有很多解决方案;这些解决方案可分为三大类:
- IDEs:格兰德、日食、科莫多
- 编辑:Atom、VSCode、升华文本
- 基于云的 IDE:Cloud9、Codeanywhere、CodeEnvy
Go 生态系统提供了各种编辑器和 IDE;确保你和他们一起玩,找到最适合你的
我选择使用 Visual Studio 代码(VS 代码),因为它符合我的所有标准:
- 开源
- 支持多种语言
- 插件驱动工具
- 伟大的社区和支持
VSCode 对 Go 开发有强大的支持,包括语法突出显示开箱即用、内置 GIT 集成、所有 Go 工具的集成以及 Delve 调试器。
除了 Go 的本机支持外,开源社区还构建了一些有用且功能强大的插件,您可以从 VSCode 市场安装这些插件:
VSCode 也是跨平台的,因此您可以在 Mac、Linux 或 Windows 上使用它。使用 Visual Studio 代码,您可以使用一系列可用插件来扩展功能,这些插件附带了许多功能强大的附加功能,例如:
- 自动完成:当您键入 Go 文件时,您可以看到 IntelliSense 为您提供建议的完成方式:
- 签名帮助:将鼠标悬停在任何变量、函数或结构上都会为您提供该项的信息,例如文档、签名、预期输入和输出参数。例如,下面的屏幕截图显示了通过悬停在
main.go
文件上获取的Println
信息:
- 代码格式:它使用gofmt工具,在保存时自动格式化您的 Go 源代码,使您的代码更易于编写、阅读和维护。
- **集成调试器:**可以设置断点和条件断点,查看每帧中的堆栈跟踪和局部、全局变量。
- 自动导入 Go 包:保存时自动导入所需 Go 包。
- 测试运行程序:它允许您运行、停止和重新启动单元测试以及集成测试。
我期待 JetBrains 稳定发布 GoLand:它看起来是一个非常有前途的 Go IDE,我很高兴看到它的发展方向。
这就是一切!您已经准备好在 Go 中开始构建和部署无服务器应用。
在本章中,我们学习了如何安装、配置和使用 AWS CLI。当涉及到管理 AWS 服务和自动化 Lambda 功能的部署时,此工具将非常有用。然后,我们介绍了如何使用最少的权限从 IAM 创建用户和生成 AWS 凭据。这样,如果您的访问密钥最终落入坏人手中,那么造成伤害的能力是有限的。此外,我们还学习了如何设置 Go 环境,逐步安装了适用于多种平台(Windows、macOS X 和 Linux)的 Go,并在 Go 中编译了我们的第一个 Hello World 应用。在此过程中,我们介绍了 Go 中最重要的命令,这将帮助您轻松地理解后面的章节。
在下一章中,我们将最终弄脏我们的手,并在 Go 中编写我们的第一个 Lambda 函数。
- AWS CLI 不支持哪种格式?
- JSON
- 桌子
- XML
- 文本
- 是否建议使用 AWS 根帐户与 AWS 进行日常交互?若有,原因为何?
- 使用 AWS CLI 需要设置哪些环境变量?
- 如何将 AWS CLI 与命名配置文件一起使用?
- 解释 GOPATH 环境变量。
- 哪个命令行命令在 Go 中编译程序?
go build
go run
go fmt
go doc
- 什么是围棋工作区?*****