我正在尝试在 AWS 中创建一个自动化文档来执行维护任务 - 它将向一个区域中所有已停止的 EC2 实例添加一个标签。
这是我正在使用的 yaml:
schemaVersion: '0.3'
description: Automation to add tags to stopped instances.
parameters:
- name: Region
type: String
description: The AWS region to run the automation in.
default: us-east-1
- name: TagKey
type: String
description: The key of the tag to be added to the instances.
default: Status
- name: TagValue
type: String
description: The value of the tag to be added to the instances.
default: Stopped
mainSteps:
- action: 'aws:runCommand'
name: 'FindStoppedInstances'
inputs:
DocumentName: 'AWS-RunShellScript'
Parameters:
commands:
- |
# Get the list of stopped EC2 instance IDs
instance_ids=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=stopped" \
--query "Reservations[*].Instances[*].InstanceId" \
--output text)
echo "$instance_ids"
executionTimeout: ['3600']
outputs:
- Name: 'instance_ids'
Selector: '$.Payload'
Type: 'StringList'
- action: 'aws:runCommand'
name: 'TagStoppedInstances'
inputs:
DocumentName: 'AWS-RunShellScript'
Parameters:
commands:
- |
# Loop through each stopped instance and tag it
for instance_id in {{ instance_ids }}; do
echo "Adding tag to instance $instance_id"
aws ec2 create-tags --resources $instance_id --tags Key={{ TagKey }},Value={{ TagValue }}
done
executionTimeout: ['3600']
坦白说,我之前没有使用过 YAML,并得到了 chatgpt 的帮助。我不想使用 lambda 来完成此任务。该文档出现错误 -
(parameters) Parameter definition does not match any following types, String, StringList, Boolean, Integer, StringMap, MapList, AWS::EC2::Instance::Id, AWS::IAM::Role::Arn, AWS::S3::Bucket::Name, List<AWS::EC2::Instance::Id>, List<AWS::IAM::Role::Arn>, List<AWS::S3::Bucket::Name>
有人可以帮我纠正这个脚本吗?放置标签后,我想启动那些 EC2。一旦我的修补任务完成(我正在使用运行命令),我想再次关闭具有此标签的 EC2 并删除此标签。
脚本有几个问题。 更新参数部分以不列出键:
参数: 地区: 类型:字符串 描述:运行自动化的 AWS 区域。 默认值:us-east-1 标签键: 类型:字符串 描述:要添加到实例的标签的键。 默认值:状态 标签值: 类型:字符串 描述:要添加到实例的标签的值。 默认值:已停止
然后更新操作中的脚本
TagStoppedInstances
以引用之前的操作:
- 操作:'aws:runCommand' 名称:'TagStoppedInstances' 输入: 文档名称:“AWS-RunShellScript” 参数: 命令: - | # 循环遍历每个停止的实例并对其进行标记 对于 {{ FindStoppedInstances.instance_ids }} 中的 instance_id;做 echo "将标签添加到实例 $instance_id" aws ec2 create-tags --resources $instance_id --tags Key={{ TagKey }},Value={{ TagValue }} 完毕 执行超时:['3600']
我建议使用运行 AWS API 的操作,而不是运行调用 AWS CLI 的脚本。可以在 AWS Systems Manager 上找到类似工作流程的示例 用户指南