在ECS优化实例中执行UserData时出错



我将此userData放在LaunchConfiguration资源的userData property中,我遵循此AWS Doc中的步骤,这是脚本:

      "UserData":{  "Fn::Base64" : {
        "Fn::Join" : ["", [
          "#!/bin/bash -xvn",
          "yum -y install aws-cfn-bootstrapn",
          "/opt/aws/bin/cfn-init -v",
          "         --stack ", { "Ref": "AWS::StackName" },
          "         --resource LaunchConfig",
          "         --region ", { "Ref" : "AWS::Region" },"n",
          "yum -y install awslogs jqn",
          "# Inject the CloudWatch Logs configuration file contentsn",
          "cat > /etc/awslogs/awslogs.conf <<- EOFn",
          "[general]n",
          "state_file = /var/lib/awslogs/agent-statenn",
          "[/var/log/dmesg]n",
          "file = /var/log/dmesgn",
          "log_group_name = /var/log/dmesgn",
          "log_stream_name = {cluster}/{container_instance_id}nn",
          "[/var/log/messages]n",
          "file = /var/log/messagesn",
          "log_group_name = /var/log/messagesn",
          "log_stream_name = {cluster}/{container_instance_id}n",
          "datetime_format = %b %d %H:%M:%Snn",
          "[/var/log/docker]n",
          "file = /var/log/dockern",
          "log_group_name = /var/log/dockern",
          "log_stream_name = {cluster}/{container_instance_id}n",
          "datetime_format = %Y-%m-%dT%H:%M:%S.%fnn",
          "[/var/log/ecs/ecs-init.log]n",
          "file = /var/log/ecs/ecs-init.log.*n",
          "log_group_name = /var/log/ecs/ecs-init.logn",
          "log_stream_name = {cluster}/{container_instance_id}n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZnn",
          "[/var/log/ecs/ecs-agent.log]n",
          "file = /var/log/ecs/ecs-agent.log.*n",
          "log_group_name = /var/log/ecs/ecs-agent.logn",
          "log_stream_name = {cluster}/{container_instance_id}n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZnn",
          "[/var/log/ecs/audit.log]n",
          "file = /var/log/ecs/audit.log.*n",
          "log_group_name = /var/log/ecs/audit.logn",
          "log_stream_name = {cluster}/{container_instance_id}n",
          "datetime_format = %Y-%m-%dT%H:%M:%SZnn",
          "EOFn",
          "# 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.confn",
          "# Grab the cluster and container instance ARN from instance metadatan",
          "# Replace the cluster name and container instance ID placeholders with the actual valuesn",
          "sed -i -e "s/{cluster}/$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster')/g" /etc/awslogs/awslogs.confn",
          "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.confn",
          "service awslogs startn",
          "chkconfig awslogs onn"
        ]]}

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

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

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

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

如果将其移至:: init并创建文件和命令,则可能会得到更好的反馈

最新更新