首页 文章 精选 留言 我的

精选列表

搜索[诊断自动化],共10000篇文章
优秀的个人博客,低调大师

Android JUnit test 进行自动化测试

一. 被test的工程: 新建一个android工程:D_session;它有一个activity:D_sessionActivity;package名:com.mysession 二.测试工程: 新建一个 测试工程:D_sessionTest, 类型是android test project; 1. menifest文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mysession.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.mysession" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application> </manifest> 2. 一个base activity 来定义各种模拟测试者的动作和判断测试结果,各个测试类都继承该类: package com.mysession.test; import android.app.Activity; import android.app.Instrumentation; import android.app.Instrumentation.ActivityMonitor; import android.content.Intent; import android.test.InstrumentationTestCase; import android.test.TouchUtils; import android.widget.Button; import android.widget.TextView; import com.mysession.D_sessionActivity; public class SessionActivityTest extends InstrumentationTestCase { private Instrumentation mInstrumentation; private ActivityMonitor mSessionMonitor; private Activity mCurrentActivity, mSessionActivity; private String TextNotEqual = "text not equal."; private static final String PackageName = "com.mysession"; @Override protected void setUp() throws Exception { // 初始化 super.setUp(); if (mInstrumentation == null) { mInstrumentation = getInstrumentation(); } mSessionActivity = null; } @Override protected void tearDown() throws Exception { super.tearDown(); //释放资源 closeActivity(mSessionActivity); mCurrentActivity = null; } private void closeActivity(Activity activity) { if(activity != null){ activity.finish(); activity = null; } } public void openSessionActivity() { // 打开session activity try { setUp(); } catch (Exception e) { e.printStackTrace(); } mSessionMonitor = mInstrumentation.addMonitor( D_sessionActivity.class.getName(), null, false); Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClassName(PackageName, D_sessionActivity.class.getName()); mInstrumentation.startActivitySync(intent); mSessionActivity = getInstrumentation().waitForMonitor(mSessionMonitor); assertNotNull(mSessionActivity); mCurrentActivity = mSessionActivity; } //判断text是否正确 public void assertTextEqual(int resId, String strText) { TextView textView = (TextView) mCurrentActivity.findViewById(resId); assertNotNull(textView); assertEquals(TextNotEqual, strText, textView.getText().toString()); }; // 模拟按钮点击事件 public void clickButton(int resId){ Button button = (Button) mCurrentActivity.findViewById(resId); assertNotNull(button); TouchUtils.clickView(this, button); } } 3. 各个测试类: 测试类一: package com.mysession.test.cases; import com.mysession.R; import com.mysession.test.SessionActivityTest; public class MyCase1 extends SessionActivityTest { public void testCase1() { openSessionActivity(); assertTextEqual(R.id.etUrl, "http://172.20.230.5/iportal/samples/jsapi/mobile.html"); } public void testCase3() { openSessionActivity(); clickButton(R.id.btnLoad); clickButton(R.id.btnHistory); } } 测试类二: package com.mysession.test.cases; import com.mysession.R; import com.mysession.test.SessionActivityTest; public class MyCase2 extends SessionActivityTest{ public void testCase2() { openSessionActivity(); clickButton(R.id.btnLoad); } } 三. 有些动作(如点击menu)需要通过包robotium-solo-1.8.0.jar来完成。 所以要在Build Path->Configure Build Path…中导入:robotium-solo-1.8.0.jar 程序中: private Solo solo; solo = new Solo(getInstrumentation(),getActivity); 就可以使用solo了, 如: solo.clickOnMenuItem(text); solo.goBack(); 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

iOS 本地打包工具 自动化

1、为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试。而且打包速度好慢,太浪费时间了。如果有一个工具能自动的帮你做完上面所有的事情,岂不是快哉? 2、网上有那么多自动打包工具,我直接下载就行了为啥还要学习? 没错网上有很多打包工具,包括github上也有一些直接从github下载并打包上传的,但是他们的不一定适合你,首先下载下来要配置各种参数,不会配,还有网上大多是针对普通项目,但是我们项目是cocoaPods管理的,编译的是xxx.xcworkspace不是xxx.xcodeproj。怎么办 ,xxx.xcodeproj自动编译后就在你项目目录下会有xxx.app但是xxx.xcworkspace找不到怎么办?怎么指定目录 , 这些网上的库大都没有的。 3、需要哪些准备工作? 首先你得有装xcode,python3.5(我装的版本,其他版本也行), 待打包的项目。安装相关软件,随便搜索下就可以了。 废话结束,开始正文。本文介绍的是自动clean本地项目,编译 打包 上传fir 邮件通知相关人员。不涉及从git上下载。原理就是利用python执行控制台命令。对 iOS项目进行打包 xcode控制台命令 xcode控制台命令基本都是以xcodebuild开头的介绍几个简单的命令,大家可以在命令行试试。 xcodebuild -version查看xcode的版本号和build的版本号 xcodebuild -showsdks显示当前系统的SDK、及其版本 xcodebuild -list先cd到工程目录下执行此命令 显示targetSchemes等 没有使用cocoaPods项目的编译 如果你的项目是普通的项目没有使用cocoaPods 那么 cd 到工程目录下直接执行xcodebuild build,就会自动编译了 参数都是默认 默认build release。 你也可以指定xcodebuild -configuration debug buildbuild的时候会在你工程目录下生成一个build文件夹,build/Release-iphoneos/xx.app 就是一会打包成ipa需要的文件。 第一次build速度会比较慢,要把编译环境拉下来,不要删除build文件夹,以后build 速度就会变快。 使用了cocoaPods项目的编译 如果不幸你也和我一样使用了cocoaPods, 其实也没啥不幸的 ,只是编译的时候就比较麻烦了 ,首先还是 cd 到项目目录 。但是你要指定编译文件和scheme 而且还要指定build后build文件夹的位置,如果位置找不到,后面怎么自动打包ipa?。 我这里的命令大概是这样的:xcodebuild -workspace xxx.xcworkspace -scheme 你的scheme -configuration debug -derivedDataPath 指定路径 ONLY_ACTIVE_ARCH=NO 这样就能正常编译并把build指定到我们想要去的目录 打包ipa 打包ipa只要上面路径对了,打包指定从.app 文件的路径 , 打包到你指定地方就行了。 命令:xcrun -sdk iphoneos PackageApplication -v 这里填.app的路径 -o 指定存放ipa路径/文件名.ipa python实现篇 上面只是说了下编译的原理,下面看下怎么通过python自动处理这些任务 。 clean、编译、打包 首先创建一个xxx.py文件,需要你懂点python语法,不懂就直接copy代码。不要改tab。python的语法是严格按照tab区分的。后面我会放上我的代码,你们改改 变量就可以使用。 首先你需要引入一些外部依赖。设置编码为utf-8 1 2 3 4 5 6 7 8 9 10 # -*- coding: utf-8 -*- import os import sys import time import hashlib from email import encoders from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr, formataddr import smtplib 第一步 , 声明一些变量 1 2 3 4 5 6 7 8 # 项目根目录 project_path = "/Users/xx/project" # 编译成功后.app所在目录 app_path = "/Users/xx/project/build/Build/Products/Release-iphoneos/xxx.app" # 指定项目下编译目录 build_path = "build" # 打包后ipa存储目录 targerIPA_parth = "/Users/xx/Desktop" 第二步,clean,和创建一个文件夹,这里的示例是针对有使用cocoaPods的项目 , 如果没有使用 不用创建文件夹 ,命令自行简化 1 2 3 4 # 清理项目 创建build目录 def clean_project_mkdir_build(): os.system( 'cd %s;xcodebuild clean' % project_path) # clean 项目 os.system( 'cd %s;mkdir build' % project_path) # 创建目录 %s是py的占位符,字符串类型。后面是真正的填充。 第三步编译项目 1 2 3 4 def build_project(): print( "build release start") os.system ( 'cd %s;xcodebuild -list') os.system ( 'cd %s;xcodebuild -workspace xxx.xcworkspace -scheme xxx -configuration release -derivedDataPath %s ONLY_ACTIVE_ARCH=NO || exit' % (project_path,build_path)) 不知道scheme是啥的xcodebuild -list自己查 第四步 打包 1 2 3 4 5 # 打包ipa 并且保存在桌面 def build_ipa(): global ipa_filename ipa_filename = time.strftime( 'yourproject_%Y-%m-%d-%H-%M-%S.ipa',time.localtime(time.time())) os.system ( 'xcrun -sdk iphoneos PackageApplication -v %s -o %s/%s' % (app_path,targerIPA_parth,ipa_filename)) 然后你现在再编写个方法,按顺序调用就可以编译打包了 ,执行完会看到桌面的ipa 1 2 3 4 5 6 7 def main(): # 清理并创建build目录 clean_project_mkdir_build() # 编译coocaPods项目文件并 执行编译目录 build_project() # 打包ipa 并制定到桌面 build_ipa() 执行就在最下面直接调用就行了main() 上传fir 我们是把代码上传到fir测试的,如果你们用的蒲公英或者其他,请自行搜索。 通过gem install fir-cli如果你没有ruby环境,自行搜索 安装完成后,在命令行输入fir 回车 。会有fir的命令提示。我们上传fir需要fir的API_TOKEN , 去fir官网登录找好就能找到。 拿到那一串串字符,在变量区加上 1 2 # firm的api token fir_api_token = "xxxxxxxxxxxxxxxxxxxxxxxxxx" 然后命令传入ipa目录和token就可以上传了 1 2 3 4 5 6 7 8 #上传 def upload_fir(): if os.path.exists( "%s/%s" % (targerIPA_parth,ipa_filename)): print( 'watting...') # 直接使用fir 有问题 这里使用了绝对地址 在终端通过 which fir 获得 ret = os.system( "/usr/local/bin/fir p '%s/%s' -T '%s'" % (targerIPA_parth,ipa_filename,fir_api_token)) else: print( "没有找到ipa文件") 这里也有遇到一个=坑,就是在终端直接fir 带后面的就可以执行 ,但是在这里识别不了命令,必须制定全路径,怎么找命令的全路径呢?终端输入which fir 发邮件 具体发邮件功能看代码,这里有几个变量。我使用的是新浪邮箱发的,smtp服务器 , 如果你是 pop3 请更换,还要在邮箱里开启相应的服务 1 2 3 4 from_addr = "xxxx@sina.com" password = "*****" smtp_server = "smtp.sina.com" to_addr = 'aaa@qq.com,bbbb@qq.com' 然后发邮件的方法 我们的fir路径是固定的 1 2 3 4 5 6 7 8 9 10 11 # 发邮件 def send_mail(): msg = MIMEText( 'xxx iOS测试项目已经打包完毕,请前往 http://fir.im/xxxxx 下载测试!', 'plain', 'utf-8') msg[ 'From'] = _format_addr( '自动打包系统 <%s>' % from_addr) msg[ 'To'] = _format_addr( 'xxx测试人员 <%s>' % to_addr) msg[ 'Subject'] = Header( 'xxx iOS客户端打包程序', 'utf-8').encode() server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel( 1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit() 然后执行顺序是这样的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def main(): # 清理并创建build目录 clean_project_mkdir_build() # 编译coocaPods项目文件并 执行编译目录 build_project() # 打包ipa 并制定到桌面 build_ipa() # 上传fir upload_fir() # 发邮件 send_mail() # 执行 main() 本文重点在自动打包命令上,python代码感兴趣的可以去Python教程学习。 本文代码已经托管在github上:https://github.com/smalldu/autoipa 原文http://stonedu.site/2016/08/17/iOS-%E6%9C%AC%E5%9C%B0%E6%89%93%E5%8C%85%E5%B7%A5%E5%85%B7/

优秀的个人博客,低调大师

MariaDB10自动化安装部署

去MariaDB官网下载MariaDB本文用的是MariaDB 10.1.16 https://downloads.mariadb.org 选择二进制版本,下载到/root目录下 mariadb-10.1.16-linux-x86_64.tar.gz 开始安装 [root@HE3 ~]# cat mariadb_auto_install.sh [root@HE3 ~]# cat mariadb_auto_install.sh [root@HE3 ~]# cat mariadb_auto_install.sh ######二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可############### ######数据库目录/usr/local/mysql############ ######数据目录/data/mysql############ ######日志目录/log/mysql############ ######端口号默认3306其余参数按需自行修改############ ################## #author:rrhelei@126.com# ################## #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:~/bin exportPATH #Checkifuserisroot if[$(id-u)!="0"];then echo"Error:Youmustberoottorunthisscript,pleaseuseroottoinstall" exit1 fi clear echo"=========================================================================" echo"Atooltoauto-compile&installMariaDB10.1.16onRedhat/CentOSLinux" echo"=========================================================================" cur_dir=$(pwd) #setmysqlrootpassword echo"===========================" mysqlrootpwd="MANAGER" echo-e"Pleaseinputtherootpasswordofmysql:" read-p"(Defaultpassword:MANAGER):"mysqlrootpwd if["$mysqlrootpwd"=""];then mysqlrootpwd="MANAGER" fi echo"===========================" echo"MySQLrootpassword:$mysqlrootpwd" echo"===========================" #whichMySQLVersiondoyouwanttoinstall? echo"===========================" isinstallmysql56="n" echo"InstallMariaDB10.1.16,Pleaseinputy" read-p"(Pleaseinputy,n):"isinstallmysql56 case"$isinstallmysql56"in y|Y|Yes|YES|yes|yES|yEs|YeS|yeS) echo"YouwillinstallMySQL5.6.25" isinstallmysql56="y" ;; *) echo"INPUTerror,YouwillexitinstallMariaDB10.1.16" isinstallmysql56="n" exit esac get_char() { SAVEDSTTY=`stty-g` stty-echo sttycbreak #ddif=/dev/ttybs=1count=12>/dev/null stty-raw sttyecho stty$SAVEDSTTY } echo"" echo"Pressanykeytostart...orPressCtrl+ctocancel" char=`get_char` #Initializetheinstallationrelatedcontent. functionInitInstall() { cat/etc/issue uname-a MemTotal=`free-m|grepMem|awk'{print$2}'` echo-e"\nMemoryis:${MemTotal}MB" #Settimezone rm-rf/etc/localtime ln-s/usr/share/zoneinfo/Asia/Shanghai/etc/localtime #DeleteOldMysqlprogram rpm-qa|grepmysql rpm-emysql #DisableSeLinux if[-s/etc/selinux/config];then sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config fi setenforce0 } #Installationofdependonandoptimizationoptions. functionInstallDependsAndOpt() { cd$cur_dir cat>>/etc/security/limits.conf<<EOF *softnproc65535 *hardnproc65535 *softnofile65535 *hardnofile65535 EOF echo"fs.file-max=65535">>/etc/sysctl.conf } #InstallMySQL functionInstallMySQL56() { echo"============================InstallMariaDB10.1.16==================================" cd$cur_dir #Backupoldmy.cnf #rm-f/etc/my.cnf if[-s/etc/my.cnf];then mv/etc/my.cnf/etc/my.cnf.`date+%Y%m%d%H%M%S`.bak fi #mysqldirectoryconfiguration groupaddmysql-g512 useradd-u512-gmysql-s/sbin/nologin-d/home/mysqlmysql tarxvf/root/mariadb-10.1.16-linux-x86_64.tar.gz mv/root/mariadb-10.1.16-linux-x86_64/usr/local/mysql mkdir-p/data/mysql mkdir-p/log/mysql chown-Rmysql:mysql/data/mysql chown-Rmysql:mysql/usr/local/mysql chown-Rmysql:mysql/log SERVERID=`ifconfigeth0|grep"inetaddr"|awk'{print$2}'|awk-F.'{print$3$4}'` cat>>/etc/my.cnf<<EOF [client] port=3306 socket=/tmp/mysql.sock default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] port=3306 socket=/tmp/mysql.sock basedir=/usr/local/mysql datadir=/data/mysql open_files_limit=3072 back_log=103 max_connections=800 max_connect_errors=100000 table_open_cache=512 external-locking=FALSE max_allowed_packet=32M sort_buffer_size=2M join_buffer_size=2M thread_cache_size=51 query_cache_size=32M tmp_table_size=96M max_heap_table_size=96M slow_query_log=1 slow_query_log_file=/log/mysql/slow.log log-error=/log/mysql/error.log long_query_time=1 server-id=$SERVERID log-bin=/log/mysql/mysql-bin sync_binlog=1 binlog_cache_size=4M max_binlog_cache_size=8M max_binlog_size=1024M expire_logs_days=60 key_buffer_size=32M read_buffer_size=1M read_rnd_buffer_size=16M bulk_insert_buffer_size=64M character-set-server=utf8 default-storage-engine=InnoDB binlog_format=row innodb_buffer_pool_dump_at_shutdown=1 innodb_buffer_pool_load_at_startup=1 binlog_rows_query_log_events=1 explicit_defaults_for_timestamp=1 #log_slave_updates=1 #gtid_mode=on #enforce_gtid_consistency=1 #innodb_write_io_threads=8 #innodb_read_io_threads=8 #innodb_thread_concurrency=0 transaction_isolation=REPEATABLE-READ innodb_additional_mem_pool_size=16M innodb_buffer_pool_size=512M #innodb_data_home_dir= innodb_data_file_path=ibdata1:1024M:autoextend innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=16M innodb_log_file_size=512M innodb_log_files_in_group=2 innodb_max_dirty_pages_pct=50 innodb_file_per_table=1 innodb_locks_unsafe_for_binlog=0 wait_timeout=14400 interactive_timeout=14400 skip-name-resolve [mysqldump] quick max_allowed_packet=32M EOF /usr/local/mysql/scripts/mysql_install_db--basedir=/usr/local/mysql--datadir=/data/mysql--defaults-file=/etc/my.cnf--user=mysql cp/usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld chmod700/etc/init.d/mysqld chkconfig--addmysql chkconfig--level2345mysqldon cat>>/etc/ld.so.conf.d/mysql-x86_64.conf<<EOF /usr/local/mysql/lib EOF ldconfig if[-d"/proc/vz"];then ulimit-sunlimited fi /etc/init.d/mysqldstart cat>>/etc/profile<<EOF exportPATH=$PATH:/usr/local/mysql/bin exportLD_LIBRARY_PATH=/usr/local/mysql/lib EOF /usr/local/mysql/bin/mysqladmin-urootpassword$mysqlrootpwd cat>/tmp/mysql_sec_script<<EOF usemysql; deletefrommysql.userwhereuser!='root'orhost!='localhost'; flushprivileges; EOF /usr/local/mysql/bin/mysql-uroot-p$mysqlrootpwd-hlocalhost</tmp/mysql_sec_script #rm-f/tmp/mysql_sec_script /etc/init.d/mysqldrestart source/etc/profile echo"============================MariaDB10.1.16installcompleted=========================" } functionCheckInstall() { echo"=====================================Checkinstall===================================" clear ismysql="" echo"Checking..." if[-s/usr/local/mysql/bin/mysql]&&[-s/usr/local/mysql/bin/mysqld_safe]&&[-s/etc/my.cnf];then echo"MySQL:OK" ismysql="ok" else echo"Error:/usr/local/mysqlnotfound!!!MySQLinstallfailed." fi if["$ismysql"="ok"];then echo"InstallMariaDB10.1.16completed!enjoyit." echo"=========================================================================" netstat-ntl else echo"Sorry,FailedtoinstallMySQL!" echo"Youcantail/root/mysql-install.logfromyourserver." fi } #Theinstallationlog InitInstall2>&1|tee/root/mysql-install.log CheckAndDownloadFiles2>&1|tee-a/root/mysql-install.log InstallDependsAndOpt2>&1|tee-a/root/mysql-install.log InstallMySQL562>&1|tee-a/root/mysql-install.log CheckInstall2>&1|tee-a/root/mysql-install.log [root@HE3 ~]# mysql -uroot -pEnter password: Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 6Server version: 10.1.16-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+4 rows in set (0.00 sec) 至此,mariadb-10.1.16安装成功

优秀的个人博客,低调大师

Powershell AWS 自动化管理 (8) - CloudFront

这节来看看如何使用 PowerShell 在AWS里面创建CloudFront Distributions. CloudFront是AWS提供的CDN服务,允许创建一个分布点指向S3 或者Web server,各地的DNS会自动解析到最近的边缘服务器上,以便实现最佳访问速度。 具体的图像界面操作可以参考 http://beanxyz.blog.51cto.com/5570417/1532813 下面看看PowerShell如何操作。 首先需要有一个S3 bucket(前面已经创建过了),然后我上传一个图片做测试,记得把图片的访问权限设为公共可读 Write-S3Object-BucketNameyuanpicture-Key"1.jpg"-File"C:\Users\yli\OneDrive\Pictures\2010-09-28001\1.jpg" set-s3acl-BucketNameyuanpicture-Key"1.jpg"-PublicReadOnly get-s3object-BucketNameyuanpicture-Key1.jpg 直接访问看看没问题。 接下来我们需要设置一个cloudfront的分布点指向这个S3 Bucket 设置origin指向S3 Bucket,设置范围为全球,我还设置了一个别名test.beanxyz.com 因为他自动生成的域名实在是太长了 $origin=New-ObjectAmazon.CloudFront.Model.Origin $origin.DomainName="yuanpicture.s3.amazonaws.com" $origin.id="S3-yuanpicture" $origin.S3OriginConfig=New-ObjectAmazon.CloudFront.Model.S3OriginConfig $origin.S3OriginConfig.OriginAccessIdentity="" New-CFDistribution` -DistributionConfig_Enabled$true` -DistributionConfig_Comment"Testdistribution"` -Origins_Item$origin` -Origins_Quantity1` -DistributionConfig_CallerReferenceClient1` -DefaultCacheBehavior_TargetOriginId$origin.Id` -ForwardedValues_QueryString$true` -Cookies_Forwardall` -WhitelistedNames_Quantity0` -TrustedSigners_Enabled$false` -TrustedSigners_Quantity0` -DefaultCacheBehavior_ViewerProtocolPolicyallow-all` -DefaultCacheBehavior_MinTTL1000` -DistributionConfig_PriceClass"PriceClass_All"` -CacheBehaviors_Quantity0` -Aliases_Quantity1` -Aliases_Item"test.beanxyz.com" 执行命令以后,就开始创建了,大概15分钟后就能用了。 于此同时,在我godaddy的dns上我添加一个别名指向我的cloudfront 域名 等待5分钟之后,查看一下DNS 已经可以成功解析了 访问看看 成功!

