是否可以通过Elastic Beanstalk使用多个外部IP地址?

时间:2019-09-19 03:25:43

标签: amazon-elastic-beanstalk

我正在将Amazon Elastic Beanstalk与VPC一起使用,我想拥有多个具有不同IP地址的环境(工作人员)。我不需要它们是静态的,我实际上希望它们尽可能地定期更改。

是否可以使用动态外部IP地址建立多个环境?

1 个答案:

答案 0 :(得分:0)

很难理解想要更改Elastic Beanstalk环境的实例IP地址的用例。像Elastic Beanstalk这样的托管服务提供的基本优势是对用于部署的基础架构的抽象。您将获得一个CNAME来访问环境(您的应用程序)的API,并且您不应依赖内部IP地址或负载均衡器URL来添加任何内容,因为它们可以被beantalk服务随意添加或删除。

话虽这么说,您有一种方法可以实现更改基础实例的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重建环境。您可以按照以下步骤来实现。

  1. 创建EC2实例
  2. 创建具有重建环境权限的IAM角色

以下示例策略将有效

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "elasticbeanstalk:RebuildEnvironment"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
  1. 将IAM角色附加到EC2实例
  2. 使用命令crontab -e添加cron作业

以下示例cron作业在每月的1月12:00重建环境。

0 0 1 * * aws elasticbeanstalk rebuild-environment --environment-name my-environment-name
  1. 保存cronjob并退出。

不建议您不必要地重建环境,但是到目前为止,还没有明确的方法来满足您的特定要求。希望对您有所帮助!

进一步阅读: