Amazon web services 如何获取本地ec2实例的容器实例id
在重新启动ECS实例之前,我运行下面的shell命令来排空它:Amazon web services 如何获取本地ec2实例的容器实例id,amazon-web-services,amazon-ec2,aws-cli,amazon-ecs,Amazon Web Services,Amazon Ec2,Aws Cli,Amazon Ecs,在重新启动ECS实例之前,我运行下面的shell命令来排空它: INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) aws ecs update-container-instances-state \ --region eu-central-1 \ --cluster mycluster \ --status DRAINING \ --container-instances $INSTAN
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
aws ecs update-container-instances-state \
--region eu-central-1 \
--cluster mycluster \
--status DRAINING \
--container-instances $INSTANCE_ID
它给了我以下错误:
调用UpdateContainerInstanceState操作时出错(InvalidParameterException):instanceId小于36
显然,这是因为它需要不同于ec2InstanceId的ECS containerInstanceId。查找本地计算机的ContainerStanceID的最佳方法是什么
到目前为止我发现的是
aws ecs列表容器实例
获取集群中的所有容器实例IDhttp://169.254.169.254/latest/meta-data/instance-id
)以查找本地EC2实例IDjq
结合grep
或其他工具进行过滤这似乎有点复杂。有更简单的方法吗?如果您正在实例上运行脚本,您可以从ECS代理的目录中找到容器实例ID
如果您正在ECS任务中运行脚本,则可以使用。另一个选项是在实例上填充包含实例Id的自定义属性。例如,在/etc/ECS/ECS.config中,您可能具有以下内容:
ECS_INSTANCE_ATTRIBUTES={\"ec2_instance\":\"i-0000000000000000000\"}
然后可以将其与列表容器实例的--filter参数结合使用,以查找关联的容器实例
aws ecs list-container-instances --cluster <MY Cluster> --filter attribute:ec2_instance==i-0000000000000000000
参考资料:
aws ecs update container instances state
命令
在中执行此操作并将结果添加到/etc/environment
中非常有用,这样它们就可以随时使用
#/usr/bin/env bash
设置-euo管道故障
容器\u实例\u ARN=“$(curl-s--失败http://localhost:51678/v1/metadata |jq-er'.集装箱标准“)”
CLUSTER=“$(curl-s--失败http://localhost:51678/v1/metadata |jq-er'.Cluster')”
aws ecs更新容器实例状态--群集“$cluster”\
--容器实例“$container\u INSTANCE\u ARN”--状态为“DRAINING”
通过用户数据将它们添加到/etc/environment
:
cat/etc/environment
容器\u实例\u ARN=“$(curl-s--失败http://localhost:51678/v1/metadata |jq-er'.集装箱标准“)”
CLUSTER=“$(curl-s--失败http://localhost:51678/v1/metadata |jq-er'.Cluster')”
EOF
来源/etc/环境
注:
- jq
标志意味着在找不到钥匙时设置退出代码-e
- jq
标志意味着将输出转储为原始文本,而不是json-r
....
MyLaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Metadata:
AWS::CloudFormation::Init:
config:
commands:
00_configure_ecs_agent:
command: |
#!/bin/bash
echo ECS_INSTANCE_ATTRIBUTES={\"ec2_instance\":\"$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)\"} >> /etc/ecs/ecs.config
...