【发布时间】:2019-09-23 23:51:01
【问题描述】:
我将 Amazon Elastic Beanstalk 与 VPC 结合使用,并且我希望拥有多个具有不同 IP 地址的环境(工作人员)。我不需要它们是静态的,如果可能的话,我实际上更希望它们定期更改。
有没有办法让多个环境具有动态外部 IP 地址?
【问题讨论】:
我将 Amazon Elastic Beanstalk 与 VPC 结合使用,并且我希望拥有多个具有不同 IP 地址的环境(工作人员)。我不需要它们是静态的,如果可能的话,我实际上更希望它们定期更改。
有没有办法让多个环境具有动态外部 IP 地址?
【问题讨论】:
很难理解想要更改 Elastic Beanstalk 环境的实例 IP 地址的用例。像 Elastic Beanstalk 这样的托管服务提供的基本优势是对部署的底层架构的抽象。您将获得一个 CNAME 来访问环境(您的应用程序)的 API,并且您不应该依赖内部 IP 地址或负载均衡器 URL 来获取任何内容,因为它们可以被 beanstalk 服务随意添加和删除。
话虽如此,有一种方法可以实现为底层实例更改 IP。
Elastic Beanstalk Rebuild Environment 会销毁包括 EC2 在内的现有资源并创建新资源,从而使您的实例拥有新的 IP 地址。考虑到计划的停机时间(几分钟,具体取决于您的资源)对于这个用例来说不是问题,这将是可行的。
您可以使用以下两种方式之一来安排环境重建
解决方案 1:
您可以使用简单的 lambda 函数安排您的 Rebuild Environment。
import boto3
envid=['e-awsenvidid']
client = boto3.client('elasticbeanstalk')
def handler(event, context):
try:
for appid in range(len(envid)):
response = client.rebuild_environment(EnvironmentId=str(envid[appid].strip()))
if response:
print('Restore environment %s' %str(envid[appid]))
else:
print('Failed to Restore environment %s' %str(envid[appid]))
except Exception as e:
print('EnvironmentID is not valid')
为此,您必须创建一个具有所需权限的 IAM 角色。
您可以在this AWS Guide 中找到综合指南。
解决方案 2:
您可以使用 cron 作业通过 aws-cli 重建环境。您可以按照以下步骤来实现。
以下示例策略将起作用
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticbeanstalk:RebuildEnvironment"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
crontab -e添加一个cron作业
以下示例 cron 作业在每月 1 日凌晨 12 点重建环境
0 0 1 * * aws elasticbeanstalk rebuild-environment --environment-name my-environment-name
不建议不必要地重建环境,但目前还没有明确的方法来实现您的特定要求。所以希望这会有所帮助!
进一步阅读:
【讨论】: