Есть много вариантов сделать это, и я не знаю, какой из них лучший.Сначала я попытался сделать следующее:
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 блоков, и нехорошо помещать их жестко в шаблоне.Лучше оставить шаблон универсальным и передать конфигурационный файл в качестве параметра.Но, согласно этому ответу здесь , невозможно передать файл или содержимое файла в формирование облака.
Способ, описанный выше, является самым простым, который я вижу среди других двух вариантов, которые я могу себе представитьо.
- Сохраните конфигурацию в 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
Есть идеи, как сделать это простым, универсальным и безопасным способом?Приведенный пример будет оценен.Заранее спасибо.