マルチクラウドでVPC同士接続してみるその②(AWSとAzure編)

 前回から時間が空きましたが、今度はAzureとAWSをSite to SiteVPNで接続してみました。ひとまずはEC2とAzureVMも立てて通信できているかも確認しました。Azureの方でVPNGateway作成するときに20分とか結構な時間がかかるので要注意かな。

構成は以下の図みたいな感じです。






◆シリーズ

1.AWSとGCP接続
2.AWSとAzure接続
3.GCPとAzure接続

4.AWSとGCPとAzure接続

◆大まかな流れ

1.AWSでVPCとサブネット作成

2.AzureでVNETとサブネット作成

3.AzureでVPNGateway作成

4.AWSで仮想プライベートゲートウェイ作成

5.Azureでローカルネットワークゲートウェイ作成とトンネル設定

6.AWSでプライベートサブネットにEC2作成

7.AZureでサブネットにVMを作成

8.Azure側の後始末

9.AWS側の後始末


◆コマンドライン(先頭にプロンプト付きなので注意)

1.AWSでVPCとサブネット作成

1.1.VPC作成

$ REGION=ap-northeast-1
$ VPC_NAME=multi-cloud-vpn-aws
$ VPC_CIDR=172.20.0.0/16
$ STRING_EC2_VPC_TAG="ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME}}]" \
&& echo ${STRING_EC2_VPC_TAG}

$ aws ec2 create-vpc \
  --cidr-block ${VPC_CIDR} \
  --tag-specifications ${STRING_EC2_VPC_TAG}

1.2.サブネット作成

$ AZ_CODE="a"
$ SUBNET_TYPE="private"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
&& echo ${SUBNET_NAME}
$ SUBNET_CIDR=172.20.10.0/24
$ AZ_NAME=${REGION}${AZ_CODE} \
&& echo ${AZ_NAME}
$ STRING_EC2_SUBNET_TAG="ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME}}]" \
&& echo ${STRING_EC2_SUBNET_TAG}

$ VPC_ID=$( \
  aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${VPC_NAME}  \
    --query 'Vpcs[].VpcId' \
    --output text \
) \
&& echo ${VPC_ID}

$ aws ec2 create-subnet \
  --vpc-id ${VPC_ID} \
  --cidr-block ${SUBNET_CIDR} \
  --availability-zone ${AZ_NAME} \
  --tag-specifications ${STRING_EC2_SUBNET_TAG}

$ AZ_CODE="c"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
&& echo ${SUBNET_NAME}
$ SUBNET_CIDR=172.20.20.0/24
$ AZ_NAME=${REGION}${AZ_CODE} \
&& echo ${AZ_NAME}
$ STRING_EC2_SUBNET_TAG="ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME}}]" \
&& echo ${STRING_EC2_SUBNET_TAG}

$ aws ec2 create-subnet \
  --vpc-id ${VPC_ID} \
  --cidr-block ${SUBNET_CIDR} \
  --availability-zone ${AZ_NAME} \
  --tag-specifications ${STRING_EC2_SUBNET_TAG}

1.3.セキュリティグループ作成

1.3.1.セキュリティグループ作成
$ SECURITY_GROUP_NAME=${VPC_NAME}"-sg" \
&& echo ${SECURITY_GROUP_NAME}
$ STRING_SG_TAG="ResourceType=security-group,Tags=[{Key=Name,Value=${SECURITY_GROUP_NAME}}]" \
&& echo ${STRING_SG_TAG}
$ SECURITY_GROUP_DESCRIPTION='multi-cloud-vpn'

$ aws ec2 create-security-group \
  --group-name ${SECURITY_GROUP_NAME} \
  --description "${SECURITY_GROUP_DESCRIPTION}" \
  --vpc-id ${VPC_ID} \
  --tag-specifications ${STRING_SG_TAG}

1.3.2.セキュリティグループルールの追加
$ VPC_COMMENT=ingress_internal
$ ACCEPT_CIDR=172.31.0.0/16           #GCPのサブネットIPアドレスレンジ
$ ACCEPT_INGRESS_COMMENT=ingress_vpn
# $ ACCEPT_EGRESS_COMMENT=egress_vpn
$ SECURITY_GROUP_ID=$( \
  aws ec2 describe-security-groups \
  --filter Name=vpc-id,Values=${VPC_ID} \
    Name=group-name,Values=${SECURITY_GROUP_NAME} \
  --query 'SecurityGroups[].GroupId' \
  --output text \
) \
&& echo ${SECURITY_GROUP_ID}

