我正在尝试使用服务之间的服务发现来实现多服务 ECS 集群。我正在尝试按照教程创建使用 Amazon ECS CLI 使用服务发现的 Amazon ECS 服务。但是,它不包括完整的工作示例
我所做的是定义两个服务,通过使用定义:
docker-compose.ymlecs-params.yml我可以轻松调出 ECS 集群和这两个服务。一切看起来都不错。但其中一项服务需要公共 IP 地址。所以在相应的ecs-params.yml文件中,我把assign_public_ip: ENABLED. 但是没有分配公共 IP 地址。在 ECS 控制台中,服务详细信息显示Auto-assign public IP DISABLED为 ,对于任务,它列出了私有 IP 地址,没有公有 IP 地址。
不幸的是,根据网络模式任务网络awsvpc的文档,这似乎是不可能的:
该
awsvpc网络模式不为使用EC2启动类型任务提供任务ENIS与公网IP地址。要访问 Internet,应在配置为使用 NAT 网关的私有子网中启动使用 EC2 启动类型的任务。有关更多信息,请参阅 Amazon VPC 用户指南 中的 NAT 网关。入站网络访问必须来自使用私有 IP 地址的 VPC 内,或从 VPC 内通过负载均衡器路由。在公共子网中启动的任务无法访问 Internet。
问题:如何解决 AWS ECS EC2 启动类型的这种限制?
我不明白为什么 EC2 启动类型不支持公共 IP 地址?或者 - 我是否使用不同的网络模式,然后分配一个公共 …
我需要计算相对于模块的文件系统位置的路径名。我在 Node.js 12.x 上使用最新的 TypeScript。由于其他原因,tsconfig.json我已设置
"target": "esnext",
"module": "esnext",
Run Code Online (Sandbox Code Playgroud)
这会触发一种严格限制 Node.js 对 ES6 模块支持的模式。在该模式下,__dirname变量不可用,因为 ESanything 规范中未定义该全局变量。我们应该做的是访问import.meta.url变量并提取目录名称。
例如,请参阅此问题的最后一个答案:Alternative for __dirname in node when using the --experimental-modules flag
但在 TypeScript DefinedTyped 集合中,ImportMeta 类未定义为包含成员url。因此代码无法编译:
tdn.ts:7:25 - error TS2339: Property 'url' does not exist on type 'ImportMeta'.
7 console.log(import.meta.url);
~~~
Run Code Online (Sandbox Code Playgroud)
我无法在 Definely Typed 存储库中找到 ImportMeta 的定义。但它的定义似乎不恰当。
更新:在node_modules//typescript/lib/lib.es5.d.ts我发现这个:
/**
* The type of `import.meta`.
*
* If you need to declare that a given …Run Code Online (Sandbox Code Playgroud) 我正在使用 Socket.IO 在 Node.js 中开发一个应用程序,该应用程序使用 Docker Swarm 进行部署,并且我想要选择应用程序服务的多个实例。但是,当存在多个实例时,应用程序就会失败。该故障涉及浏览器中每个 Socket.IO 消息的错误、消息中应发送的数据从未到达等。
Docker Stack文件有四个服务
connect-redis,并用于socket.io-redis执行多节点 Socket.IO在 Socket.IO 中,有一个例行的 keepalive 请求,例如 GET 上的请求/socket.io/?EIO=3&transport=polling&t=NLjcKJj&sid=X5UnuTjlYNJ4N8OsAAAH。该请求可在反向代理的日志文件中看到,并由应用程序处理。Engine.IO 的调试输出表明它收到了这些请求。
具体来说:
2020-10-28T05:06:02.557Z Net read redis:6379 id 0
2020-10-28T05:06:02.557Z socket.io:socket socket connected - writing packet
2020-10-28T05:06:02.557Z socket.io:socket joining room X5UnuTjlYNJ4N8OsAAAH
2020-10-28T05:06:02.557Z socket.io:client writing packet {"type":0,"nsp":"/"}
2020-10-28T05:06:02.557Z socket.io:socket joined room [ 'X5UnuTjlYNJ4N8OsAAAH' ]
2020-10-28T05:06:02.656Z …Run Code Online (Sandbox Code Playgroud) 我有一个用DynamoDB表定义的API /服务。我有几个索引(定义为全局二级索引)来支持几个查询。我设计了具有GSI定义的表,以及看起来像正确的查询的表。但是,在进行查询时出现此异常:
{ AccessDeniedException: User: arn:aws:sts::OBSCURED:assumed-role/chatroom-application-dev-us-east-1-lambdaRole/chatroom-application-dev-getRoomMessages is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:OBSCURED:table/messages-table-dev/index/roomIndex
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:48:27)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
message: 'User: arn:aws:sts::OBSCURED:assumed-role/chatroom-application-dev-us-east-1-lambdaRole/chatroom-application-dev-getRoomMessages is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:OBSCURED:table/messages-table-dev/index/roomIndex',
code: 'AccessDeniedException',
time: 2018-06-02T22:05:46.110Z,
requestId: 'OBSCURED',
statusCode: 400,
retryable: false,
retryDelay: 30.704899664776054 }
Run Code Online (Sandbox Code Playgroud)
在异常的最上方,它说我的getRoomMessages方法is not authorized to perform: dynamodb:Query on resource:的ARN并显示全局二级索引的ARN。
显然,我需要定义策略以授予访问全局二级索引的权限。但这还不清楚。我已经看到了有关DynamoDB的其他StackOverflow问题,他们抱怨文档零散,很难找到任何东西。我必须同意。“碎片化”一词太温和了。 …
amazon-dynamodb serverless-framework dynamodb-queries aws-serverless
我一直在四处走动,但不清楚该怎么做。
我有一个简单的表,我想在其中对几列进行查询。据我了解,这意味着为要查询的每一列创建二级索引。我已经使用Serverless框架定义了表,serverless.yml并且收到了各种奇怪的错误消息。
当前的serverless.yml定义是:
resources:
Resources:
MessagesDynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: messageId
AttributeType: S
- AttributeName: room
AttributeType: S
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: messageId
KeyType: HASH
- AttributeName: userId
KeyType: RANGE
LocalSecondaryIndexes:
- IndexName: roomIndex
KeySchema:
- AttributeName: room
KeyType: HASH
Projection:
ProjectionType: "KEYS_ONLY"
- IndexName: userId
KeySchema:
- AttributeName: userId
KeyType: HASH
Projection:
ProjectionType: "KEYS_ONLY"
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:custom.tableName}
Run Code Online (Sandbox Code Playgroud)
它的意思是类似于Slack服务-因此我想查询房间,用户等的条目。
根据我已经找到的文档,此定义很有意义。一个应该为索引中使用的列声明属性,而我已经这样做了。KeySchema-我确实只需要messageId字段,但是一条错误消息表明它需要RANGE索引,因此我将userId字段添加到KeySchema中只是为了关闭它。根据我已经找到的文档,二级索引字段看起来正确。
有了这个定义,当尝试使用 serverless deploy
An error occurred: …Run Code Online (Sandbox Code Playgroud) amazon-dynamodb serverless-framework dynamodb-queries amazon-dynamodb-index