我已经为我的应用程序设置了 AWS ALB。ALB 连接到具有 2 个实例的 AWS ECS 集群。这 2 个实例位于私有子网中。当我解析 ALB DNS 名称的 IP 时,我得到 2 个 IP。这些 IP 可用于访问我的应用程序。
这些IP是什么?我在 ALB 控制台或 ECS 控制台中找不到任何这些 IP。
我计划为此 ALB 创建我自己的域名,但我没有使用 AWS Route53。我打算使用我自己的域名或我已经拥有的子域。所以我想检查这些IP是ALB的IP还是我底层EC2实例的IP。
任何有关 ALB IP 的信息将不胜感激。
我想使用托管在 ECR 上的 docker 映像,并且我想使用 cloudformation 模板自动执行拉取操作。
我附加了具有 ECR 对 ec2 实例的完全访问权限的 IAM 角色,但它不起作用。
我正在做docker pull 1234567897.dkr.ecr.us-west-2.amazonaws.com/repo:tag,我收到错误Error response from daemon: Get https://1234567897.dkr.ecr.us-west-2.amazonaws.com/repo:tag/manifests/latest: no basic auth credentials
amazon-ec2 amazon-web-services amazon-cloudformation amazon-ecs
我们有一个运行在 ECS 集群中的 Docker 容器(Spring Boot)。我们在没有 Elastic Load Balancing 的情况下运行它。
我们希望在不停机的情况下更新服务,因此当新任务正常运行时,旧任务停止。我们一直在尝试在任务定义上添加健康检查,但它拒绝工作。我已经尝试过这些基本的健康检查命令。
[ "CMD-SHELL","exit 0" ]
[ "CMD-SHELL","exit 1" ]
Run Code Online (Sandbox Code Playgroud)
我希望前者会导致一个健康状况良好的任务,而后者会导致健康检查失败..在这两种情况下,新任务都可以正常启动,但健康状况未知。
这与我们不使用 ELB 有关系吗?文档不是很好,我的谷歌搜索没有返回任何有用的东西。
我正在努力为 Amazon ECS 中的任务定义内的容器设置正确的 HEALTHCHECK。
我尝试了多种解决方案,但无法让最简单的“始终正确”的健康检查真正起作用。
我的健康检查看起来像这样:
[ "CMD-SHELL", "echo"]
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该总是产生一个健康的容器,但不幸的是,我总是处于不健康状态。当我对不健康的容器进行 docker 检查时,我得到以下信息
[ec2-user@ip-10-0-0-77 ~]$ docker inspect 8f14979ae4eb
[
{
"Id": "8f14979ae4eb4e16ec26a4ac886d29b29f5666e5f00d41c56d25f5efe0c7d57e",
"Created": "2018-05-15T08:55:50.399791936Z",
"Path": "/bin/sh",
"Args": [
"-c",
"echo \"The application will start in ${JHIPSTER_SLEEP}s...\" && sleep ${JHIPSTER_SLEEP} && java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 783,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-05-15T08:55:51.049068973Z",
"FinishedAt": "0001-01-01T00:00:00Z",
"Health": {
"Status": "starting",
"FailingStreak": 2,
"Log": [
{
"Start": …Run Code Online (Sandbox Code Playgroud) 我试图使用 aws 代码构建服务构建 docker 镜像,然后将其推送到 ECR。我用于它的命令"buildspec.yml"在下面指定。
version: 0.2
phases:
install:
runtime-versions:
docker: 18
pre_build:
- $(aws ecr get-login --no-include-email --region us-east-1)
- REPOSITORY_URI=XXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/devopswebbuild
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
Run Code Online (Sandbox Code Playgroud)
但是我在构建过程中遇到错误,docker 命令无法连接到 docker daemon。请帮助我解决这些问题。
Docker 构建项目配置详细信息如下:
构建错误详细信息如下:
在我的 terraform 代码中,我尝试使用aws_autoscaling_target.
resource "aws_appautoscaling_target" "service_app_asg_target" {
resource_id = "${aws_ecs_service.service_app.arn}"
min_capacity = 2
max_capacity = 6
role_arn = "${aws_iam_role.ecs_autoscale_role.arn}"
}
Run Code Online (Sandbox Code Playgroud)
当我应用这个时,亚马逊给了我错误
不支持的服务命名空间、资源类型或可扩展维度
我的附件有什么问题吗?
我创建了一个四子网 VPC,其中两个子网是私有的,两个是公共的。私有子网中的实例只有私有 IP,并通过 IGW/NAT GW 到达互联网。
我可以成功创建跨公有子网的 ECS 集群,但是当我在后端子网中创建集群时,集群实例无法在集群中注册。
我怀疑网络问题,我正在使用 Flowlogs 进行调试。同时,我希望有人能够阐明需要打开哪些端口,或涉及 ECS 集群管理的其他配置。
我正在尝试设置一个 AWS ECS 集群,该集群有一个任务,该任务有 3 个单独的容器用于 prometheus、promscale 和 prometheus-ecs-discovery。
我试图弄清楚如何动态地将PROMSCALE_HOSTNAMEprometheus 容器中的环境变量设置为 promscale 容器的主机名或 ip,因为我最终在配置文件中使用此值,以便 prometheus 容器可以与 promscale 通信容器。
有什么办法可以做到这一点,或者我是否必须在我的 VPC 中创建一个负载均衡器来处理这个问题?
PrometheusTask:
Type: AWS::ECS::TaskDefinition
Properties:
Family: !Sub "${Stage}-prometheus"
ContainerDefinitions:
- Name: !Sub "${Stage}-prometheus-container"
Image: myorg/prometheus:latest
Environment:
- Name: STAGE
Value: !Ref Stage
- Name: PROMSCALE_HOSTNAME # <-- I WANT THIS VALUE TO BE THE HOSTNAME OR IP OF THE PROMSCALE CONTAINER
Value: !Sub "${Stage}-promscale-container"
- Name: !Sub "${Stage}-prometheus-ecs-discovery-container"
Image: myorg/prometheus-ecs-discovery:latest
Environment:
- Name: AWS_REGION
Value: !Ref AWS::Region
- …Run Code Online (Sandbox Code Playgroud) 我的小公司正在 AWS 上开发一个 Web 应用程序,使用 VPC 和 EC2 容器服务,并使用应用程序负载均衡器将流量引导至我们的应用程序。我已经启动并运行了环境,但我想保护它,以便只有我们公司的人员可以访问它。我不太确定理想的解决方案是什么——其他人是如何解决这个问题的?