Amazon web services 获取一个ec2实例到另一个ec2实例的私有IP地址
我使用YAML模板在AWS CloudFormation中创建了两个Amazon EC2实例。我想将一个EC2实例的私有IP地址传递给另一个具有公共IP地址的EC2实例。根据AWS文档,我们可以使用Amazon web services 获取一个ec2实例到另一个ec2实例的私有IP地址,amazon-web-services,amazon-ec2,yaml,amazon-cloudformation,Amazon Web Services,Amazon Ec2,Yaml,Amazon Cloudformation,我使用YAML模板在AWS CloudFormation中创建了两个Amazon EC2实例。我想将一个EC2实例的私有IP地址传递给另一个具有公共IP地址的EC2实例。根据AWS文档,我们可以使用!GetAtt JMeterServer1Instance.PrivateIp 我想知道我应该在模板中的公共EC2实例的哪个部分添加它。(请考虑这是YAML模板) 如何检查我们是否已收到 这取决于你想在另一台机器上使用私有IP做什么。 如果要在另一个VM上的脚本中使用它,请在用户数据脚本中向下传递它,
!GetAtt JMeterServer1Instance.PrivateIp
这取决于你想在另一台机器上使用私有IP做什么。 如果要在另一个VM上的脚本中使用它,请在用户数据脚本中向下传递它,如本例所示:
链接上的示例显示的是
NetworkInterface
的属性,而不是实例属性,但是与此相同!GetAtt JMeterServer1Instance.PrivateIp取决于您希望在另一台计算机上使用私有IP做什么。
如果要在另一个VM上的脚本中使用它,请在用户数据脚本中向下传递它,如本例所示:
链接上的示例显示的是NetworkInterface
的属性,而不是实例属性,但是与此相同!如果您使用的是AWS::EC2::Instance
类型,请查看UserData
。更多
样本模板
Type: "AWS::EC2::Instance"
Properties:
ImageId: <ami>
InstanceType: "t2.micro"
KeyName: <keyname>
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash
yum install httpd php mysql php-mysql -y
yum update -y
chkconfig httpd on
service httpd start
类型:“AWS::EC2::实例”
特性:
ImageId:
InstanceType:“t2.micro”
关键字名称:
用户数据:
“Fn::Base64”:
!潜艇|
#!/bin/bash
yum安装httpd-php-mysql-y
yum更新-y
chkconfig httpd on
启动服务
如果您使用的是AWS::EC2::Instance
类型,请查看UserData
。更多
样本模板
Type: "AWS::EC2::Instance"
Properties:
ImageId: <ami>
InstanceType: "t2.micro"
KeyName: <keyname>
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash
yum install httpd php mysql php-mysql -y
yum update -y
chkconfig httpd on
service httpd start
类型:“AWS::EC2::实例”
特性:
ImageId:
InstanceType:“t2.micro”
关键字名称:
用户数据:
“Fn::Base64”:
!潜艇|
#!/bin/bash
yum安装httpd-php-mysql-y
yum更新-y
chkconfig httpd on
启动服务
您的要求似乎是:
- 在CloudFormation模板中创建两个实例
- 在实例A的用户数据中,请参阅实例B
这很简单。首先,定义Instance-BDependsOn
Instance-A,以确保在Instance-B之前创建Instance-A
然后,在实例B的用户数据中,参考实例A:
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash
echo "${InstanceA.PrivateIp}" >foo
“更好”的方法是在路由53中为VPC使用DNS名称和托管区域。这将为VPC创建一个DNS区域,然后定义一个可以在本地解析的DNS名称。将其链接到实例B,然后实例A可以通过DNS名称而不是IP地址引用实例B。如果需要,这允许DNS名称在将来指向不同的实例,并在实例a和实例B之间创建较少的依赖关系(但不可否认,需要更多的设置)。您的要求似乎是:
- 在CloudFormation模板中创建两个实例
- 在实例A的用户数据中,请参阅实例B
这很简单。首先,定义Instance-BDependsOn
Instance-A,以确保在Instance-B之前创建Instance-A
然后,在实例B的用户数据中,参考实例A:
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash
echo "${InstanceA.PrivateIp}" >foo
“更好”的方法是在路由53中为VPC使用DNS名称和托管区域。这将为VPC创建一个DNS区域,然后定义一个可以在本地解析的DNS名称。将其链接到实例B,然后实例A可以通过DNS名称而不是IP地址引用实例B。这允许DNS名称在将来根据需要指向不同的实例,并在实例a和实例B之间创建较少的依赖关系(但必须承认,设置更多)。根据
Fn::GetAtt
我会在这里搞定的
我的情况是:
需要首先创建EC2Instance001
EC2Instance002需要使用EC2Instance001的IP
在EC2Instance002中,使用两个特定设置创建实例:
- “DependsOn”:[“EC2Instance001”]因为我希望首先创建EC2Instance001
- 在Userdata(或metadata)下,使用{“Fn::GetAtt”:[“EC2Instance001”,“PrivateIp”]}获取第一个实例(EC2Instance001)的IP
以下是我如何实现的(EC2Instance002):
您可以看到,在元数据下,我正在变量$MASTERIP中捕获EC2Instance001实例的IP
注意:JSON中的同一行将写为:
"MASTERIP=",{ "Fn::GetAtt" : [ "EC2Instance001", "PrivateIp" ] }, "\n",
按照
Fn::GetAtt
我会在这里搞定的
我的情况是:
需要首先创建EC2Instance001
EC2Instance002需要使用EC2Instance001的IP
在EC2Instance002中,使用两个特定设置创建实例:
- “DependsOn”:[“EC2Instance001”]因为我希望首先创建EC2Instance001
- 在Userdata(或metadata)下,使用{“Fn::GetAtt”:[“EC2Instance001”,“PrivateIp”]}获取第一个实例(EC2Instance001)的IP
以下是我如何实现的(EC2Instance002):
您可以看到,在元数据下,我正在变量$MASTERIP中捕获EC2Instance001实例的IP
注意:JSON中的同一行将写为:
"MASTERIP=",{ "Fn::GetAtt" : [ "EC2Instance001", "PrivateIp" ] }, "\n",
“将一个EC2实例的私有IP地址转移到另一个EC2实例”是什么意思?您的意思是希望能够在Instance-B的用户数据部分引用Instance-A的IP地址吗?假设我有2个ec2实例作为A和B使用aws yaml云形成模板创建。A有一个私有ip,B有一个公共ip。我在实例A上运行了一些性能测试。然后我想与实例B通信,并将实例A上的可用结果传递给实例