1

최적화, 나는이 AWS Doc의 단계를 따라, 여기에 스크립트입니다오류 동안 나는 <code>LaunchConfiguration</code> 자원의 <code>userData</code><code>property</code>이 <code>userData</code>을 넣어 예를

 "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" 
     ]]} 

모든 것이 잘 작동의

    : 우리는 우리가 대체하는 데 사용하는 3 개 sed 명령이 스크립트에서 : 오류를 포기하지 않았다 /var/log/cloud-init-output.log을 제기하지만, 잘 실행되지 않는 한 가지가있다
  • 파일 /etc/awslogs/awslogs.conf
  • 같은 파일의 container_instance_id에서 파일 /etc/awslogs/awscli.conf
  • clusternameregion.

지역은 문제없이 대체됩니다,하지만 마지막 두 사람이 교체되지 않아요, 내가 파일을 검사 할 때, 내가 대신 {cluster}

{container_instance_id}의 공간을 가지고 구문에 문제가 있나요 대본에? 나는 터미널에서 똑같은 명령어를 직접 시도해 보았지만 제대로 작동했다. 어떤 도움이라도 대단히 감사합니다. 고맙습니다.

+0

'문자를 이스케이프 해 보셨습니까? (\ ') – spg

+0

@ Simon-Pierre 이스케이프 문자는 어디에서 사용해야합니까? – Somar

+0

작은 따옴표를 벗어나려고했지만 오류가 발생했습니다 : $ q : error : 예기치 않은 '/'구문 오류, $ end (유닉스 쉘 인용 문제?) , 줄 1 : /. | .containerInstanceArn /'및'jq : error : 예기치 않은 '/'구문 오류, $ end (Unix 쉘 인용 문제?) , 줄 1 : /. | .Cluster /' – Somar

답변

0

초기화로 이동하여 파일 및 명령을 생성하면 더 나은 피드백을 얻을 수 있습니다.

+0

시도해 보았지만 제대로 작동하지 않았습니다. – Somar