【问题标题】:Error while executing the userData in ECS optimized instance在 ECS 优化实例中执行 userData 时出错
【发布时间】:2017-07-07 14:16:33
【问题描述】:

我把这个userData放在LaunchConfiguration资源的userDataproperty中,我按照这个AWS Doc中的步骤,这是脚本:

      "UserData":{  "Fn::Base64" : {
        "Fn::Join" : ["", [
          "#!/bin/bash -xv\n",
          "yum -y install aws-cfn-bootstrap\n",
          "/opt/aws/bin/cfn-init -v",
          "         --stack ", { "Ref": "AWS::StackName" },
          "         --resource LaunchConfig",
          "         --region ", { "Ref" : "AWS::Region" },"\n",
          "yum -y install awslogs jq\n",
          "# Inject the CloudWatch Logs configuration file contents\n",
          "cat > /etc/awslogs/awslogs.conf <<- EOF\n",
          "[general]\n",
          "state_file = /var/lib/awslogs/agent-state\n\n",

          "[/var/log/dmesg]\n",
          "file = /var/log/dmesg\n",
          "log_group_name = /var/log/dmesg\n",
          "log_stream_name = {cluster}/{container_instance_id}\n\n",

          "[/var/log/messages]\n",
          "file = /var/log/messages\n",
          "log_group_name = /var/log/messages\n",
          "log_stream_name = {cluster}/{container_instance_id}\n",
          "datetime_format = %b %d %H:%M:%S\n\n",

          "[/var/log/docker]\n",
          "file = /var/log/docker\n",
          "log_group_name = /var/log/docker\n",
          "log_stream_name = {cluster}/{container_instance_id}\n",
          "datetime_format = %Y-%m-%dT%H:%M:%S.%f\n\n",

          "[/var/log/ecs/ecs-init.log]\n",
          "file = /var/log/ecs/ecs-init.log.*\n",
          "log_group_name = /var/log/ecs/ecs-init.log\n",
          "log_stream_name = {cluster}/{container_instance_id}\n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZ\n\n",

          "[/var/log/ecs/ecs-agent.log]\n",
          "file = /var/log/ecs/ecs-agent.log.*\n",
          "log_group_name = /var/log/ecs/ecs-agent.log\n",
          "log_stream_name = {cluster}/{container_instance_id}\n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZ\n\n",

          "[/var/log/ecs/audit.log]\n",
          "file = /var/log/ecs/audit.log.*\n",
          "log_group_name = /var/log/ecs/audit.log\n",
          "log_stream_name = {cluster}/{container_instance_id}\n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZ\n\n",

          "EOF\n",
          "# Set the region to send CloudWatch Logs data to (the region where the container instance is located)\n",
          "sed -i -e \"s/region = us-east-1/region = $(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | sed s'/.$//')/g\" /etc/awslogs/awscli.conf\n",
          "# Grab the cluster and container instance ARN from instance metadata\n",
          "# Replace the cluster name and container instance ID placeholders with the actual values\n",
          "sed -i -e \"s/{cluster}/$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster')/g\" /etc/awslogs/awslogs.conf\n",
          "sed -i -e \"s/{container_instance_id}/$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $2}' )/g\" /etc/awslogs/awslogs.conf\n",
          "service awslogs start\n",
          "chkconfig awslogs on\n"
        ]]}

一切正常,文件/var/log/cloud-init-output.log 没有给出任何错误,但有一件事没有得到很好的执行: 在脚本中,我们有 3 个 sed 用于替换的命令:

  • 文件/etc/awslogs/awscli.conf中的region
  • 文件/etc/awslogs/awslogs.conf中的clustername
  • container_instance_id 在同一个文件中。

区域被替换没有问题,但最后两个没有被替换,当我检查文件时,我得到空格而不是{cluster}{container_instance_id}

脚本中的语法有什么问题吗?我直接在终端中尝试了相同的命令,它们运行良好。非常感谢任何帮助。谢谢。

【问题讨论】:

  • 你试过转义'字符吗? (\')
  • @Simon-Pierre 我需要在哪里使用转义字符?
  • 我试图转义单引号,但出现错误:q: error: syntax error, unexpected '/', expecting $end (Unix shell quoting issues?) at &lt;top-level&gt;, line 1: /. | .ContainerInstanceArn/jq: error: syntax error, unexpected '/', expecting $end (Unix shell quoting issues?) at &lt;top-level&gt;, line 1: /. | .Cluster/

标签: json amazon-web-services sed amazon-cloudformation amazon-cloudwatch


【解决方案1】:

如果你将它移动到 ::Init 并为它创建一个文件和一个命令,你可能会得到更好的反馈

【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2013-07-13
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多