Tag: amazon web services

更新AWS ECS服务任务的最佳实践

我目前正在尝试设置一个简单的configuration项来重build我的项目,创build一个新的Docker镜像,将新镜像推送到Amazon的ecr仓库,用最新的docker镜像创build一个现有任务定义的新版本,更新使用任务定义的新版本运行服务,最后停止运行旧版本的现有任务,并启动运行新版本的任务。 除了开始任务的新版本,一切工作正常。 从bash脚本中,我调用的最终命令是: aws ecs update-service –cluster "$CLUSTER" –service "$SERVICE" –task-definition "$TASK_DEFINITION":"$REVISION" 这会导致以下事件错误: (service rj-api-service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance bbbc23d5-1a09-45e7-b344-e68cc408e683) is already using a port required by your task. 这是有道理的,因为我正在replace的容器与新的容器完全相同,并将在同一个端口上运行,它只包含我的应用程序的最新版本。 我印象中, update-service命令会停止现有的任务,并启动新的任务,但它看起来像是首先启动新的任务,如果成功则停止旧的任务。 处理这个问题的最佳做法是什么? 我应该先停止旧的任务吗? 我应该先删除脚本中的服务,然后重新创build每个更新的整个服务? 目前我只需要运行任务的一个实例,但是如果我需要这个能够自动扩展到多个实例的话,我不想把自己放在一边。 任何build议最好的方式来解决这个问题?

在AWS Elastic Beanstalk应用程序中运行Tomcat Docker时进行端口转发

我有一个运行在AWS Elastic Beanstalk (EB)上的docker容器内的Tomcat 7.0 webapp(我在这里跟着教程)。 当我浏览到我的EBurlmyapplication.elasticbeanstalk.com时 ,我得到了由Nginx服务的502 Bad Gateway 。 所以立即清楚,我的端口80没有转发到我的容器。 当我浏览到myapplication.elasticbeanstalk.com:8888 (我在Dockerfile中公开的另一个端口)时,连接被拒绝( ERR_CONNECTION_REFUSED )。 所以我SSH到AWS实例,并检查docker日志,这表明我的Tomcat服务器已成功启动,但显然还没有处理任何请求。 有没有人有任何想法我的端口8888似乎没有转发到我的容器? 执行命令(在AWS实例上): sudo docker ps -a 得到: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c353e236da7a aws_beanstalk/current-app:latest "catalina.sh run" 28 minutes ago Up 13 minutes 80/tcp, 8080/tcp, 8888/tcp sharp_leakey 显示端口80,8080和8888在docker集装箱上打开。 我的Dockerfile非常简单: FROM tomcat:7.0 EXPOSE 8080 EXPOSE 8888 EXPOSE […]

执行“eb本地运行”时出现“configurationregistry无效”错误

我认为这是一个很容易解决的问题,但我似乎无法解决它! 我花了很多时间在Google / SO上寻找任何线索,但没有解决。 执行eb本地运行时,出现registry错误的无效configuration {17-05-17 10:22}[2.3.1]me:~/Repositories/xxx@master✗✗✗✗✗✗ chris% eb local run ERROR: InvalidConfigFile :: Invalid configuration for registry 12345678.dkr.ecr.eu-west-1.amazonaws.com {17-05-17 10:22}[2.3.1]me:~/Repositories/xxx@master✗✗✗✗✗✗ chris% 我的Dockerrun.aws.json中的图像行如下所示: { "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "frontend", "host": { "sourcePath": "/var/app/current/frontend" } }, { "name": "backend", "host": { "sourcePath": "/var/app/current/backend" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/config/nginx" } }, […]

AWS Beanstalk泊坞窗图像自动更新不起作用

