我在userData
property
的LaunchConfiguration
资源的把这个userData
,我跟着这个AWS Doc的步骤,这里是脚本:错误而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}
空间这有什么错的语法在脚本中?我在终端直接尝试了相同的命令,它们工作正常。任何帮助真的很感激。谢谢。
您是否尝试过逃避'字? (\') – spg
@ Simon-Pierre我需要使用逃避角色? – Somar
我试图逃避单引号,但我得到了错误:'q:错误:语法错误,意外的'/',期待$尾(Unix shell引用问题?)在,第1行: /。 | .ContainerInstanceArn /'和'jq:error:语法错误,意外的'/',期望在,第一行: /处有$ end(Unix shell引用问题? | .Cluster /' –
Somar