- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下情况:
m4.large
运行 RHEL6 的 EC2 实例我有一个 Lambda 函数,用于记录 VPC 上的所有 EC2 状态更改,如下所示:
'use strict';
exports.handler = (event, context, callback) => {
console.log('LogEC2InstanceStateChange');
console.log('Received event:', JSON.stringify(event, null, 2));
callback(null, 'Finished');
}
还有一个 Lambda 函数,尝试根据计划启动 EC2 实例,用 Java 编写,代码量很大,但其核心是这样的:
public void handleRequest(Object input, Context context) {
final List<String> instancesToStart = getInstancesToStart(); //implementation not shown
try {
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds((String[]) instancesToStart.toArray());
context.logger.log("StartInstancesRequest: " + startRequest.toString());
StartInstancesResult res = ec2.startInstances(startRequest);
context.logger.log("StartInstancesResult: " + res.toString());
}
catch(Exception e) {
logException(e); //calls context.logger.log on the stack trace string
}
}
instancesToStart
数组填充有实例 ID,例如 i-0abcdef1234567890
。
我使用 CloudFormation 创建 Lambda 函数和所有必需的 IAM 角色等。以下是描述执行该工作的基于 Java 的 Lambda 函数的角色/权限的部分:
Resources:
EC2SchedulerRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
EC2SchedulerPolicy:
DependsOn:
- EC2SchedulerRole
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: ec2-scheduler-role
Roles:
- !Ref EC2SchedulerRole
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- 'logs:*'
Resource:
- 'arn:aws:logs:*:*:*'
- Effect: Allow
Action:
- 'ec2:DescribeInstanceAttribute'
- 'ec2:DescribeInstanceStatus'
- 'ec2:DescribeInstances'
- 'ec2:StartInstances'
- 'ec2:StopInstances'
- 'ec2:DeleteTags'
Resource:
- '*'
最终发生的情况是,根据第一个函数(记录实例状态转换的脚本)的 CloudWatch 日志,我们得到:
Received event:
{
"version": "0",
"id": "<guid>",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "12345678",
"time": "2019-06-20T19:01:35Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1:12345678:instance/i-0abcdef12345678"
],
"detail": {
"instance-id": "i-0abcdef12345678",
"state": "pending"
}
}
Received event:
{
"version": "0",
"id": "<guid>",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "12345678",
"time": "2019-06-20T19:01:37Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1:12345678:instance/i-0abcdef12345678"
],
"detail": {
"instance-id": "i-0abcdef12345678",
"state": "stopping"
}
}
Received event:
{
"version": "0",
"id": "<guid>",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "12345678",
"time": "2019-06-20T19:01:37Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1:12345678:instance/i-0abcdef12345678"
],
"detail": {
"instance-id": "i-0abcdef12345678",
"state": "stopped"
}
}
根据“worker”函数(实际尝试启动实例的函数)的 CloudWatch 日志,我们得到:
StartInstancesRequest: {InstanceIds: [i-0abcdef12345678],}
StartInstancesResult: {StartingInstances: [{CurrentState: {Code: 0,Name: pending},InstanceId: i-0abcdef12345678,PreviousState: {Code: 80,Name: stopped}}]}
因此,从执行这项工作的基于 Java 的 Lambda 的角度来看,它正在做所有需要做的事情,发出命令来启动 EC2 实例;但当 EC2 实例尝试实际启动时,它会从“待处理”变为“正在停止”,再变为“已停止”。如果没有得到许可的话,根本就不可能走到这一步吧?
如果是实例本身的问题(例如硬件),我预计使用 AWS 控制台手动启动它会失败。但它不会失败。手动启动成功!
所以发生了什么事?我该如何进一步诊断?是权限问题还是实例搞砸了?
我 99% 确信这不是,因为可用区缺乏可用容量,因为每当我尝试手动启动实例时,它总是可以工作。这不是一个短暂的问题,也不是最近才发生的事情。这种情况已经持续了几个月,手动启动的成功率是 100%,而基于脚本的启动成功率是 0%。
最佳答案
启动 EBS 可能是问题所在。正如您所提到的,EC2 有 3 个带有 KMS 加密的 EBS 卷。您必须提供 KMS 权限(kms:CreateGrant) 才能启动您的实例
{
"Sid": "GrantAccess",
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "arn:aws:kms:::key/1234"
}
关于java - EC2 Java StartInstancesRequest 从 "pending"变为 "stopping"再到 "stopped",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692934/
我经常使用stop Fortran 中固有的因各种原因停止执行(主要是在测试失败后)。 program test1 stop end program 除了停止程序执行之外什么都不做。 prog
我想编写一个函数,用字符 e 替换所有出现的字符 c。这些功能似乎正在发挥作用。然而,主要是,我希望能够重复输入一个字符串,扫描要替换的字符,扫描要替换的字符,并打印之前和之后的内容,直到输入的字符串
在 powershell 中,我看到了多种停止服务的方法 更现代的方式 Stop-Service wuauserv 而更传统的方式 NET STOP WUAUSERV 遗留方式 is much mor
所以问题是我需要一个正则表达式,只有当它的 stop 也意味着 stopp 或 sstoooppp 时,它才会匹配第二个单词> 后跟一个空格。我需要得到这个词,我找不到任何正则表达式来做到这一点,因为
我正在做这样的事情 http://jsfiddle.net/8ErSL/2/ 当您将鼠标悬停在任何文本框 (div) 上时,其中会出现一个小图标。 我想阻止图标的淡入淡出效果在我不小心将鼠标悬停在 d
这段代码在 Debug模式下工作得很好,但当不是 Debug模式时它总是抛出运行时异常。 mMediaRecorder.stop(); 根据 Java 文档: Stops recordin
这是我的full code ,这里是my project ,当我在 #onCreate 中使用 MediaRecorder#stop 时,它会引发 java.lang.RuntimeException
我使用 C# 编写了一个库并在 PowerShell 脚本中使用它。 C# 库将大量数据加载到数据库中。我正在使用 Start-Job 来启动该过程,并且我正在监视一个文件是否有错误。 但是,我发现即
我正在尝试编写以下问题的代码: 在 a0, a1, ..., an 处有 n 个酒店,使得 0 dp(k)+(ai-ak)^2) dp(i) = dp(k)+(ai-ak)^2)
我有一个简单的测试,我使用 run_forever 方法运行 Python asyncio 事件循环,然后立即在另一个线程中停止它。但是,事件循环似乎并没有终止。我有以下测试用例: import as
我有以下情况: 专用租赁 m4.large 运行 RHEL6 的 EC2 实例 使用 AWS 控制台手动启动它效果很好 尝试启动它的 Lambda 函数(用 Java 编写)失败,因为实例状态为:已停
我正在使用 Yajsw 将我的应用程序作为守护进程运行。 对于状态调用,我希望看到“正在运行”或“已停止”,但我收到的消息如下所示 SW043305-SRV01:/etc/init.d # ./tes
在 Tomcat 或 TomEE 中,service tomcat start/stop 和 ./catalina.sh run/stop 有什么区别? 他们做的事情完全一样吗? 最佳答案 catal
我正在尝试使用 C++ 和 OpenGL/GLUT 制作一个 Snake 克隆。然而,我一直在编程允许输入 Action 之间的短时间间隔时遇到问题。我已经尝试了一些计时方法,最后我为它创建了一个类(
问题: org.apache.catalina.loader.WebappClassLoader - The web application [/…] appears to have started
我正在尝试以下实验: 我有两个QpushButtons,比如PushA 和PushB。现在 PushA 在 QHBoxLayout 中,PushB 也在它自己的 QHBoxLayout 中。这两个水平
我已经在我的 windows 10 机器上安装了 Docker for Windows。当我尝试从“windows 容器”“切换到 linux 容器”时,出现错误。 Unable to start:
我在我的应用程序中集成了摄像头。当用户单击捕获按钮时,我隐藏了工具栏,以便摄像头预览屏幕尺寸增加。这会导致应用程序在停止在线录制时崩溃 - mMediaRecorder.stop(); 。 java.
运行功能时 stop("m Sys.setenv(LANG = "fr") > 2 + x Erreur : objet 'x' introuvable > Sys.setenv(LANG = "en
我有一个 Windows 10 内部版本,我正在尝试安装 cpriego/valet-linux使用 wsl2 我已经安装了 composer、php 和所有其他的要求。 现在当我做 valet st
我是一名优秀的程序员,十分优秀!