Elastic Beanstalk从API部署docker环境

时间:2016-03-30 17:01:07

标签: php amazon-web-services elastic-beanstalk mautic

我正试图解决这个问题。我们的最终目标是部署Mautic的自定义docker容器。从他们的网站界面这样做我没有问题。我解决了所有的配置问题,效果很好。但我需要从API自动执行此操作。客户将注册我们的服务,我们希望立即为他们部署Mautic(或者在AWS可以工作的瞬间)。

我是弹性beanstalk和AWS的新手。但我的理解是我需要创建一个环境并将Dockerrun.aws.json文件部署到它。但我无法在API中的任何地方找到我可以指定要部署的文件,甚至可以使用S3存储桶(就像您可以从界面中找到)。我希望通过保存模板并使用它,它可以工作,但我只是得到一个没有容器启动的空Docker实例。

这是我的PHP api调用的一个例子

$eb = new ElasticBeanstalkClient(array(
    'version' => 'latest',
    'region' => 'us-east-1',
    'credentials' => array(
        'key' => '...',
        'secret' => '...'
    )
));

$newEnvironment = $eb->createEnvironment(array(
    'ApplicationName' => 'test',
    'TemplateName' => 'foo2',
    'EnvironmentName' => '...',
    'EnvironmentTier' => array(
        'Type' => 'Standard',
        'Name' => 'WebServer'
    ),
    'OptionSettings' => array(
        [
            'Namespace' => 'aws:autoscaling:launchconfiguration',
            'OptionName' => 'EC2KeyName',
            'Value' => '...'
        ],
        [
            'Namespace' => 'aws:rds:dbinstance',
            'OptionName' => 'DBUser',
            'Value' => '...'
        ],
        [
            'Namespace' => 'aws:rds:dbinstance',
            'OptionName' => 'DBPassword',
            'Value' => '...'
        ]
    )
));

模板foo2是从具有完全运行的Mautic docker容器的环境中保存的。

问题是,这会创建一个环境和我需要的RDS资源,但不会运行我的docker容器。

我想要的是什么?或者我必须找到另一条大道?

由于

1 个答案:

答案 0 :(得分:1)

想出来。我正在寻找的是$eb->createApplicationVersion(...),我可以用它来指定带有Dockerrun.aws.json文件的S3存储桶。 Documentation

然后我可以在我的VersionLabel电话中指定createEnvironment()

$newEnvironment = $eb->createEnvironment(array(
    'ApplicationName' => 'test',
    'TemplateName' => 'foo2',
    // Right here
    'VersionLabel` => 'fooVersion',
    'EnvironmentName' => '...',
    'EnvironmentTier' => array(
        'Type' => 'Standard',
        'Name' => 'WebServer'
    ),
    'OptionSettings' => array(
        [
            'Namespace' => 'aws:autoscaling:launchconfiguration',
            'OptionName' => 'EC2KeyName',
            'Value' => '...'
        ],
        [
            'Namespace' => 'aws:rds:dbinstance',
            'OptionName' => 'DBUser',
            'Value' => '...'
        ],
        [
            'Namespace' => 'aws:rds:dbinstance',
            'OptionName' => 'DBPassword',
            'Value' => '...'
        ]
    )
));

或者我可以通过仪表板创建一个版本。 Documentation