AWS学习笔记(四)--CLI创建EC2时执行脚本-程序员宅基地

技术标签: matlab  shell  运维  

当启动EC2实例时,可以向其传递用户数据来执行自动配置任务,支持两种类型的数据:shell脚本和cloud-init指令。

Linux Shell

作为用户数据输入的脚本以root用户执行,因此不要在脚本中使用sudo命令。创建的任何文件都由 root 拥有;如需要非 root 用户具有文件访问权限,则应修改相应的权限。

默认, 用户数据仅在launch实例时的第一个引导周期内运行。如果停止实例、修改用户数据并start实例,则不会自动执行新的用户数据。

执行用户数据的日志文件为/var/log/cloud-init.log。

下面的例子使用user-data属性,Launch Instance时执行Shell脚本配置DNS,然后给Instance增加了Tag:

run-instance.sh

#!/bin/bash  

run_instance() {  
  # 根据配置文件创建EC2实例,创建时执行shell脚本,返回instance id  
  instance_id=$(aws ec2 run-instances --cli-input-json file://instance.json --user-data file://add_dns.sh --query 'Instances[0].[InstanceId]' | grep -o -E "i-\w{17}")  
  echo "InstanceId: $instance_id"  

  # 为EC2添加tag  
  echo "Add tags: Name:$1, Category:$2"  
  aws ec2 create-tags --resources $instance_id --tags Key=Name,Value="$1" Key=Category,Value="$2"  
}  

run_instance "test" "test"

EC2配置文件instance.json

{  
    "DryRun": false,   
    "ImageId": "ami-4ec31723",   
    "KeyName": "Prod Key Pair",   
    "SecurityGroupIds": [  
        "sg-06242b63"  
    ],  
    "InstanceType": "m3.large",   
    "Placement": {  
        "AvailabilityZone": "cn-north-1b",   
        "Tenancy": "default"  
    },   
    "Monitoring": {  
        "Enabled": false  
    },   
    "SubnetId": "subnet-6166bc16",   
    "DisableApiTermination": true,   
    "InstanceInitiatedShutdownBehavior": "stop",   
    "PrivateIpAddress": "10.184.140.11",   
    "EbsOptimized": false  
}

配置DNS Shell脚本add-dns.sh

#!/bin/bash  

IFCFG="/etc/sysconfig/network-scripts/ifcfg-eth0"  

# 将第六行替换为PEERDNS="no"  
sed -i '6c PEERDNS="no"' $IFCFG  
# 增加DNS  
sed -i '$a DNS1="10.184.141.11"' $IFCFG  
sed -i '$a DNS1="10.184.141.12"' $IFCFG  

systemctl restart network

Windows Script

由Amazon Windows AMI创建EC2 Instance时会执行userdata;如要自定义AMI,在创建AMI前要先修改EC2Launch service或EC2Config service配置(从Windows Server 2016开始使用EC2Launch,之前使用EC2Config),才会执行userdata。

EC2Launch位于C:\ProgramData\Amazon\EC2-Windows\Launch目录下。有两种方式启用:

  • 在PowerShell下运行C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance -Schedule
  • 运行C:\ProgramData\Amazon\EC2-Windows\Launch\Settings目录下的Ec2LaunchSettings,勾选要初始化的选项,选择Shutdown with Sysprep(注意这会关机的)
    AWS学习笔记(四)--CLI创建EC2时执行脚本
    Ec2ConfigService位于C:\Program Files\Amazon\Ec2ConfigService目录下,可以从开始菜单运行EC2ConfigService Settings
    AWS学习笔记(四)--CLI创建EC2时执行脚本
    也有两种方式启用userdata:
  • 选中General选项卡中的User Data
  • 选择Image选项卡中的Shutdown with Sysprep(这会忽略General选项卡中的User Data是否选中)
    AWS学习笔记(四)--CLI创建EC2时执行脚本

Windows支持两种Script,一种是cmd,一种是PowerShell,要分别用<script></script>和<powershell></powershell>封装。如:
<script>dir > c:\test.log</script>

powershell例一:修改DNS

<powershell>Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses ("10.184.13.14","10.184.13.15")</powershell>

查看powershell命令帮助:

Set-DnsClientServerAddress -?

powershell例二:新增DNS服务器域名配置

<powershell>
Add-DnsServerResourceRecordA -ZoneName "iata.com" -Name "test" -IPv4Address 10.188.12.116 -PassThru
</powershell>

powershell例三:修改DNS服务器域名对应的IP地址

<powershell>
$OldObj = Get-DnsServerResourceRecord -Name "prod-db" -ZoneName "iata.com" -RRType "A"
$NewObj = $OldObj.Clone()
$NewObj.RecordData.IPv4address=[System.Net.IPAddress]::parse("10.184.12.73")
Set-DnsServerResourceRecord -NewInputObject $NewObj -OldInputObject $OldObj -ZoneName "asd.com" -PassThru
</powershell>

AWS CLI示例:

aws ec2 run-instances --image-id ami-2fb56342 --instance-type m3.large  --user-data file://user_data.txt --subnet-id subnet-fbc42a3 --security-group-ids sg-fbc42a3 --key-name jason-test

参考文档

Running Commands on Your Linux Instance at Launch
Executing Scripts on Windows Instance at Launch
AWS EC2 userdata on Windows
Configuring a Windows Instance Using EC2Launch
Configuring a Windows Instance Using the EC2Config Service
Managing Windows Instance Configuration
PowerShell - About Execution Policies
Domain Name System (DNS) Server Cmdlets
cloud-init

转载于:https://blog.51cto.com/7308310/2071537

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33915554/article/details/92964725

智能推荐

echarts动态时间轴,以秒为单位更新_echarts实现以秒为单位的动态折线图显示-程序员宅基地

文章浏览阅读2.2w次。echarts官网上的案例是按天来更新数据的http://echarts.baidu.com/demo.html#dynamic-data2 现在我需要改成以秒为单位动态刷新的案例,类似于股票实时刷新的那种,代码位置http://download.csdn.net/download/u013720726/9963108_echarts实现以秒为单位的动态折线图显示

macOS VSCode 配置 Go 编程环境_failed to run "go env env,-json,goprivate,gomod,go-程序员宅基地

文章浏览阅读1.5k次。macOS VSCode 配置 Go 编程环境笔者使用 macOS BigSur 安装完 Go 1.16.6 和 VSCode Go插件,然后运行时,往往会报诸如下面的错误:build esc: cannot load xxx : malformed module path “xxx”: missing dot in first path elementwarning: GOPATH set to GOROOT (/Users/xxx/go/) has no effect实际上,这都是由于 GO_failed to run "go env env,-json,goprivate,gomod,gowork,goenv,gotoolchain": s

C++多线程并发(三)---线程同步之条件变量_线程同步condition variables-程序员宅基地

文章浏览阅读1.7w次,点赞66次,收藏303次。一、何为条件变量在前一篇文章《C++多线程并发编程(二)—线程同步之互斥锁》中解释了线程同步的原理和实现,使用互斥锁解决数据竞争访问问题,算是线程同步的加锁原语,用于排他性的访问共享数据。我们在使用mutex时,一般都会期望加锁不要阻塞,总是能立刻拿到锁,然后尽快访问数据,用完之后尽快解锁,这样才能不影响并发性和性能。如果需要等待某个条件的成立,我们就该使用条件变量(condition var..._线程同步condition variables

Windows Vista/Windows 7上安装wince5.0/6.0及SDK模拟器-程序员宅基地

文章浏览阅读252次。Windows Vista/Windows 7上安装wince5.0/6.0及SDK模拟器 安装Windows CE 5.0/6.0及 SDK模拟器在Windows Vista或Windows 7计算机上,This SDK will install on Windows XP machines with Visual Studio 2008.该SDK由供应商提供将其安装在Windows Vist..._普通电脑可以安装windows ce5.0

亚马逊云科技AWS免费证书-EC2服务器设计(含题库)

▶️ AWS Educate(免费教育计划): 它是面向在校学生、AWS初学者,帮助他们学习、精通AWS的免费项目。除了这张开发者证书,还有其他9张关于serverless无服务器开发、Web系统开发、数据库、DevOps、DeepRacer(AWS 无人驾驶服务)等多个免费证书可以拿,快跟着小李哥一起也拿下AWS 52张认证!这次证书是关于AWS EC2实例的设计和搭建,EC2作为AWS服务的核心,是学好AWS的第一步。▶️ 课程包括图中视频和实验课程(可以不看,点Next直接跳过到最后的测试)

微信小程序与web-view网页进行通信的尝试

首先,微信小程序向web-view传递数据一般通过地址栏传参的形式(给src赋值或者修改hash),这样一般就已经能够满足实际开发需求了,所以这里主要探讨web-view向微信小程序传参。

随便推点

WML(Wireless Markup Language - 无线标记语言)_无线标记语言的特点-程序员宅基地

文章浏览阅读583次。WML  WML(Wireless Markup Language - 无线标记语言)。它是一种从 HTML 继承而来的标记语言,但是 WML 基于 XML,因此它较 HTML 更严格。  WML 被用来创建可显示在 WAP 浏览器中的页面。用WML编写的页面被称为 DECKS。DECKS 是作为一套 CARDS 被构造的。  这种描述语言同我们常听说的HTML语言同出一家,都属于XML语言这一大_无线标记语言的特点

23种设计模式(第三章结构型模式7种)_设计模式符合-程序员宅基地

文章浏览阅读307次。结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理模式适配器模式装饰者模式桥接模式外观模式组合模式享元模式5.1 代理模式5.1.1 概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能_设计模式符合

链表中为何使用二级指针_链表初始化为什么要二级指针-程序员宅基地

文章浏览阅读3.6k次,点赞30次,收藏128次。本篇目录前言参数的调用方式传值调用传址调用传引用调用示例说明使用二级指针/一级指针创建链表时的对比主函数中作此调用使用二级指针创建链表使用一级指针创建链表会成功吗销毁链表时二级指针和一级指针的对比使用二级指针销毁链表使用一级指针销毁链表会成功吗总结完整代码参考来源前言在学习数据结构时,在链表初始化或者销毁链表的时候,经常使用二级指针或者一级指针的引用,这是为什么呢?同样是指向内存单元的地址,为什么就不能使用一级指针呢?使用一级指针去初始化或者是销毁链表的时候,究竟会发生什么呢?到底什么时候该用二级指针,_链表初始化为什么要二级指针

win10通过pycharm远程登录到Linux服务器,并通过matplotlib作图_pycharm连接服务绘图-程序员宅基地

文章浏览阅读3.6k次,点赞9次,收藏24次。准备工作:1.下载专业版本的Pycharm。这里为大家提供18版本的链接: https://pan.baidu.com/s/1-GYSJvUx9JoUujPfu3EPwA密码: p283 或者直接去官网下载: https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows2.安装并..._pycharm连接服务绘图

更改 MATLAB 当前文件夹 或 将其文件夹添加到 MATLAB 路径。出错_manually add this path to the matlab path-程序员宅基地

文章浏览阅读8.7k次。更改 MATLAB 当前文件夹 或 将其文件夹添加到 MATLAB 路径。出错_manually add this path to the matlab path

iOS之UIView动画_oc uiview animate 关键帧-程序员宅基地

文章浏览阅读5.5k次。在AppStore中的应用越来越重视动画效果的使用,一个良好动画效果可以让两个状态之间平滑地过度,也可以利用动画吸引住用户的眼球_oc uiview animate 关键帧