$ aws ec2 authorize-security-group-ingress \
  --group-id ${SECURITY_GROUP_ID} \
  --ip-permissions IpProtocol=-1,IpRanges="[{CidrIp=${VPC_CIDR},Description=\"${VPC_COMMENT}\"}]"

$ aws ec2 authorize-security-group-ingress \
  --group-id ${SECURITY_GROUP_ID} \
  --ip-permissions IpProtocol=-1,IpRanges="[{CidrIp=${ACCEPT_CIDR},Description=\"${ACCEPT_INGRESS_COMMENT}\"}]"

1.4.ルートテーブルへのアタッチ

$ ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${VPC_ID} \
    --query "RouteTables[].RouteTableId" \
    --output text \
) \
&& echo ${ROUTE_TABLE_ID}
$ ROUTE_TABLE_NAME="rt-"${VPC_NAME} \
&& echo ${ROUTE_TABLE_NAME}

$ aws ec2 create-tags \
  --resources ${ROUTE_TABLE_ID} \
  --tags '[{"Key":"Name","Value":"'${ROUTE_TABLE_NAME}'"}]'
 
$ AZ_CODE="a"
$ SUBNET_TYPE="private"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
&& echo ${SUBNET_NAME}

$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
&& echo ${SUBNET_ID}

$ aws ec2 associate-route-table \
   --subnet-id ${SUBNET_ID} \
   --route-table-id ${ROUTE_TABLE_ID}

$ AZ_CODE="c"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
&& echo ${SUBNET_NAME}

$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
&& echo ${SUBNET_ID}

$ aws ec2 associate-route-table \
   --subnet-id ${SUBNET_ID} \
   --route-table-id ${ROUTE_TABLE_ID}

2.AzureでVNETとサブネット作成

2.1.NSGの作成

2.1.1.NSG作成
$ VNET_NAME=multi-cloud-vpn-azure
$ RESOURCE_GROUP=rg_multicloud
$ NSG_NAME=${VNET_NAME}-nsg
$ AWS_SUBNET_CIDR=172.20.0.0/16
$ VNET_CIDR=172.31.0.0/16
$ az network nsg create --resource-group ${RESOURCE_GROUP} --name ${NSG_NAME}
2.1.2.NSGルール追加
$ NSG_RULE_NAME=${NSG_NAME}-azure-ingress
$ az network nsg rule create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${NSG_RULE_NAME} \
  --nsg-name ${NSG_NAME} \
  --priority 100 \
  --source-address-prefixes ${VNET_CIDR} \
  --destination-port-ranges * \
  --destination-address-prefixes ${VNET_CIDR} \
  --access Allow \
  --protocol * \
  --description "allow azure subnet."

$ NSG_RULE_NAME=${NSG_NAME}-aws-ingress
$ az network nsg rule create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${NSG_RULE_NAME} \
  --nsg-name ${NSG_NAME} \
  --priority 101 \
  --source-address-prefixes ${AWS_SUBNET_CIDR} \
  --destination-port-ranges * \
  --destination-address-prefixes ${VNET_CIDR} \
  --access Allow \
  --protocol * \
  --description "allow aws subnet."

$ NSG_RULE_NAME=${NSG_NAME}-aws-egress
$ az network nsg rule create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${NSG_RULE_NAME} \
  --nsg-name ${NSG_NAME} \
  --priority 111 \
  --source-address-prefixes ${VNET_CIDR} \
  --destination-port-ranges * \
  --destination-address-prefixes ${AWS_SUBNET_CIDR} \
  --access Allow \
  --protocol * \
  --description "allow aws subnet."

$ NSG_RULE_NAME=${NSG_NAME}-ssh-allow
$ az network nsg rule create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${NSG_RULE_NAME} \
  --nsg-name ${NSG_NAME} \
  --priority 102 \
  --source-address-prefixes 0.0.0.0/0 \
  --destination-address-prefixes ${VNET_CIDR} \
  --destination-port-ranges 22 \
  --access Allow \
  --protocol Tcp

2.2.V-NET作成

