최적화, 나는이 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 개
- 파일
/etc/awslogs/awslogs.conf
- 같은 파일의
container_instance_id
에서 파일/etc/awslogs/awscli.conf
clustername
의region
.
sed
명령이 스크립트에서 : 오류를 포기하지 않았다
/var/log/cloud-init-output.log
을 제기하지만, 잘 실행되지 않는 한 가지가있다
지역은 문제없이 대체됩니다,하지만 마지막 두 사람이 교체되지 않아요, 내가 파일을 검사 할 때, 내가 대신 {cluster}
및
{container_instance_id}
의 공간을 가지고 구문에 문제가 있나요 대본에? 나는 터미널에서 똑같은 명령어를 직접 시도해 보았지만 제대로 작동했다. 어떤 도움이라도 대단히 감사합니다. 고맙습니다.
'문자를 이스케이프 해 보셨습니까? (\ ') – spg
@ Simon-Pierre 이스케이프 문자는 어디에서 사용해야합니까? – Somar
작은 따옴표를 벗어나려고했지만 오류가 발생했습니다 : $ q : error : 예기치 않은 '/'구문 오류, $ end (유닉스 쉘 인용 문제?), 줄 1 : /. | .containerInstanceArn /'및'jq : error : 예기치 않은 '/'구문 오류, $ end (Unix 쉘 인용 문제?) , 줄 1 : /. | .Cluster /' –
Somar