在 AWS 上使用 Cloud Formation 运行 InfluxDB
作者:Anais Dotis-Georgiou / 产品, 用例, 开发者
2019年7月11日
导航至
编程训练营很棒。我学到了很多,并且它使我能够担任开发者倡导者的角色。然而,尽管课程内容广泛且导师优秀,但我仍然缺乏很多基础知识。我参加了一个数据科学训练营,这意味着我从未专注于后端,并且像许多训练营毕业生一样,只使用过 Heroku。通过主要的云提供商创建和运行云实例是一个明显的差距。今天,我们将通过在 AWS 上使用 Cloud Formation 运行 Influx 2.0 Docker 镜像来填补这个空白。本操作指南随附的仓库可以在这里找到。
虽然我填补知识空白的愿望促使我在 EC2 实例上运行 InfluxDB,但这样做还有更实际的优势。您可以使用 Telegraf 将所有 DevOps 监控、应用程序监控和 Amazon CloudWatch 指标发送到 InfluxDB。借助 InfluxDB,您可以实时查看您的 AWS 支出以降低成本。如果您正在寻找示例,我建议您阅读这份白皮书,了解 Houghton Mifflin Harcourt 如何实现这一目标。
EC2 实例的设置
首先,您需要创建一个 AWS 账户。接下来,您需要生成一个密钥对并下载私钥,这将允许您 ssh 连接到您的 EC2 实例。
首先,我确保我在正确的区域创建实例。我从 AWS 管理控制台登录页面右上角的下拉菜单中选择我的区域,us-east-1 或 N. Virginia。
接下来,我从左侧导航栏的“服务”菜单中选择 EC2。
现在我可以从左侧导航菜单中选择“密钥对”,并创建一个密钥对。
从导航菜单中选择“密钥对”会将我们带到“密钥对”页面,在那里我们可以找到所有已创建的密钥对并创建新密钥。
现在,我将把我的密钥移动到我将指定 Cloud Formation yaml 配置的同一目录中。
cp ~/Downloads/Influx20.pem ~/cloudformation/deploy-aws
touch stack.yml
请记住更改此密钥的文件权限
chmod 400 Influx20.pem
接下来,我们需要 AWS CLI 的访问密钥 ID 和密钥。从“服务”菜单下的“安全”导航到 IAM,创建一个用户并授予该用户所有权限。
我们可以使用 pip3 install awscli
安装 AWS CLI。使用 aws configure --profile
配置 aws 配置文件,并根据提示提供访问密钥 ID、密钥和区域 (us-east-1)。您可以忽略输出格式。
创建堆栈定义以安装 InfluxDB
堆栈定义以“Resources”开始,这将是一个 EC2 实例类型,我们将其命名为 AppNode,即逻辑 ID。然后我们包含实例的“Properties”。我们选择 t2.micro,最小(也是最便宜!)的实例类,并通过从 AMIs 页面搜索 Ubuntu 18.04 来找到正确的 AMI ID,即 Amazon Machine Image。AMI ID 会根据您的区域而变化,因此请确保您的区域在导航栏的右上角正确显示。最后,我们还需要包含我们生成的密钥对的名称,Influx20。
我们需要添加一个安全组,这是一个控制流量的虚拟防火墙。我们通过使用返回资源属性的固有 Ref 函数来实现这一点。
Resources:
AppNode:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-024a64a6685d05041
KeyName: Influx20
SecurityGroups:
- !Ref AppNodeSG
我们将 AppNodeSG 定义为具有 ECS::AWS::SecurityGroup 类型。它将具有两个属性。“description”只是告诉我们这个资源做什么。 SecurityGroupIngress 只是入站连接属性的数组。我们将使用 tcp 协议公开 HTTP 端口 80,并使其在任何地方都可访问。
AppNodeSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: for the app nodes that allow ssh
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0
最后,我们创建一个在 bash shell 上运行的脚本。它将安装 Docker 并拉取 InfluxDB 2.0.0 alpha 镜像。
UserData: !Base64 |
#!/bin/bash
apt-get update -qq
apt-get install -y apt-transport-https ca-certificates
apt-key adv apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
apt-get update -qq apt-get purge lxc-docker || true
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt-get -y install linux-image-extra-$(uname -r) linux-image-extra-virtual
apt-get -y install docker-ce
usermod -aG docker unbuntu
docker image pull quay.io/influxdb/influxdb:2.0.0-alpha
docker container run -p 80:9999 quay.io/influxdb/influxdb:2.0.0-alpha
我们将此作为我们 App Node 资源的 UserData 包含在内。
使用 Cloud Formation 创建堆栈
我们终于准备好创建堆栈了
我们使用以下命令创建堆栈
aws cloudformation create-stack --stack-name demo --region us-east-1 --template-body file://$PWD/stack.yml
我们通过检查我们的实例来验证我们是否成功创建了堆栈并获取了公有 IP。
在我们使用 ssh -l ubuntu -i Influx20.pem 52.71.129.176
ssh 进入实例后,我们使用以下命令 wget 并安装 Telegraf
wget <a href="https://dl.influxdata.com/telegraf/releases/telegraf_1.10.4-1_amd64.deb">https://dl.influxdata.com/telegraf/releases/telegraf_1.10.4-1_amd64.deb</a>
sudo dpkg -i telegraf_1.10.4-1_amd64.deb
现在我们准备好完成 2.0 设置步骤以创建 Telegraf 配置文件。完成后,我们最终可以查看我们的系统统计信息或 Docker 指标(取决于您如何设置 Telegraf)。
结论
我希望这份操作指南能帮助您在技能列表中再添一项。如果您有任何问题,请在我们的社区站点或 Slack 频道中发布。最后,和往常一样,这里是另一个脑筋急转弯