2.2.1.VNETとゲートウェイサブネット作成
$ SUBNET_CIDR=172.31.255.0/24

$ az network vnet create --name ${VNET_NAME} \
  --resource-group ${RESOURCE_GROUP} \
  --address-prefix ${VNET_CIDR} \
  --subnet-name GatewaySubnet \
  --subnet-prefixes ${SUBNET_CIDR}

2.2.2.追加サブネット作成

$ SUBNET_NAME=${VNET_NAME}-subnet
$ SUBNET_CIDR=172.31.10.0/27

$ az network vnet subnet create --name ${SUBNET_NAME} \
  --resource-group ${RESOURCE_GROUP} \
  --vnet-name ${VNET_NAME} \
  --address-prefixes ${SUBNET_CIDR} \
  --network-security-group ${NSG_NAME}

3.AzureでVPNGateway作成

3.1.追加IPアドレス作成

$ PUBLIC_IP_NAME=${VNET_NAME}-ip
$ az network public-ip create \
  --name ${PUBLIC_IP_NAME} \
  --resource-group ${RESOURCE_GROUP}

$ AZURE_PUBLIC_IP=$( \
  az network public-ip show --name ${PUBLIC_IP_NAME} \
    --resource-group ${RESOURCE_GROUP} \
    --query "ipAddress" -o tsv \
  ) \
&& echo ${AZURE_PUBLIC_IP}

3.2.VPNgateway作成

$ SUBNET_NAME=${VNET_NAME}-vpngw-subnet
$ VPN_GATEWAY_NAME=${VNET_NAME}-vpngw
$ SKU_TYPE=VpnGw1

$ az network vnet-gateway create --name ${VPN_GATEWAY_NAME} \
  --public-ip-address ${PUBLIC_IP_NAME} \
  --resource-group ${RESOURCE_GROUP} \
  --location japaneast \
  --vnet ${VNET_NAME} \
  --gateway-type Vpn \
  --sku ${SKU_TYPE} \
  --vpn-type RouteBased

~作成完了まで23分ほどかかる~

4.AWSで仮想プライベートゲートウェイ作成

4.1.CustomerGateway作成

$ CUSTOMER_GATEWAY_NAME=${VPC_NAME}"-csgw" \
  && echo ${CUSTOMER_GATEWAY_NAME}
$ GCP_IP_ADDRESS=  #Azureで予約した外部アドレス(AZURE_PUBLIC_IP)
$ BGP_ARN=65000

$ aws ec2 create-customer-gateway \
  --tag-specifications "ResourceType=customer-gateway,Tags=[{Key=Name,Value=${CUSTOMER_GATEWAY_NAME}}]" \
  --type ipsec.1 \
  --public-ip ${GCP_IP_ADDRESS} \
  --bgp-asn ${BGP_ARN}

4.2.VPN接続作成

$ CGW_ID=$( \
  aws ec2 describe-customer-gateways \
  --filters "Name=tag:Name,Values=${CUSTOMER_GATEWAY_NAME}" \
  --query 'CustomerGateways[?State==`available`].CustomerGatewayId' \
  --output text \
  )\
  && echo ${CGW_ID}
$ VPN_CONNECTION_NAME=${VPC_NAME}"-con" \
  && echo ${VPN_CONNECTION_NAME}

$ aws ec2 create-vpn-connection \
    --tag-specifications "ResourceType=vpn-connection,Tags=[{Key=Name,Value=${VPN_CONNECTION_NAME}}]" \
    --type ipsec.1 \
    --customer-gateway-id ${CGW_ID} \
    --vpn-gateway-id ${VGW_ID} \
    --options "{\"StaticRoutesOnly\":true}"

#~利用可能になるまで5分ほど待つ必要あり~

$ VPN_CONID=$( \
  aws ec2 describe-vpn-connections \
  --filters "Name=tag:Name,Values=${VPN_CONNECTION_NAME}" \
  --query 'VpnConnections[?State==`available`].VpnConnectionId' \
  --output text \
) \
  && echo ${VPN_CONID}

$ GCP_REMOTE_CIDR=172.30.0.0/16  #GCPのサブネットのCIDR

$ aws ec2 create-vpn-connection-route \
  --destination-cidr-block ${GCP_REMOTE_CIDR} \
  --vpn-connection-id ${VPN_CONID}

4.3.AWSの接続情報取得

$ aws ec2 describe-vpn-connections --vpn-connection-id ${VPN_CONID} --output text | \
  grep -E '^TUNNELOPTIONS' | \
  sed -e 's/^TUNNELOPTIONS\s+//' | \
  sed -e 's/\s+/ /g'

5.Azureでローカルネットワークゲートウェイ作成とトンネル設定

5.1.VPNトンネル1のローカルネットワークゲートウェイ作成

$ LOCAL_GW_NAME=${VNET_NAME}"-lngw1" \
&& echo ${LOCAL_GW_NAME}
$ AWS_VPN_IP=#AWSのVPNTunnnel1のIPアドレス
$ AWS_REMOTE_CIDR=172.20.0.0/16       #AWS側のVPCのCIDR
$ IKE_VERS=1
$ SHARED_SECRET=#AWSで発行したシェアードシークレット

$ az network local-gateway create  --name ${LOCAL_GW_NAME} \
  --gateway-ip-address ${AWS_VPN_IP} \
  --resource-group ${RESOURCE_GROUP} \
  --local-address-prefixes ${AWS_REMOTE_CIDR}

$ VPN_CON_NAME=${VNET_NAME}"-vpnc1" \
&& echo ${VPN_CON_NAME}
$ az network vpn-connection create --name ${VPN_CON_NAME} \
  --resource-group ${RESOURCE_GROUP} \
  --vnet-gateway1 ${VPN_GATEWAY_NAME} \
  --local-gateway2 ${LOCAL_GW_NAME} \
  --shared-key ${SHARED_SECRET}

5.2.VPNトンネル2のローカルネットワークゲートウェイ作成

$ LOCAL_GW_NAME=${VNET_NAME}"-lngw2" \
&& echo ${LOCAL_GW_NAME}
$ AWS_VPN_IP=#AWSのVPNTunnnel2のIPアドレス
$ SHARED_SECRET=#AWSで発行したシェアードシークレット

$ az network local-gateway create  --name ${LOCAL_GW_NAME} \
  --gateway-ip-address ${AWS_VPN_IP} \
  --resource-group ${RESOURCE_GROUP} \
  --local-address-prefixes ${AWS_REMOTE_CIDR}

$ VPN_CON_NAME=${VNET_NAME}"-vpnc2" \
&& echo ${VPN_CON_NAME}
$ az network vpn-connection create --name ${VPN_CON_NAME} \
  --resource-group ${RESOURCE_GROUP} \
  --vnet-gateway1 ${VPN_GATEWAY_NAME} \
  --local-gateway2 ${LOCAL_GW_NAME} \
  --shared-key ${SHARED_SECRET}

6.AWSでプライベートサブネットにEC2作成

6.1.AZ-aで作成

$ INSTANCE_AMI=ami-0a0b7b240264a48d7
$ INSTANCE_TYPE=t3.nano
$ AZ_CODE="a"
$ SUBNET_TYPE="private"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
  && echo ${SUBNET_NAME}
$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
  && echo ${SUBNET_ID}
$ INSTANCE_NAME=multicloud_aws_instance
$ KEY_PAIR_NAME=multicloud_test          #キーはあらかじめ作成しておく

$ aws ec2 run-instances \
  --image-id $INSTANCE_AMI --count 1 \
  --instance-type t3.nano --key-name $KEY_PAIR_NAME \
  --subnet-id $SUBNET_ID \
  --security-group-ids $SECURITY_GROUP_ID \
  --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${INSTANCE_NAME}}]"

6.2.AZ-cで作成

$ AZ_CODE="c"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
  && echo ${SUBNET_NAME}
$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
  && echo ${SUBNET_ID}
$ INSTANCE_NAME=multicloud_aws_instance_2

$ aws ec2 run-instances \
  --image-id $INSTANCE_AMI --count 1 \
  --instance-type t3.nano --key-name $KEY_PAIR_NAME \
  --subnet-id $SUBNET_ID \
  --security-group-ids $SECURITY_GROUP_ID \
  --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${INSTANCE_NAME}}]"

7.AZureでサブネットにVMを作成

7.1.SSHkey作成とVM作成