优秀的个人博客,低调大师

PowerShell 自动化管理 AWS(4)- VPC

豆子继续来看看PowerShell 如何管理 AWS的虚拟网络 VPC。 网上我没有找到快速上手的文档,相关的命令主要来自官方api文档和get-command的搜索。 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html#route-tables-api-cli VPC的配置向导里面默认给了4种场景的配置方案,下面我以第一种最简单的场景为例,用PowerShell配置一下。 场景如下,简单的说,我需要配置一个VPC,里面再进一步划分一个子网作为公共区域,这个公共区域需要通过一个网关访问互联网,我需要给他配置路由表 现在看看具体的命令 首先创建一个新的VPC 10.2.0.0/16 #VPC #CreatenewVPC New-EC2Vpc-CidrBlock10.2.0.0/16 然后在这个VPC里面划分一个子网 10.2.1.0/24 #CreatesubnetinthenewVPC $vpcid=get-ec2vpc|Where-Object{$_.Cidrblock-eq"10.2.0.0/16"}|select-ExpandPropertyvpcid New-EC2Subnet-CidrBlock10.2.1.0/24-VpcId$vpcid 登录网页看看,已经成功创建了,不过他没有name的Tag,看起来不方便。 我给他添加一个Tag,标明他的位置在Sydney $subid=Get-EC2Subnet|Where-Object{$_.CidrBlock-eq"10.2.1.0/24"}|select-ExpandPropertySubnetId #AddaNameTagtotheSubnet $tag=new-objectAmazon.EC2.Model.Tag-Property@{key="Name";value="Sydney"} New-EC2Tag-Resource$subid-Tag$tag 执行命令之后可以看见名字已经更新了 接下来,我需要配置一个网关,首先看看有没有空余的,如果没有的话,就自己创建一个 #CreateInternetGateway,ifthereisnofreeIGW,createanewoneandattachtoVPC if((Get-EC2InternetGateway|Where-Object{$_.Attachments[0]-eq$null}|measure).count-eq0){ New-EC2InternetGateway } 创建以后的界面如下所示,目前没有名字,也没有绑定到任何的VPC网络。 给个名字,然后绑定上面创建的VPC中(注意不是Subnet) $igwid=Get-EC2InternetGateway|Where-Object{$_.Attachments[0]-eq$null}|select-ExpandPropertyinternetGateWayId new-EC2tag-Resource$igwid-Tag$tag Get-EC2InternetGateway$igwid|Add-EC2InternetGateway-VpcId$vpcid 如果想取消绑定,空余使用 dismount的命令 Dismount-EC2InternetGateway-InternetGatewayIdigw-08d9476d-VpcId$vpcid 最后,我们来看看路由表。 他默认会成一个主路由表,里面有个默认的路由指向本地。 我可以直接修改这个主路由表,也可以创建一个新的 比如说,我创建一个新的,然后在他上面添加一个新的路由,所有的网络访问都指向我的网关。 #RouteTable New-EC2RouteTable-VpcId$vpcid $routetable=Get-EC2RouteTable|Where-Object{$_.VpcId-eq$vpcid} #AddnewRoute New-EC2Route-DestinationCidrBlock"0.0.0.0/0"-GatewayId$igwid-RouteTableId$routetable.RouteTableId 如下所示 我还可以强制关联到对应的子网。如果是在默认的主路由表里面的话,所有的子网都会自动继承VPC相关的路由,当然我前面创建了一个新的,我也可以强制的绑定某个子网到这个路由表。 命令如下 Get-EC2Subnet-SubnetId$subid|gm Register-EC2RouteTable-RouteTableId$routetable.RouteTableId-SubnetId$subid 这样,一个最简单的VPC网络就完成了,包括VPC,Subnet,互联网网关,路由表。其余的公网IP,映射,DHCP等等我都没有进行手动配置,默认AWS都已经自动配置好可以使用了。 下一篇来看看ELB和AutoScaling的使用。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册