我有一个node.js应用程序打包在托pipe在公共存储库中的docker镜像中。 我已经成功在AWS Beanstalk泊坞窗应用程序中部署了该映像。 问题在于,当我更新公共存储库中的映像时,我期待着Beanstalk应用程序自动更新,如下configurationbuild议。 Dockerrun.aws.json: { "AWSEBDockerrunVersion": "1", "Image": { "Name": "peveuve/dynamio-payment-service", "Update": "true" }, "Ports": [ { "ContainerPort": "8000" } ], "Logging": "/var/log/dynamio" } Dockerfile非常简单: FROM node:4.2.1-onbuild # Environment variables ENV NODE_ENV test ENV PORT 8000 # expose application port outside EXPOSE $PORT 亚马逊的文档很清楚: 可以包含更新密钥。 默认值为“true”,并指示Elastic Beanstalk检查存储库,将任何更新提取到图像,并覆盖任何caching的图像。 但是我必须通过上传新版本的Dockerrun.aws.json描述符来手动更新Beanstalk应用程序。 我错过了什么? 它应该这样工作吗?

通过CLI部署命令与Dockerrun.aws.json部署到elasticbeanstalk

我运行一个elasticbeanstalk应用程序,有多个环境。 这个特定的应用程序托pipedocker容器,主持一个Web服务。 要将新版本的应用程序上传和部署到其中一个环境中,可以通过Web客户端并单击“上传和部署”,然后从文件选项中select我的最新Dockerrun.aws.json文件,该文件引用最新版本的私人托pipe容器。 上传和部署工作正常,没有问题。 为了让自己和其他人更容易部署,我希望能够使用CLI来上传和部署Dockerrun.aws.json文件。 如果我使用cli eb deploy命令而没有任何特殊的configuration,那么正常的压缩整个应用程序并将其发送到主机的过程就会发生并失败(不能推断出它只需要读取Dockerrun.aws.json文件)。 我发现了一个关于使用.elasticbeanstalk / config.yml文件控制上传内容的文档。 使用这个语法: deploy: artifact: Dockerrun.aws.json 该文件已上传并实际成功部署到第一批实例,然后始终无法部署到第二组实例。 失败错误的味道:“集装箱意外退出…” 任何人都可以解释,或提供使用CLI的规范方法的部署单个docker集装箱应用程序的链接?

Ansible docker_container'否请求URL中的主机',docker pull正常工作

我正在尝试使用Ansible操作手册在AWS上configuration我的基础架构。 我有这个实例,并且能够configurationdocker-engine,docker-py等,我发誓,昨天这个工作正常,而且我从来没有改变过代码。 我的剧本的相关部分是: – name: Ensure AWS CLI is available pip: name: awscli state: present when: aws_deploy – block: – name: Add .boto file with AWS credentials. copy: content: "{{ boto_file }}" dest: ~/.boto when: aws_deploy – name: Log in to docker registry. shell: "$(aws ecr get-login –region us-east-1)" when: aws_deploy – name: Remove .boto […]

如何将Application Load Balancer用于多端口映射的ECS服务?

我希望能够使用ALB(ELBv2)将stream量路由到由给定服务的任务公开的多个端口映射。 示例 – 服务A由1个任务运行,任务定义B 任务定义B有一个'Container',它在两个不同的端口号(端口8000和端口9000,都是TCP)内部运行两个守护进程。 因此,任务定义B有两个端口需要映射到ALB。 我不太担心ALB所暴露的端口(它们不一定是8000和9000,但是如果是的话,将会有所帮助)。 my-lb-dns.com:8000 – > myservice:8000 my-lb-dns.com:9000 – > myservice:9000 任何想法如何创build多个监听器和目标组来实现这个目标? 控制台界面中没有任何东西允许我这样做,API也没有什么帮助。 非常感谢!

在EB上运行在Docker上的应用程序拒绝连接到自己

我有一个Play 2 Web应用程序,我使用Docker将其部署到Elastic Beanstalk。 在这个networking应用程序中,我启动了一个Akka集群。 启动过程涉及将自动调节组中的所有节点添加为种子节点(包括其本身)。 在首次部署到EB时,我指定将其部署到VPC(我只select一个可用区)。 当我运行应用程序并启动群集时,我收到以下消息: AssociationError [akka.tcp:// cluster @ localhost:2551] – > [akka.tcp://cluster@172.31.13.25:2551]:错误[无效的地址:akka.tcp://cluster@172.31.13.25:2551 ] [akka.remote.InvalidAssociation:地址无效:akka.tcp://cluster@172.31.13.25:2551原因:akka.remote.transport.Transport $ InvalidAssociationException:连接被拒绝:/172.31.13.25:2551 其中,172.31.13.25是EC2实例的IP,2551是端口。 在我的Dockerfile中,我有“EXPOSE 9000 2551”。 在EC2安全组中,我已启用所有入站stream量 0.0.0.0/0(和所有出站stream量)。 在VPCnetworkingACL(和安全组)中,我也打开了所有stream量。 这是我的Dockerfile FROM dockerfile/java:latest MAINTAINER a <a@b.de> EXPOSE 9000 2551 ADD files / WORKDIR /opt/docker RUN ["chown", "-R", "daemon", "."] USER daemon ENTRYPOINT ["bin/myapp"] CMD [] 为什么我的EC2实例在端口2551上拒绝连接到自己?

Docker卷指向文件的弹性beanstalk

我有一个Tomcat docker容器,并且想用Elasticbeanstalk来部署我的webapp。 用普通的docker工人,我不添加我的战争文件的容器,但参考它通过-v标志,如: docker run –rm -v data/myfile.war:/usr/local/tomcat/webapps/myFile.war 这使我可以直接引用我的战争文件。 我已经把我的形象推到了我的docker-hub回购站。 在我的Dockerrun.aws.json中,我想做war文件的ref。 我知道有这样的select: "Volumes": [ { "HostDirectory": "/data", "ContainerDirectory": "/data" }] 但是,这留下了我的主机目录我的战争文件在哪里? 我的工作stream程是我打包这些文件: Dockerrun.aws.json 战争文件 并上传到aws。 但是我不知道在ec2实例上zip文件被提取的位置。 所以我不知道应该如何参考。 基本上我想要做这样的事情: "Volumes": [ { "HostDirectory": "?/myFile.war", "ContainerDirectory": "/usr/local/tomcat/webapps/ROOT.war" }] 这个? 基本上是我不知道的部分 我正在使用networking用户界面。 我可以上传包含Dockerrun.aws.json和war文件的zip文件。 但是我在Dockerrun.aws.json中的Volumes部分声明了什么,我不知道aws在哪里提取我的war文件,我想要做一些事情: 我在aws文档中找不到任何东西。 任何人的想法?

用Dockerconfigurationbitbucketstream水线连接到AWS

我正在尝试设置Bitbucketpipe道以部署到ECS,如下所示: https : //confluence.atlassian.com/bitbucket/deploy-to-amazon-ecs-892623902.html 这些指令说如何推到Docker中心,但我想把图像推到亚马逊的图像回购。 我已经在我的Bitbucket参数列表中设置了AWS_SECRET_ACCESS_KEY和AWS_ACCESS_KEY_ID,并且我可以在本地运行这些命令而没有任何问题(在〜/ .aws / credentials中定义的键)。 但是,我不断收到错误“没有基本的身份validation凭据”。 我想知道如果它不以某种方式识别variables。 这里的文档: http : //docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html说: AWS CLI使用提供程序链来查找许多不同位置的AWS凭证,包括系统或用户环境variables以及本地AWSconfiguration文件。 所以我不知道为什么它不工作。 我的bitbucketstream水线configuration是这样(我没有包括任何不必要的东西): – export IMAGE_NAME=$AWS_REPO_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/my/repo-name:$BITBUCKET_COMMIT # build the Docker image (this will use the Dockerfile in the root of the repo) – docker build -t $IMAGE_NAME . # authenticate with the AWS repo (this gets and runs the […]