$ VM_IMAGE=Ubuntu2204
$ VM_SIZE=Standard_B1ls
$ VM_NAME=multicloud-azure-vm
$ VM_STORAGE=StandardSSD_LRS
$ VM_USER=azureuser
$ VM_SSH_KEY=${VM_NAME}-key
$ SUBNET_NAME=${VNET_NAME}-subnet

$ az sshkey create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${VM_SSH_KEY}

$ az vm create \
  --resource-group ${RESOURCE_GROUP} \
  --name ${VM_NAME} \
  --image ${VM_IMAGE} \
  --size ${VM_SIZE} \
  --vnet-name ${VNET_NAME} \
  --subnet ${SUBNET_NAME} \
  --storage-sku ${VM_STORAGE} \
  --nic-delete-option Delete \
  --os-disk-delete-option Delete \
  --admin-username ${VM_USER} \
  --ssh-key-name ${VM_SSH_KEY}

7.2.VMへのSSH接続

VMIP=$(az vm show --show-details --resource-group ${RESOURCE_GROUP} \
 --name ${VM_NAME} --query publicIps -o tsv) \
&& echo@$VMIP
$ chmod 600 .ssh/NNNN_NNNNNN
$ ssh -i .ssh/NNNN_NNNNNN azureuser@$VMIP

8.Azure側の後始末

8.1.VM削除

