【发布时间】:2019-05-11 03:36:00
【问题描述】:
有很多选择可以做到这一点,我不知道哪个是最好的。我一开始尝试做的事情如下:
ServiceInstance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: !Ref AmiId, !Ref LatestOnescoutAmi ]
InstanceType: !Ref InstanceType
SubnetId: !ImportValue vpc-stack-PublicASubnet
SecurityGroupIds:
- !Ref ServiceSecurityGroup
KeyName: !Ref KeyName
UserData:
'Fn::Base64': !Sub |
#cloud-config
write_files:
- path: /etc/sysconfig/cloudformation
permissions: 0644
owner: root
content: |
STACK_NAME=${AWS::StackName}
AWS_REGION=${AWS::Region}
- path: /etc/datadog-agent/conf.d/mysql.d/conf.yaml
permissions: 0644
owner: dd-agent
content: |
init_config:
instances:
- server: some-db-host
user: some-admin
pass: some-password
port: 3306
tags:
- dbinstanceidentifier:someide
runcmd:
## enable datadog agent
- systemctl start datadog-agent
- systemctl start application.service
但后来我的/etc/datadog-agent/conf.d/mysql.d/conf.yaml 增长了,我有大约 13 个块,将它们硬编码在模板中并不好。最好保持模板通用并将配置文件作为参数传递。
但是,根据这个answer here,不可能将文件或文件内容传递给云形成。
上面的方法是我能想到的其他两个选项中最简单的。
-
将配置存储在 SSM 中,然后在 ec2 启动时将其取回。
-
创建一个接受文件路径但比我需要的更复杂的自动缩放和启动组:
LaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Metadata: AWS::CloudFormation::Init: configSets: service_configuration: - datadog_setup datadog_setup: files: /etc/datadog-agent/conf.d/mysql.d/conf.yaml: content: "@file://./config/conf-${Env}.yaml" mode: "000644" owner: "root" group: "root" commands: start_datadog: command: service datadog-agent start
知道如何以简单、通用和安全的方式执行此操作吗? 给出一个例子将不胜感激。 提前致谢。
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-cloudformation user-data datadog