1

я поставил этот userData в userDataproperty из LaunchConfiguration ресурса, я последовал за шагами в этом AWS Doc, вот сценарий:Ошибка при выполнении USERDATA в ECS оптимизировано экземпляр

 "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 команды, которые мы используем для замены:

  • region в файле /etc/awslogs/awscli.conf
  • clustername в файле /etc/awslogs/awslogs.conf
  • container_instance_id в том же файле.

регион заменяется без проблем, но последние два из них не получают заменить, и когда я проверил файл, я получил пробелы вместо {cluster} и {container_instance_id}

Есть ли что-нибудь неправильно с синтаксисом в скрипте? Я пробовал те же команды непосредственно в терминале, и они отлично работали. Любая помощь действительно ценится. Спасибо.

+0

Вы пробовали спасаясь от "символов? (\ ') – spg

+0

@ Simon-Pierre Где мне нужно использовать символ экранирования? – Somar

+0

Я попытался избежать одиночных кавычек, но у меня возникла ошибка: 'q: ошибка: синтаксическая ошибка, неожиданная '/', ожидающая $ end (проблемы с коллизацией оболочки Unix?) По адресу , строка 1: /. | .ContainerInstanceArn/'и' jq: ошибка: синтаксическая ошибка, неожиданный '/', ожидающий $ end (проблемы с выпуском оболочки Unix?) В , строка 1: /. | .Cluster/' – Somar

ответ

0

Если вы перемещаете его :: Init и создать файл и команду для него вы можете получить лучшую обратную связь

+0

Пробовал, и это не сработало. – Somar

Смежные вопросы