$ az vm delete --name ${VM_NAME} --resource-group ${RESOURCE_GROUP}
$ PUBLIC_IP_NAME=${VM_NAME}PublicIP
$ az network public-ip delete --name ${PUBLIC_IP_NAME} --resource-group ${RESOURCE_GROUP}
$ NSG_NAME=${VM_NAME}NSG
$ az network nsg delete --name ${NSG_NAME} --resource-group ${RESOURCE_GROUP}
$ az sshkey delete --name ${VM_SSH_KEY} --resource-group ${RESOURCE_GROUP}
$ rm -rf .ssh/*

8.2.VPNトンネル削除

$ az network vpn-connection delete --name ${VPN_CON_NAME} --resource-group ${RESOURCE_GROUP}
$ az network local-gateway delete  --name ${LOCAL_GW_NAME} --resource-group ${RESOURCE_GROUP}

$ LOCAL_GW_NAME=${VNET_NAME}"-lngw1" \
&& echo ${LOCAL_GW_NAME}
$ VPN_CON_NAME=${VNET_NAME}"-vpnc1" \
&& echo ${VPN_CON_NAME}

$ az network vpn-connection delete --name ${VPN_CON_NAME} --resource-group ${RESOURCE_GROUP}
$ az network local-gateway delete  --name ${LOCAL_GW_NAME} --resource-group ${RESOURCE_GROUP}

8.3.VPNGateway削除

$ az network vnet-gateway delete --name ${VPN_GATEWAY_NAME} --resource-group ${RESOURCE_GROUP}

~23分ほどかかる~

8.4.IPアドレス削除

$ PUBLIC_IP_NAME=${VNET_NAME}-ip
$ az network public-ip delete --name ${PUBLIC_IP_NAME} --resource-group ${RESOURCE_GROUP}

8.5.V-NET削除

$ az network vnet delete --name ${VNET_NAME} --resource-group ${RESOURCE_GROUP}

8.6.セキュリティグループ削除

$ NSG_NAME=${VNET_NAME}-nsg
$ az network nsg delete --name ${NSG_NAME} --resource-group ${RESOURCE_GROUP}

9.AWS側の後始末

9.1.EC2削除

$ INSTANCE_NAME=multicloud_aws_instance
$ EC2_ID=$( \
  aws ec2 describe-instances \
  --filters "Name=tag:Name,Values=${INSTANCE_NAME}" \
  --query "Reservations[*].Instances[*].InstanceId" \
  --output text \
) \
  && echo ${EC2_ID}
$ aws ec2 terminate-instances --instance-ids ${EC2_ID}


$ INSTANCE_NAME=multicloud_aws_instance_2
$ EC2_ID=$( \
  aws ec2 describe-instances \
  --filters "Name=tag:Name,Values=${INSTANCE_NAME}" \
  --query "Reservations[*].Instances[*].InstanceId" \
  --output text \
) \
  && echo ${EC2_ID}
$ aws ec2 terminate-instances --instance-ids ${EC2_ID}

9.2.VPNトンネル削除

$ VPC_NAME=multi-cloud-vpn-aws
$ VPN_CONNECTION_NAME=${VPC_NAME}"-con" \
&& echo ${VPN_CONNECTION_NAME}
$ VPN_CONID=$( \
  aws ec2 describe-vpn-connections \
  --filters "Name=tag:Name,Values=$VPN_CONNECTION_NAME" \
  --query 'VpnConnections[?State==`available`].VpnConnectionId' \
  --output text \
) \
  && echo ${VPN_CONID}

$ aws ec2 delete-vpn-connection --vpn-connection-id ${VPN_CONID}

9.3.カスタマーゲートウェイ削除

$ CUSTOMER_GATEWAY_NAME=${VPC_NAME}"-csgw" \
  && echo ${CUSTOMER_GATEWAY_NAME}
$ CGW_ID=$( \
  aws ec2 describe-customer-gateways \
  --filters "Name=tag:Name,Values=$CUSTOMER_GATEWAY_NAME" \
  --query 'CustomerGateways[?State==`available`].CustomerGatewayId' \
  --output text \
)\
  && echo ${CGW_ID}
$ aws ec2 delete-customer-gateway --customer-gateway-id $CGW_ID

9.4.仮想プライベートゲートウェイ削除

$ VPN_GATEWAY_NAME=${VPC_NAME}"-vpn-gw" \
  && echo ${VPN_GATEWAY_NAME}
$ VPC_ID=$( \
 aws ec2 describe-vpcs \
 --filters "Name=tag:Name,Values=$VPC_NAME" \
 --query 'Vpcs[*].VpcId' \
 --output text \
) \
  && echo ${VPC_ID}

$ VGW_ID=$( \
  aws ec2 describe-vpn-gateways \
  --filters "Name=tag:Name,Values=$VPN_GATEWAY_NAME" \
  --query 'VpnGateways[?State==`available`].VpnGatewayId' \
  --output text \
) \
  && echo ${VGW_ID}
$ aws ec2 detach-vpn-gateway --vpn-gateway-id $VGW_ID --vpc-id $VPC_ID
$ aws ec2 delete-vpn-gateway --vpn-gateway-id $VGW_ID --region $REGION

9.5.VPC削除

9.5.1.セキュリティグループ削除
$ SECURITY_GROUP_NAME=${VPC_NAME}"-sg" \
  && echo ${SECURITY_GROUP_NAME}
$ SECURITY_GROUP_ID=$( \
  aws ec2 describe-security-groups \
  --filter Name=vpc-id,Values=${VPC_ID} \
    Name=group-name,Values=${SECURITY_GROUP_NAME} \
  --query 'SecurityGroups[].GroupId' \
  --output text \
) \
  && echo ${SECURITY_GROUP_ID}

$ aws ec2 delete-security-group --group-id ${SECURITY_GROUP_ID}
9.5.2.サブネット削除
$ AZ_CODE="a"
$ SUBNET_TYPE="private"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
  && echo ${SUBNET_NAME}
$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
  && echo ${SUBNET_ID}
  
$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID}

$ AZ_CODE="c"
$ SUBNET_NAME=${VPC_NAME}"-"${SUBNET_TYPE}"-subnet-"${AZ_CODE} \
  && echo ${SUBNET_NAME}
$ SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
  && echo ${SUBNET_ID}
$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID}
9.5.3.VPC削除
$ aws ec2 delete-vpc --vpc-id ${VPC_ID}

◆参考サイト

・AzureとAWS接続

https://infrastructure-engineer.com/azure-site-to-site-vpn-005/

https://dev.classmethod.jp/articles/site_vpn_azure_aws/

https://qiita.com/tnksth/items/9728cf2e078a386430d4

https://iret.media/97679

https://blog.serverworks.co.jp/aws_azure_vpn

https://www.ctc-g.co.jp/solutions/cloud/column/article/106.html

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-cli


・NSG作成





・ローカルネットワークゲートウェイ


これでAWS⇔AzureとAWS⇔GCPの相互接続はできたわけです。後はGCPとAzureをつないでやれば3クラウドの相互接続ができるのかなぁとか勝手に思っています。次もコマンドラインでGCPとAzureをVPN接続してみます。Azureは無料枠がないので課金がツライ・・・。

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)