AWS cloudformation 将参数传递给 EC2 环境

AWS cloudformation pass parameters to EC2 environment

我正在创建一个 EC2 实例模板,它将 运行 一个特定的应用程序。我希望能够将参数传递到我在模板 UserData 中执行的此应用程序的启动脚本。

理想情况下,我可以将指定的参数转换为: A) 我将在启动脚本中访问的 ec2 实例上的环境变量 B) 我的 UserData 脚本中的可用变量。

这是我想要完成的任务的简化模板...还没有找到任何 aws 文档说它可以完成:

Resources:
  GitlabRunner:
    Type: "AWS::EC2::Instance"
    Description: "AWS stack for a serivce"
    Properties:
      UserData:
        Fn::Base64: "#!/bin/bash\nmy-service $TAGS"

Parameters:
  Tags:
    Type: String
    Default: asd
    Description: Comma delimited list of tags

这种情况可以使用 !Sub 实现(注意替换语法 ${..})。例如:

Resources:
  GitlabRunner:
    Type: "AWS::EC2::Instance"
    Description: "AWS stack for a serivce"
    Properties:
      UserData:
        Fn::Base64: !Sub "#!/bin/bash\nmy-service ${Tags}"

Parameters:
  Tags:
    Type: String
    Default: asd
    Description: Comma delimited list of tags

您可以避免使用 | 在一行中输入所有内容。例如:

...
UserData:
  Fn::Base64: !Sub |
    #!/bin/bash
    my-service ${Tags}
    echo hello world