有很多选择可以做到这一点,我不知道哪个是最好的 . 我在开始时尝试做的如下:
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,不可能将文件或文件内容传递给 Cloud 形成 .
上面的方法是我能看到的其他两个选项中最简单的方法 .
-
将配置存储在SSM中,然后在ec2启动时将其恢复 .
-
创建一个Autoscaling和启动组,它接受文件路径,但它比我需要的更复杂:
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
知道如何以简单,通用和安全的方式做到这一点吗?给出的例子将是值得赞赏的 . 提前致谢 .