我正在尝试在我的CloudFormation模板中创建一个具有以下EcsParameters的计划任务(CloudWatch Events Rule):
EcsParameters:
LaunchType: FARGATE
NetworkConfiguration:
AwsVpcConfiguration:
AssignPublicIp: !Ref PublicIpAssignment
SecurityGroups:
- !Ref EcsSecurityGroups
Subnets:
- !Ref SubnetName
TaskCount: 1
TaskDefinitionArn: !Ref TaskDefinitionOne
Run Code Online (Sandbox Code Playgroud)
我的ECS CLuster是在Fargate而不是EC2上启动的,我没有运行服务(用例不需要长时间运行的过程,直接从事件规则中调度任务.)
每当我运行此模板(使用LaunchType和NetworkConfiguration)时,堆栈创建失败,出现此错误:
遇到不受支持的属性NetworkConfiguration
作为替代方案,我还尝试从AWS CLI启动计划任务,但似乎网络配置和启动类型选项也不可用:
参数验证失败:Targets [0]中的未知参数.EcsParameters:"LaunchType"必须是以下之一:TaskDefinitionArn,TaskCount
根据此页面上的AWS文档本身,我应该能够指定LaunchType并NetworkConfiguration在我EcsParameters的部分Targets中Properties的的AWS::Events::Rule资源.
有什么我可以尝试的可行吗?
我正在尝试使用 Chrome 扩展程序向第三方网站上的页面动态添加一个按钮,并为该按钮添加一个点击处理程序。我已经阅读了Chrome 扩展程序中的onClick 不起作用,在单独的js文件中添加了处理程序。
问题在于 Chrome 试图js在网络服务器中而不是在扩展程序中找到该文件。所以,404 发生了。
假设网页是“ http://www.somecompany.com/somepage.html ”。我的扩展代码如下。
var aButton = document.createElement('button');
aButton.id = "aButton";
thatDiv.appendChild(aButton);
var aScript = document.createElement("script");
aScript.src="aButtonHandler.js";
thatDiv.appendChild(aScript);
Run Code Online (Sandbox Code Playgroud)
Chrome 尝试加载“ http://www.somecompany.com/aButtonHandler.js ”,当然真正的网站没有那个脚本,所以 404 发生了。如何向网站添加按钮并alert("hello");在单击该按钮时执行?
添加
我将代码添加aButtonHandler.js到内容脚本本身的末尾,但什么也没发生。怎么了?
内容脚本.js
addButton();
function addButton()
{
//adds a button by the code above.
}
document.addEventListener('DOMContentLoaded', function() {
var theButton = document.getElementById('aButton');
theButton.addEventListener('click', function() {
alert('damn');
});
});
Run Code Online (Sandbox Code Playgroud)
添加
这奏效了。
内容脚本.js
addButton();
function addButton()
{
//adds …Run Code Online (Sandbox Code Playgroud) (在将所有日志打印到CloudWatch Logs之前退出AWS-ECS上的Docker容器)为什么CloudWatch Logs组的某些流不完整(即Fargate Docker Container成功退出,但日志突然停止更新)?间歇地在几乎所有日志组中看到此消息,但并不是在每个日志流/任务运行时都看到这一点。我正在1.3.0版上运行
Dockerfile使用该CMD命令运行node.js或Python脚本。
这些不是服务器/长时间运行的进程,我的用例要求容器在任务完成时退出。
样本Dockerfile:
FROM node:6
WORKDIR /path/to/app/
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "run-this-script.js" ]
Run Code Online (Sandbox Code Playgroud)
当使用本地在终端上运行此命令时,所有日志都会正确打印到终端的stdout / stderr中docker run。
要将其作为Fargate上的ECS任务运行,请awslogs从CloudFormation模板设置日志驱动程序为。
...
LogConfiguration:
LogDriver: 'awslogs'
Options:
awslogs-group: !Sub '/ecs/ecs-tasks-${TaskName}'
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: ecs
...
Run Code Online (Sandbox Code Playgroud)
看到cloduwatch日志输出有时不完整,我进行了测试并检查了CW Logs Limits中的每个限制,并且确定问题不存在。
我最初以为这是节点js在console.log()刷新之前异步退出的问题,或者进程退出得太早了,但是当我也使用另一种语言时,也会出现相同的问题-这使我相信这与代码,而是专门使用cloudwatch。
通过添加一个睡眠计时器在代码中引起延迟对我没有用。
有可能由于docker容器在任务完成后立即退出,因此日志没有足够的时间写到CWLogs,但是必须有一种方法来确保不会发生这种情况?
样本日志:流不完整:
{ "message": "configs to run", "data": {"dailyConfigs":"filename.json"]}}
running for filename
Run Code Online (Sandbox Code Playgroud)
完成的日志流:
{ "message": "configs …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-ecs docker amazon-cloudwatchlogs docker-container
如果我说'打电话'而不是跳?会怎么样?由于没有写入返回语句,控制权只是转移到下面的下一行,还是在调用后仍然返回到该行?
start:
mov $0, %eax
jmp two
one:
mov $1, %eax
two:
cmp %eax, $1
call one
mov $10, %eax
Run Code Online (Sandbox Code Playgroud) 通过CLI在AWS上创建资源是否存在任何已知的弊端?使用一种方法比另一种方法更可靠/更容易/容易出错/被广泛接受/建议吗?设置重复脚本时,是否有理由为什么我要通过AWS CLI使用CloudFormation或AWS控制台直接运行命令?
例如,如果我要创建ECS Fargate任务定义,我是否有任何理由要通过AWS CLI使用AWS CloudFormation或控制台?Cli语法简单易用,并且有些事情(例如专门为Fargate任务设置事件规则/目标)尚未通过cloudformation支持。
amazon-ecs ×2
assembly ×1
aws-cli ×1
aws-fargate ×1
aws-sdk ×1
docker ×1
javascript ×1
onclick ×1
x86 ×1