本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 AWS FIS 测试点实例中断竞价型实例使用可用的备用 EC2 容量,与按需定价相比,可享受高达 90% 的折扣。但是,Amazon EC2 可以在需要恢复容量时中断您的竞价型实例。在使用竞价型实例时,您必须为可能发生的中断情况做好准备。有关更多信息,请参阅 Amazon EC2 用户指南中的竞价型实例中断。
您可以使用 AWS 故障注入服务 (AWS FIS) 来测试您的应用程序如何处理竞价型实例中断。使用本教程创建实验模板,该模板使用 AWS FIS aws:ec2:send-spot-instance-interruptions 操作来中断您的一个竞价型实例。
或者,要使用亚马逊 EC2 控制台启动实验,请参阅亚马逊 EC2 用户指南中的启动竞价型实例中断。
先决条件
在使用 AWS FIS 中断竞价型实例之前,请先完成以下先决条件。
1. 创建 IAM 角色
创建一个角色并附加一个策略,使 AWS FIS 能够代表您执行aws:ec2:send-spot-instance-interruptions操作。有关更多信息,请参阅 适用于 AWS FIS 实验的 IAM 角色。
2. 验证对 AWS FIS 的访问权限
确保您可以访问 AWS FIS。有关更多信息,请参阅 AWS FIS 策略示例。
3. (可选)创建竞价型实例请求
如果要为实验使用新竞价型实例,请运行请求竞价型实例的 run-instances 命令。默认在竞价型实例中断时将其终止。如果将中断行为设置为 stop,则必须将类型设置为 persistent。请勿在本教程中将中断行为设置为 hibernate,这会立即启动休眠程序。
aws ec2 run-instances \
--image-id ami-0ab193018fEXAMPLE \
--instance-type "t2.micro" \
--count 1 \
--subnet-id subnet-1234567890abcdef0 \
--security-group-ids sg-111222333444aaab \
--instance-market-options file://spot-options.json \
--query Instances[*].InstanceId
以下是 spot-options.json 文件的示例。
{
"MarketType": "spot",
"SpotOptions": {
"SpotInstanceType": "persistent",
"InstanceInterruptionBehavior": "stop"
}
}
示例命令中的 --query 选项使此命令仅返回竞价型实例 ID。下面是示例输出。
[
"i-0abcdef1234567890"
]
4. 添加标签以便 AWS FIS 可以识别目标竞价型实例
使用 create-tags 命令添加标签 Name=interruptMe 到您的目标竞价型实例。
aws ec2 create-tags \
--resources i-0abcdef1234567890 \
--tags Key=Name,Value=interruptMe
步骤 1:创建实验模板
使用 AWS FIS 控制台创建实验模板。您可以在模板中指定要运行的操作。此操作会中断带有指定标签的竞价型实例。如果有多个带有该标签的竞价型实例, AWS FIS 会随机中断其中一个。
创建试验模板打开 AWS FIS 控制台,网址https://console.aws.amazon.com/fis/为。
在导航窗格中,选择实验模板。
选择创建实验模板。
对于步骤 1,指定模板详细信息,请执行以下操作:
对于描述和名称,输入模板的描述和名称。
选择下一步,然后进入步骤 2,指定操作和目标。
对于操作,请执行以下操作:
选择添加操作。
输入操作名称。例如,输入 interruptSpotInstance。
对于操作类型,请选择 aws: ec2:。send-spot-instance-interruptions
对于 Targ et,请保留 AWS FIS 为你创建的目标。
在 “操作” 参数 “中断前持续时间” 中,指定 2 分钟 (PT2M)。
选择保存。
对于目标,请执行以下操作:
对于 AWS FIS 在上一步中自动创建的目标,选择编辑。
将默认名称替换为更具描述性的名称。例如,输入 oneSpotInstance。
验证资源类型是否为 aws:ec2:spot-instance。
对于目标方法,选择资源标签、筛选条件和参数。
对于资源标签,选择添加新标签,然后输入标签键和标签值。使用您为竞价型实例添加的标签进行中断,如本教程在先决条件中所述。
对于资源筛选条件,选择添加新筛选条件,然后输入 State.Name 作为路径并输入 running 作为值。
对于选择模式,选择计数。对于资源数量,输入 1。
选择保存。
选择下一步进入步骤 3,配置服务访问权限。
对于服务访问权限,选择使用现有 IAM 角色,然后选择您按照本教程先决条件中所述创建的 IAM 角色。如未显示此角色,请验证其是否具有必要的信任关系。有关更多信息,请参阅 适用于 AWS FIS 实验的 IAM 角色。
选择下一步进入步骤 4,配置可选设置。
(可选)对于标签,选择添加新标签,然后指定标签键和标签值。您添加的标签将应用于实验模板,而不是应用于使用此模板运行的实验。
选择 “下一步” 进入步骤 5,“查看并创建”。
查看模板并选择创建实验模板。当提示您确认时,输入create,然后选择创建实验模板。
(可选)查看 JSON 格式的实验模板
选择导出选项卡。以下是通过前述控制台程序创建的 JSON 示例。
{
"description": "Test Spot Instance interruptions",
"targets": {
"oneSpotInstance": {
"resourceType": "aws:ec2:spot-instance",
"resourceTags": {
"Name": "interruptMe"
},
"filters": [
{
"path": "State.Name",
"values": [
"running"
]
}
],
"selectionMode": "COUNT(1)"
}
},
"actions": {
"interruptSpotInstance": {
"actionId": "aws:ec2:send-spot-instance-interruptions",
"parameters": {
"durationBeforeInterruption": "PT2M"
},
"targets": {
"SpotInstances": "oneSpotInstance"
}
}
},
"stopConditions": [
{
"source": "none"
}
],
"roleArn": "arn:aws:iam::123456789012:role/AllowFISSpotInterruptionActions",
"tags": {
"Name": "my-template"
}
}
步骤 2:开始实验
您可以使用创建好的实验模板开始实验。
开始实验
您应该位于刚刚创建的实验模板的详细信息页面。否则,请选择实验模板,然后选择实验模板 ID,打开详细信息页面。
请选择开始实验。
(可选)要为实验添加标签,请选择添加新标签,然后输入标签键和标签值。
请选择开始实验。当系统提示您确认时,输入 start,然后选择开始实验。
步骤 3:跟踪实验进度
您可以跟踪正在运行的实验进度,直到实验完成、停止或失败。
跟踪实验进度
您应该位于刚开始的实验的详细信息页面。否则,请选择实验,然后选择实验 ID,打开详细信息页面。
要查看实验状态,请在详细信息窗格中选择状态。有关更多信息,请参阅实验状态。
当实验状态为正在运行时,转到下一步。
步骤 4:验证实验结果
实验操作完成后,将出现以下情况:
目标竞价型实例会收到一条实例重新平衡建议。
竞价型实例中断通知在 Amazon EC2 终止或停止您的实例前两分钟发出。
两分钟后终止或停止竞价型实例。
被 AWS FIS 停止的竞价型实例将保持停止状态,直到您重新启动该实例。
验证实验是否已经中断实例
打开亚马逊 EC2 控制台,网址为https://console.aws.amazon.com/ec2/。
从导航窗格中,在单独的浏览器选项卡或窗口中打开 Spot Requests(竞价型实例请求)和 Instances(实例)。
对于 Spot Requests(竞价型实例请求),选择该竞价型实例请求。初始状态为 fulfilled。实验完成后的状态变化如下:
terminate:状态变为 instance-terminated-by-experiment。
stop:状态先变为 marked-for-stop-by-experiment,然后变为 instance-stopped-by-experiment。
对于实例,选择竞价型实例。初始状态为 Running。在您收到竞价型实例中断通知后两分钟,状态会根据中断行为发生以下变化:
stop:状态先变为 Stopping,然后变为 Stopped。
terminate:状态先变为 Shutting-down,然后变为 Terminated。
第 5 步:清理
如果您不再需要通过 stop 中断行为为实验创建的竞价型测试实例,则可以取消竞价型实例请求并终止竞价型实例。
要取消请求并终止实例,请使用 AWS CLI
使用cancel-spot-instance-requests命令取消竞价型实例请求。
aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
运行 terminate-instances 命令,终止实例。
aws ec2 terminate-instances --instance-ids i-0abcdef1234567890
如果您不再需要实验模板,可以将其删除。
使用 AWS FIS 控制台删除实验模板打开 AWS FIS 控制台,网址https://console.aws.amazon.com/fis/为。
在导航窗格中,选择实验模板。
选择实验模板,然后依次选择操作和删除实验模板。
当系统提示您确认时,输入 delete,然后选择删除实验模板。