Bash 使用atom为aws编写脚本

Bash 使用atom为aws编写脚本,bash,amazon-web-services,atom-editor,Bash,Amazon Web Services,Atom Editor,所以我使用ATOM创建了一个用于AWS的脚本,在我运行它之后,我得到了很多要删除的资源,我有没有可能只运行脚本的一部分,使用所有变量,而不是再次运行所有脚本?因此,我不必每次脚本的一部分不起作用时都删除所有资源 #!/bin/bash aws configure set default.region us-east-1 #Create VPC VPC=$(aws ec2 create-vpc --cidr-block 192.168.0.0/16 | jq -r '.Vpc.VpcId')

所以我使用ATOM创建了一个用于AWS的脚本,在我运行它之后,我得到了很多要删除的资源,我有没有可能只运行脚本的一部分,使用所有变量,而不是再次运行所有脚本?因此,我不必每次脚本的一部分不起作用时都删除所有资源

#!/bin/bash
aws configure set default.region us-east-1

#Create VPC
VPC=$(aws ec2 create-vpc --cidr-block 192.168.0.0/16 | jq -r '.Vpc.VpcId')

#Public Subnets
PUBSUB1=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.21.0/24 | jq -r '.Subnet.SubnetId')

PUBSUB2=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.22.0/24 | jq -r '.Subnet.SubnetId')

PUBSUB3=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.23.0/24 | jq -r '.Subnet.SubnetId')

#Enable auto-assign public IPv4 address
aws ec2 modify-subnet-attribute --subnet-id $PUBSUB1 \
  --map-public-ip-on-launch  &> /dev/null

aws ec2 modify-subnet-attribute --subnet-id $PUBSUB2 \
  --map-public-ip-on-launch  &> /dev/null

aws ec2 modify-subnet-attribute --subnet-id $PUBSUB3 \
  --map-public-ip-on-launch  &> /dev/null

#Internet Gateway
GATEWAY=$(aws ec2 create-internet-gateway | \
 jq -r '.InternetGateway.InternetGatewayId')

#attach InternetGateway to VPC

aws ec2 attach-internet-gateway --internet-gateway-id $GATEWAY \
 --vpc-id $VPC &> /dev/null


#Create a public route table
PUBROUTETABLE1=$(aws ec2 create-route-table --vpc-id $VPC \
 | jq -r '.RouteTable.RouteTableId')


#assosiate subnets routetable public
aws ec2 associate-route-table --route-table-id $PUBROUTETABLE1 \
 --subnet-id $PUBSUB1 &> /dev/null

aws ec2 associate-route-table --route-table-id $PUBROUTETABLE1 \
 --subnet-id $PUBSUB2 &> /dev/null

aws ec2 associate-route-table --route-table-id $PUBROUTETABLE1 \
 --subnet-id $PUBSUB3 &> /dev/null

#Create route to internet on public gateway.
aws ec2 create-route --route-table-id $PUBROUTETABLE1 \
 --destination-cidr-block 0.0.0.0/0 --gateway-id $GATEWAY &> /dev/null

#Private Subnets
PRSUB1=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.31.0/24 | jq -r '.Subnet.SubnetId')

PRSUB2=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.32.0/24 | jq -r '.Subnet.SubnetId')

PRSUB3=$(aws ec2 create-subnet \
  --vpc-id $VPC \
    --cidr-block 192.168.33.0/24 | jq -r '.Subnet.SubnetId')

#CREATE ELASTIC IP
MYELASTICIP=$(aws ec2 allocate-address \
  --domain vpc \
    --network-border-group us-east-1 | jq -r '.AllocationId')

#Create NATGEATWAY

NATGATEWAY=$(aws ec2 create-nat-gateway --subnet-id $PUBSUB1 \
 --allocation-id $MYELASTICIP | jq -r '.NatGateway.NatGatewayId')

#Create a private route table
PRROUTETABLE2=$(aws ec2 create-route-table \
 --vpc-id $VPC | jq -r '.RouteTable.RouteTableId')

#assosiate subnets routetable private
aws ec2 associate-route-table --route-table-id $PRROUTETABLE2 \
 --subnet-id $PRSUB1 &> /dev/null

aws ec2 associate-route-table --route-table-id $PRROUTETABLE2 \
 --subnet-id $PRSUB2 &> /dev/null

