Не удается записать содержимое файла в облачной информации UserData AWS EC2 - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу получить содержимое файла в UserData без предоставления встроенного содержимого, как показано ниже, но я получаю путь к файлу в содержимом, когда ec2 загружается вместо содержимого файла.

Вот фрагмент моего шаблона:

  ServiceInstance:
    Type: "AWS::EC2::Instance"
    Properties:
      . . . 
      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/path-to-file/conf.yaml
              permissions: 0644
              owner: root
              content: "@file://./config/conf-${Env}.yaml"
          runcmd:
            ## run some commands

когда я ssh к ec2 и проверяю содержимое файла, я получаю это:

[ec2-user@ec2ip ~]$ cat /etc/path-to-file/conf.yaml
@file://./config/conf-dev.yaml

Я проверил cloud initдокументы , но не могу найти что-то связанное.есть идеи, что я тут не так сделал?

1 Ответ

0 голосов
/ 01 марта 2019

Кодирует содержимое файла в base64 и передает его в качестве аргумента.Cloud Init расшифрует строку b64 .Будьте осторожны с ограничениями размера облачной информации для шаблона и переменных.

Parameters:
  ConfContent:
    Type: String
    Description: "Conf content in base64 format."

Resources:
  ServiceInstance:
    Type: "AWS::EC2::Instance"
    Properties:
      . . . 
      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/path-to-file/conf.yaml
                permissions: 0644
                owner: root
                content: ${CONF_CONTENT}
                encoding: b64
            runcmd:
              ## run some commands
          - CONF_CONTENT: !Ref ConfContent

Затем предоставьте содержимое файла как свойство:

aws cloudformation create-stack \
  --stack-name "mystack" \
  --template-body "template.yaml" \
  --parameters \
    ParameterKey=ConfContent,ParameterValue=\"$(base64 -w0 ./config/conf-dev.yaml)\"
...