Неизвестная переменная Terraform cloudformation_stack в UserData - PullRequest
0 голосов
/ 23 января 2019

У меня есть terraform для создания стека на AWS из файла yaml.

Мой ресурс "aws_cloudformation_stack" "gitlab-runner" имеет следующие параметры:

Token               = "GAdt_YVHgcp5QM_Nms65"
IAMRoleName         = "${module.gitlab-iam.iam_role_name}"

В моем файле yaml есть следующие утверждения:

  Parameters:
  GitLabRunnerToken:
Description: >-
  Registration token for GitLab Runner. Registration token must contain
  exactly 20 alphanumeric characters
AllowedPattern: '^[-_a-zA-Z0-9]*$'
Type: String
MinLength: '20'
MaxLength: '20'
NoEcho: true

  Resources:
  ...
  LaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
  ImageId: !FindInMap [AWSRegionToAMI, !Ref 'AWS::Region', AMIID]
  SecurityGroups:
  - !Ref SecurityGroup
  InstanceType: !Ref InstanceType
  IamInstanceProfile: !Ref GitlabRunnerInstanceProfile
  KeyName: !Ref KeyName
  BlockDeviceMappings:
  - DeviceName: /dev/xvdb
    Ebs:
      VolumeSize: !Ref 'VolumeSize'
      VolumeType: !Ref 'VolumeType'
      DeleteOnTermination: !Ref 'DeleteOnTermination'
  UserData:
    Fn::Base64: !Sub |
      #!/bin/bash -xe

      docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
      --non-interactive \
      --executor "docker" \
      --docker-image alpine:3 \
      --url "https://gitlab.affinitas.de" \
      --registration-token ${GitLabRunnerToken} \
      --description "docker-runner" \
      --tag-list "docker,aws" \
      --run-untagged \
      --locked="false"

Я не могу получить значение параметра GitLabRunnerToken и ввести его внутри UserData: Base64:! Sub |

Я получил ошибку ниже:

<template_file>:160,34-51: Unknown variable; There is no variable named "GitLabRunnerToken".

Я попытался получить значение, используя:

1. ${GitLabRunnerToken}
2. Ref: "GitLabRunnerToken"
3. !Ref: "GitLabRunnerToken"
4. !ImportValue "GitLabRunnerToken"

Но я все еще не могу получить и передать valeu для моих UserData, LaunchConfiguration.

Есть какие-нибудь подсказки?

Спасибо.

1 Ответ

0 голосов
/ 20 апреля 2019

Это потому, что вы используете формат $ {variable}.Таким способом вы передаете переменные в ваши скрипты cloud-init / userdata.Терраформ глупо утомляет, заменяя что-либо «$ {что-то}» значениями в секции vars в template_file.Потеряй {}, и ты будешь в порядке.

...