aws ec2 associate-route-table --route-table-id $PRROUTETABLE2 \
 --subnet-id $PRSUB3 &> /dev/null

#Create route to internet on private gateway.
aws ec2 create-route --route-table-id $PRROUTETABLE2 \
 --destination-cidr-block 0.0.0.0/0 --gateway-id $NATGATEWAY &> /dev/null

#Creating SecurityGroups
SSHONLYGROUP=$(aws ec2 create-security-group --vpc-id $VPC \
 --group-name Only_SSH_22 --description "Only_SSH_80" | jq -r '.GroupId')

#Iddentify ports
aws ec2 authorize-security-group-ingress --group-id $SSHONLYGROUP \
 --protocol tcp --port 22 --cidr 0.0.0.0/0 &> /dev/null

aws ec2 authorize-security-group-ingress --group-id $SSHONLYGROUP \
 --protocol icmp --port all --cidr 0.0.0.0/0 &> /dev/null

HTTPSSHONLYGROUP=$(aws ec2 create-security-group --vpc-id $VPC \
 --group-name HTTP_SSH_80 --description "Only_SSH_80_http" | jq -r '.GroupId')

#Iddentify ports
aws ec2 authorize-security-group-ingress --group-id $HTTPSSHONLYGROUP \
 --protocol tcp --port 22 --cidr 0.0.0.0/0 &> /dev/null

aws ec2 authorize-security-group-ingress --group-id $HTTPSSHONLYGROUP \
 --protocol tcp --port 80 --cidr 0.0.0.0/0 &> /dev/null


#Installing ec2 BASTION HOST
MYBASTION=$(aws ec2 run-instances --image-id ami-0947d2ba12ee1ff75 \
 --subnet-id $PUBSUB1 --security-group-ids $SSHONLYGROUP \
  --instance-type t2.micro --key-name MyKey1 | jq -r '.Instances[].InstanceId')

#Installing webserver
WEBSERVER=$(aws ec2 run-instances --image-id ami-0947d2ba12ee1ff75 \
 --subnet-id $PUBSUB2 --security-group-ids $HTTPSSHONLYGROUP \
  --instance-type t2.micro --key-name MyKey1 \
   --user-data file://USERDATA.sh | jq -r '.Instances[].InstanceId')

#Installing MySQL on the private subnet
MYSQL=$(aws ec2 run-instances --image-id ami-0947d2ba12ee1ff75 \
 --subnet-id $PRSUB1 --security-group-ids $SSHONLYGROUP \
  --instance-type t2.micro --key-name MyKey1 \
   --user-data file://userdataMySQL.sh | jq -r '.Instances[].InstanceId')

#Creating VPC on difrient AZ
aws configure set default.region us-east-2
VPCOHIO=$(aws ec2 create-vpc --cidr-block 10.0.0.0/16 | jq -r '.Vpc.VpcId')

#Public Subnets
PUBSUB1=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
  --cidr-block 10.0.21.0/24 | jq -r '.Subnet.SubnetId')

PUBSUB2=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
  --cidr-block 10.0.22.0/24 | jq -r '.Subnet.SubnetId')

PUBSUB3=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
  --cidr-block 10.0.23.0/24 | jq -r '.Subnet.SubnetId')

#Enable auto-assign public IPv4 address
aws ec2 modify-subnet-attribute --subnet-id $PUBSUB1 \
 --map-public-ip-on-launch  &> /dev/null
aws ec2 modify-subnet-attribute --subnet-id $PUBSUB2 \
 --map-public-ip-on-launch  &> /dev/null
aws ec2 modify-subnet-attribute --subnet-id $PUBSUB3 \
 --map-public-ip-on-launch  &> /dev/null

#Internet Gateway
GATEWAY=$(aws ec2 create-internet-gateway | \
 jq -r '.InternetGateway.InternetGatewayId')

#Attach InternetGateway to VPC

aws ec2 attach-internet-gateway --internet-gateway-id $GATEWAY \
 --vpc-id $VPCOHIO &> /dev/null

#Create a public route table
PUBROUTETABLE3=$(aws ec2 create-route-table --vpc-id $VPCOHIO | \
 jq -r '.RouteTable.RouteTableId')

#Assosiate subnets routetable public
aws ec2 associate-route-table --route-table-id $PUBROUTETABLE3 \
 --subnet-id $PUBSUB1 &> /dev/null

