Amazon cloudformation 如何在生成spot实例时避免震源组选项?
我正在使用这个cloudformation模板创建spot实例,它正在按预期工作 唯一的变化,我想是删除“舰队”的一部分,从类型在这里Amazon cloudformation 如何在生成spot实例时避免震源组选项?,amazon-cloudformation,Amazon Cloudformation,我正在使用这个cloudformation模板创建spot实例,它正在按预期工作 唯一的变化,我想是删除“舰队”的一部分,从类型在这里 Type: 'AWS::EC2::SpotFleet 原因:当我试图停止一个实例时,我会收到一条消息,上面写着“无法停止舰队实例” 如何使用“普通”或默认选项购买现货实例 (AWS用户界面)向导允许我生成spot实例,这些实例可以在需要时停止和启动。正在从cloudformation模板中查找相同的功能 正如评论中所建议的,我已经修改了模板,使其看起来像这
Type: 'AWS::EC2::SpotFleet
原因:当我试图停止一个实例时,我会收到一条消息,上面写着“无法停止舰队实例”
如何使用“普通”或默认选项购买现货实例
(AWS用户界面)向导允许我生成spot实例,这些实例可以在需要时停止和启动。正在从cloudformation模板中查找相同的功能
正如评论中所建议的,我已经修改了模板,使其看起来像这样。它按预期工作。但它只会创建一个“模板”。我仍然需要登录到控制台以使用模板启动一个新实例。我需要实现端到端流程的自动化
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-arm64-ebs
OksoftSG:
Type: 'AWS::EC2::SecurityGroup::Id'
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
MyInstanceType:
Type: String
Default: r6g.medium
AllowedValues:
- r6g.medium
- r6g.4xlarge
- r6g.12xlarge
MyIpAddress:
Type: String
Resources:
MySpotInstance:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
SecurityGroupIds:
- !Ref OksoftSG
InstanceType: !Ref MyInstanceType
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
DeleteOnTermination: true
VolumeType: standard
VolumeSize: 400
InstanceMarketOptions:
MarketType: spot
SpotOptions:
InstanceInterruptionBehavior: stop
SpotInstanceType: persistent
MyInstance:
Type: 'AWS::EC2::Instance'
Properties:
"LaunchTemplate" :
LaunchTemplateId: !Ref MySpotInstance
Version: !GetAtt MySpotInstance.LatestVersionNumber
参数:
LatestAmiId:
类型:“AWS::SSM::Parameter::Value”
默认值:/aws/service/ami亚马逊linux最新版本/amzn2-ami-minimal-hvm-arm64-ebs
OksoftSG:
类型:“AWS::EC2::SecurityGroup::Id”
关键字名称:
类型:“AWS::EC2::KeyPair::KeyName”
MyInstanceType:
类型:字符串
默认值:r6g.medium
允许值:
-r6g.中等
-r6g.4XL
-r6g.12xlarge
MyIP地址:
类型:字符串
资源:
MySpot实例:
类型:“AWS::EC2::LaunchTemplate”
特性:
LaunchTemplateData:
图像ID:!参考LatestAmiId
关键字:!参考键名
SecurityGroupId:
- !参考OksoftSG
实例类型:!参考MyInstanceType
块设备应用程序:
-设备名称:/dev/xvda
Ebs:
DeleteOnTermination:true
卷类型:标准
体积:400
实例标记选项:
市场类型:现货
选择:
InstanceInterruptionBehavior:停止
SpotInstanceType:持久性
MyInstance:
类型:“AWS::EC2::实例”
特性:
“启动模板”:
LaunchTemplateId:!引用MySpotInstance
版本:!GetAtt MySpotInstance.LatestVersionNumber
当我删除cloudformation模板时,它不会删除它创建的spot请求。spot Fleet是一种请求一定数量的计算资源(RAM、CPU)的方法,即使删除了一些spot实例,这些资源也会“继续运行”。这就是为什么您不能请求停止实例——因为它将被自动替换 通常,可以在
RunInstances()
命令中指定对Spot实例的请求。但是,我在AWS::EC2::Instance
中找不到这个选项
我能找到的最接近的方法是使用AWS::EC2::Instance
并指定AWS::EC2::LaunchTemplate
,其中包含用于指定Spot实例的SpotOptions
坦率地说,我认为使用CloudFormation模板来启动Spot实例是非常不寻常的。这是因为CloudFormation通常用于以可靠、一致的方式启动资源。相反,Spot实例可以在很少注意的情况下消失。因此,Spot实例通常通过特定的API请求启动,而不是通过CloudFormation模板启动。这里是使用持久Spot请求创建LaunchTemplate的工作示例,它基于模板创建实例。在持久性spot请求上运行的实例可以停止,但不能终止(一旦有spot位置,将立即启动替换):
参数:
LatestAmiId:
类型:“AWS::SSM::Parameter::Value”
默认值:/aws/service/ami亚马逊linux最新版本/amzn-ami-hvm-x86_64-ebs
OksoftSG:
类型:“AWS::EC2::SecurityGroup::Id”
关键字名称:
类型:“AWS::EC2::KeyPair::KeyName”
MyInstanceType:
类型:字符串
默认值:m3.medium
允许值:
-t2.小
-m3.中等
-m3.xlarge
-m3.2xL
-i3.xlarge
MyIP地址:
类型:字符串
资源:
SpotPersistantLaunchTemplate:
类型:AWS::EC2::LaunchTemplate
特性:
LaunchTemplateData:
实例类型:!参考MyInstanceType
图像ID:!参考LatestAmiId
SecurityGroupId:
- !参考OksoftSG
关键字:!参考键名
实例标记选项:
市场类型:现货
选择:
InstanceInterruptionBehavior:停止
SpotInstanceType:持久性
块设备应用程序:
-设备名称:/dev/xvda
Ebs:
DeleteOnTermination:true
卷类型:标准
体积:400
用户数据:!Base64
'Fn::Join':
- ''
- - |
#!/bin/bash-xe
- >
yum安装-y docker mysql git python pip>
/tmp/line1_such.txt 2>/tmp/line1_err.txt
- >
服务docker start>/tmp/line2_such.txt 2>
/tmp/line2_err.txt
- >
echo“india”| passwd ec2用户--stdin>
/tmp/line4a_such.txt 2>/tmp/line4a_err.txt
- >
sed-i的|[#]*密码验证
否|密码验证是| g'/etc/ssh/sshd_config>
/tmp/line4b_such.txt 2>/tmp/line4b_err.txt
- >
/etc/init.d/sshd restart>/tmp/line4c_such.txt 2>
/tmp/line4c_err.txt
- >
docker run-d-p 8887:8888-v/tmp:/tmp shantanuo/notebook>
/tmp/line3_such.txt 2>/tmp/line3_err.txt
- >-
pip安装aws-ec2-assign-elastic-ip>/tmp/line4_such.txt
2> /tmp/line4_err.txt
-"sudo sh-c"echo"
-!ImportValue secretKey
- |2
>>
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: /aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs
OksoftSG:
Type: 'AWS::EC2::SecurityGroup::Id'
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
MyInstanceType:
Type: String
Default: m3.medium
AllowedValues:
- t2.small
- m3.medium
- m3.xlarge
- m3.2xlarge
- i3.xlarge
MyIpAddress:
Type: String
Resources:
SpotPersistantLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
InstanceType: !Ref MyInstanceType
ImageId: !Ref LatestAmiId
SecurityGroupIds:
- !Ref OksoftSG
KeyName: !Ref KeyName
InstanceMarketOptions:
MarketType: spot
SpotOptions:
InstanceInterruptionBehavior: stop
SpotInstanceType: persistent
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
DeleteOnTermination: true
VolumeType: standard
VolumeSize: 400
UserData: !Base64
'Fn::Join':
- ''
- - |
#!/bin/bash -xe
- >
yum install -y docker mysql git python-pip >
/tmp/line1_succ.txt 2> /tmp/line1_err.txt
- >
service docker start > /tmp/line2_succ.txt 2>
/tmp/line2_err.txt
- >
echo 'india' | passwd ec2-user --stdin >
/tmp/line4a_succ.txt 2> /tmp/line4a_err.txt
- >
sed -i 's|[#]*PasswordAuthentication
no|PasswordAuthentication yes|g' /etc/ssh/sshd_config >
/tmp/line4b_succ.txt 2> /tmp/line4b_err.txt
- >
/etc/init.d/sshd restart > /tmp/line4c_succ.txt 2>
/tmp/line4c_err.txt
- >
docker run -d -p 8887:8888 -v /tmp:/tmp shantanuo/notebook >
/tmp/line3_succ.txt 2> /tmp/line3_err.txt
- >-
pip install aws-ec2-assign-elastic-ip > /tmp/line4_succ.txt
2> /tmp/line4_err.txt
- 'sudo sh -c "echo '
- !ImportValue secretKey
- |2
>> /home/ec2-user/mysecret.txt"
- 'sudo sh -c "echo '
- !ImportValue accessKey
- |2
>> /home/ec2-user/myaccesskey.txt"
- >-
/usr/local/bin/aws-ec2-assign-elastic-ip --access-key ''`cat
/home/ec2-user/myaccesskey.txt`'' --secret-key ''`cat
/home/ec2-user/mysecret.txt`'' --valid-ips '
- !Ref MyIpAddress
- |
'
MyPersistantSpotInstance:
Type: AWS::EC2::Instance
Properties:
LaunchTemplate:
LaunchTemplateId: !Ref SpotPersistantLaunchTemplate
Version: 1