在AWS上使用Cloud Formation运行InfluxDB

导航至

编码训练营非常棒。我学到了很多,并使我能够获得开发者倡导者的角色。然而,尽管课程设置广泛,指导老师优秀,我仍然缺乏很多基础知识。我参加了数据科学训练营,这意味着我从未关注过后端,像许多训练营毕业生一样,我只使用过Heroku。通过主要云提供商创建和运行云实例是一个明显的差距。今天,我们将通过在AWS上使用Cloud Formation运行Influx 2.0 Docker镜像来填补这个差距。伴随此食谱的仓库可以在这里找到。

虽然我想要填补知识空白,这激励我将InfluxDB运行在EC2实例上,但这样做还有更多实际的好处。您可以使用telegraf将所有DevOps监控、应用监控以及Amazon CloudWatch指标发送到InfluxDB。有了InfluxDB,您可以实时查看您的AWS支出以降低成本。如果您想看看例子,我鼓励您阅读这篇白皮书,了解Houghton Mifflin Harcourt是如何做到这一点的。

EC2实例的设置

要开始,您需要创建一个AWS账户。接下来,您需要生成一个密钥对并下载私钥,这将允许您通过ssh登录到您的EC2实例。

running influxdb on aws with cloud formation - aws management console

首先,我确保我在正确的区域创建实例。我从AWS管理控制台首页右上角的下拉菜单中选择我的区域,us-east-1或弗吉尼亚北部。

接下来,我从左侧导航菜单中选择EC2。

running influxdb on aws with cloud formation - ec2

现在,我可以从左侧的导航菜单中选择密钥对,并创建一个密钥对。

running influxdb on aws with cloud formation - key pairs

从导航菜单中选择密钥对将带我们到密钥对页面,在这里我们可以找到我们已创建的所有密钥对并创建新的密钥。

running influxdb on aws with cloud formation - create key pairs

现在,我将密钥移动到我将指定Cloud Formation yaml配置的同一目录中。

cp ~/Downloads/Influx20.pem ~/cloudformation/deploy-aws
touch stack.yml

请记住,使用以下命令更改此密钥的文件权限:

chmod 400 Influx20.pem

接下来,我们需要AWS CLI的访问密钥ID和密钥。从安全菜单下的服务菜单转到IAM,创建一个用户并授予用户所有权限。

running influxdb on aws with cloud-formation access - key id screenshots

我们可以使用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。

running influxdb on aws with cloud formation - ami id

我们需要添加一个安全组,这是一个虚拟防火墙,用于控制流量。我们通过使用内建的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。

running influxdb on aws with cloud formation - public ip screenshot

通过使用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)。

running-influxdb-on-aws-with-cloud-formation - influxdb 2.0 setup

结论

我希望这本烹饪书能帮助你完成清单上的另一项技能。如果您有任何问题,请在我们的社区网站或slack频道上发布。最后,一如既往,这里还有一个大脑休息时间

anais artwork