aws ec2 associate-route-table --route-table-id $PUBROUTETABLE3 \
 --subnet-id $PUBSUB2 &> /dev/null

aws ec2 associate-route-table --route-table-id $PUBROUTETABLE3 \
 --subnet-id $PUBSUB3 &> /dev/null


#Create route to internet on public gateway.
aws ec2 create-route --route-table-id $PUBROUTETABLE3 \
 --destination-cidr-block 0.0.0.0/0 --gateway-id $GATEWAY &> /dev/null

#Private Subnets
PRSUB1=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
--cidr-block 10.0.31.0/24 | jq -r '.Subnet.SubnetId')

PRSUB2=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
--cidr-block 10.0.32.0/24 | jq -r '.Subnet.SubnetId')

PRSUB3=$(aws ec2 create-subnet \
--vpc-id $VPCOHIO \
--cidr-block 10.0.33.0/24 | jq -r '.Subnet.SubnetId')


#CREATE ELASTIC IP
MYELASTICIP=$(aws ec2 allocate-address \
    --domain vpc \
    --network-border-group us-east-2 | jq -r '.AllocationId')


#Create NATGEATWAY

NATGATEWAY=$(aws ec2 create-nat-gateway --subnet-id $PUBSUB1 \
 --allocation-id $MYELASTICIP | jq -r '.NatGateway.NatGatewayId')


#Create a private route table
PRROUTETABLE4=$(aws ec2 create-route-table --vpc-id $VPCOHIO | \
 jq -r '.RouteTable.RouteTableId')


#assosiate subnets routetable private
aws ec2 associate-route-table --route-table-id $PRROUTETABLE4 \
 --subnet-id $PRSUB1 &> /dev/null

aws ec2 associate-route-table --route-table-id $PRROUTETABLE4 \
 --subnet-id $PRSUB2 &> /dev/null

aws ec2 associate-route-table --route-table-id $PRROUTETABLE4 \
 --subnet-id $PRSUB3 &> /dev/null

#Create route to internet on private gateway.
aws ec2 create-route --route-table-id $PRROUTETABLE4 --destination-cidr-block \
 0.0.0.0/0 --gateway-id $NATGATEWAY &> /dev/null

#Creating SecurityGroups
SSHONLYGROUP=$(aws ec2 create-security-group --vpc-id $VPCOHIO \
 --group-name Only_SSH_22 --description "Only_SSH_80" | jq -r '.GroupId')

#Iddentify ports
aws ec2 authorize-security-group-ingress --group-id $SSHONLYGROUP \
 --protocol tcp --port 22 --cidr 0.0.0.0/0 &> /dev/null
 
aws ec2 authorize-security-group-ingress --group-id $SSHONLYGROUP \
 --protocol icmp --port all --cidr 0.0.0.0/0 &> /dev/null

#Installing ec2 BASTION HOST
MYBASTION=$(aws ec2 run-instances --image-id ami-03657b56516ab7912 \
 --subnet-id $PUBSUB1 --security-group-ids $SSHONLYGROUP \
  --instance-type t2.micro --key-name ohiokaypair | \
   jq -r '.Instances[].InstanceId')
我开始在脚本的这一部分中出现一些错误

#Create VPC peering
VPCPEERINGID=$(aws ec2 create-vpc-peering-connection --vpc-id $VPCOHIO \
 --peer-vpc-id $VPC --peer-region us-east-1 | \
  jq -r '.VpcPeeringConnection.VpcPeeringConnectionId')

#Accept VPC peering in virginia
aws configure set default.region us-east-1
aws ec2 accept-vpc-peering-connection \
 --vpc-peering-connection-id $VPCPEERINGID &> /dev/null

#Create RouteTable to vpc
aws ec2 create-route --route-table-id $PUBROUTETABLE1 \
 --destination-cidr-block 192.168.0.0/16 --gateway-id $VPCPEERINGID &> /dev/null

#Back to ohio
aws configure set default.region us-east-2
aws ec2 create-route --route-table-id $PUBROUTETABLE3 \
 --destination-cidr-block 10.0.0.0/16 --gateway-id $VPCPEERINGID &> /dev/null


可能与您发布代码有关,如果您想在脚本退出后清理,请检查
help trap
Diego Torres Milano添加的脚本