在AWS上使用Cloud Formation运行InfluxDB
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2019年7月11日
导航至
编码训练营非常棒。我学到了很多,并使我能够获得开发者倡导者的角色。然而,尽管课程设置广泛,指导老师优秀,我仍然缺乏很多基础知识。我参加了数据科学训练营,这意味着我从未关注过后端,像许多训练营毕业生一样,我只使用过Heroku。通过主要云提供商创建和运行云实例是一个明显的差距。今天,我们将通过在AWS上使用Cloud Formation运行Influx 2.0 Docker镜像来填补这个差距。伴随此食谱的仓库可以在这里找到。
虽然我想要填补知识空白,这激励我将InfluxDB运行在EC2实例上,但这样做还有更多实际的好处。您可以使用telegraf将所有DevOps监控、应用监控以及Amazon CloudWatch指标发送到InfluxDB。有了InfluxDB,您可以实时查看您的AWS支出以降低成本。如果您想看看例子,我鼓励您阅读这篇白皮书,了解Houghton Mifflin Harcourt是如何做到这一点的。
EC2实例的设置
要开始,您需要创建一个AWS账户。接下来,您需要生成一个密钥对并下载私钥,这将允许您通过ssh登录到您的EC2实例。
首先,我确保我在正确的区域创建实例。我从AWS管理控制台首页右上角的下拉菜单中选择我的区域,us-east-1或弗吉尼亚北部。
接下来,我从左侧导航菜单中选择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的堆栈定义
栈定义从资源开始,它将是一个EC2实例类型,我们将其命名为AppNode,逻辑ID。然后我们包括实例的属性。我们选择t2.micro,这是最小(也是最便宜的!)实例类型,并从AMIs页面搜索Ubuntu 18.04以找到正确的AMI ID,亚马逊机器镜像。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类型。它将有两个属性。描述只是告诉我们这个资源做什么。安全组入站(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包括在内。
使用CloudFormation创建栈
我们终于准备好创建栈了。我们使用
我们使用
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频道上发布。最后,一如既往,这里还有一个大脑休息时间