我愚蠢地删除了无服务器项目的s3存储桶.当我现在尝试部署或删除我的应用程序时,我收到此错误:The specified bucket does not exist
如何从Serverless重新创建s3存储桶?
我正在 AWS 中运行一个批处理作业,它使用来自 SQS 队列的消息并使用 akka 将它们写入 Kafka 主题。我创建了一个具有以下参数的 Sqs 异步客户端:
private static SqsAsyncClient getSqsAsyncClient(final Config configuration, final String awsRegion) {
var asyncHttpClientBuilder = NettyNioAsyncHttpClient.builder()
.maxConcurrency(100)
.maxPendingConnectionAcquires(10_000)
.connectionMaxIdleTime(Duration.ofSeconds(60))
.connectionTimeout(Duration.ofSeconds(30))
.connectionAcquisitionTimeout(Duration.ofSeconds(30))
.readTimeout(Duration.ofSeconds(30));
return SqsAsyncClient.builder()
.region(Region.of(awsRegion))
.httpClientBuilder(asyncHttpClientBuilder)
.endpointOverride(URI.create("https://sqs.us-east-1.amazonaws.com/000000000000")).build();
}
private static SqsSourceSettings getSqsSourceSettings(final Config configuration) {
final SqsSourceSettings sqsSourceSettings = SqsSourceSettings.create().withCloseOnEmptyReceive(false);
if (configuration.hasPath(ConfigPaths.SqsSource.MAX_BATCH_SIZE)) {
sqsSourceSettings.withMaxBatchSize(10);
}
if (configuration.hasPath(ConfigPaths.SqsSource.MAX_BUFFER_SIZE)) {
sqsSourceSettings.withMaxBufferSize(1000);
}
if (configuration.hasPath(ConfigPaths.SqsSource.WAIT_TIME_SECS)) {
sqsSourceSettings.withWaitTime(Duration.of(20, SECONDS));
}
return sqsSourceSettings;
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行批处理作业时,我收到以下 AWS SDK 异常:
software.amazon.awssdk.core.exception.SdkClientException:无法执行 HTTP 请求:获取操作花费的时间超过配置的最长时间。这表明请求在指定的最大时间内无法从池中获取连接。这可能是由于高请求率造成的。
即使我尝试调整此处提到的参数后,异常似乎仍然发生:
请考虑采取以下任一操作来缓解该问题:增加最大连接数、增加获取超时或降低请求速率。增加最大连接数可以增加客户端吞吐量(除非网络接口已被充分利用),但最终可能会开始遇到操作系统对进程使用的文件描述符数量的限制。如果您已充分利用网络接口或无法进一步增加连接计数,则增加获取超时可以为请求在超时之前获取连接提供额外的时间。如果连接不释放,后续请求仍然会超时。如果上述机制无法解决问题,请尝试平滑您的请求,以便大流量突发不会使客户端过载,通过减少需要调用 AWS 的次数或增加发送请求的主机数量来提高效率
以前有人遇到过这个问题吗?
我正在尝试从aws-sdk-go迁移到aws-sdk-go-v2。但是,我在本地使用 localstack 来模仿一些 aws 服务,例如 sqs 和 s3。我不确定如何配置新的 sdk 以使用 localstack 端点而不是真实的端点。
例如,在 v1 SDK 中,我可以通过在此处设置端点将其指向 localstack:
session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-east-1"),
Endpoint: aws.String("http://localstack:4566"),
}))
Run Code Online (Sandbox Code Playgroud)
但是,如何在 v2 SDK 中执行此操作?我想我需要在 中设置一些参数,config
但我没有看到任何指定端点的选项。
我正在使用AWS golang v2 SDK将文件放入 S3 并读取文件。在本地,我使用本地堆栈,因此需要设置 param S3ForcePathStyle
。但是,我找不到在配置中设置此参数的位置。
这就是我的配置:
conf, err = config.LoadDefaultConfig(
context.TODO(),
config.WithRegion("us-east-1"),
config.WithEndpointResolver(
aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{
PartitionID: "aws",
URL: "http://localstack:4566",
SigningRegion: "us-east-1",
}, nil
}),
),
)
Run Code Online (Sandbox Code Playgroud)
我可以从哪里进去S3ForcePathStyle = true
?
我正在尝试使用 API Gateway\xe2\x80\x99s VPC 链接将流量路由到 HTTPS 上的内部 API。\n但是,VPC 链接迫使我将 API\xe2\x80\x99s 负载均衡器从“应用程序”更改为“网络”。
\n\n据我所知,网络负载均衡器位于第 4 层,因此不知道 HTTPS。
\n\n我习惯使用第 7 层应用程序负载均衡器。因此,我不确定应该如何在 terraform 中配置或使用网络负载均衡器。
\n\n以下是我在 Terraform 中配置网络负载均衡器的尝试。\n健康检查失败,我不确定我做错了什么。
\n\nresource "aws_ecs_service" \xe2\x80\x9capp\xe2\x80\x9d {\n name = "${var.env}-${var.subenv}-${var.appname}"\n cluster = "${aws_ecs_cluster.cluster.id}"\n task_definition = "${aws_ecs_task_definition.app.arn}"\n desired_count = "${var.desired_app_count}"\n deployment_minimum_healthy_percent = 50\n deployment_maximum_percent = 200\n iam_role = "arn:aws:iam::${var.account}:role/ecsServiceRole"\n\n load_balancer {\n target_group_arn = "${aws_lb_target_group.app-lb-tg.arn}"\n container_name = "${var.env}-${var.subenv}-${var.appname}"\n container_port = 9000\n }\n depends_on = [\n "aws_lb.app-lb"\n ]\n}\n\nresource "aws_lb" \xe2\x80\x9capp-lb" {\n name = "${var.env}-${var.subenv}-${var.appname}"\n internal = false\n load_balancer_type = …
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-elb terraform aws-api-gateway terraform-provider-aws
我想更好地理解隐式授权流程和授权代码授权流程之间的区别,因为我不确定我目前的理解是否正确。
谢谢
我是 Spring Boot 的新手,并尝试使用 sqs 侦听器在本地堆栈中轮询测试队列。我可以将消息推送到我的本地堆栈队列中。但是,然后我想轮询同一个队列并记录消息的内容。但是,我没有收到 sqs 列表器记录到控制台的任何消息?
应用程序-local.properties
cloud.aws.region=us-east-1
cloud.local.sqs=http://localstack:4576
cloud.local.s3=http://localstack:4572
app.sqs.maxmessages=1
app.sqs.input=http://localstack:4576/queue/test-queue
app.sqs.output=http://localstack:4576/queue/test-queue
Run Code Online (Sandbox Code Playgroud)
应用控制器
@Log4j2
@RestController
public class AppController {
private AmazonS3 s3;
private SQSOutput output;
@Autowired
public AppController(AmazonS3 s3, SQSOutput output) {
this.s3 = s3;
this.output = output;
}
@RequestMapping("/send")
public Map<String, String> sendMessage() {
output.send("Test Message!");
Map<String, String> response = new HashMap<>();
response.put("message", "Message sent!");
return response;
}
@SqsListener(value = "${app.sqs.input}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void getMessage(String message) {
log.info("Received message: " + message);
}
} …
Run Code Online (Sandbox Code Playgroud) 以下代码在db中创建一个新表.我希望它能捕获任何sql错误,并在表已经存在的情况下继续运行.但是,当我执行代码时,如果表已经存在,我会得到预期的异常,但代码在编译期间退出.try catch被忽略了吗?
码:
(ns app.storage
(:import com.mchange.v2.c3p0.ComboPooledDataSource
(clojure.lang ExceptionInfo))
(:require [clojure.java.jdbc :refer :all]))
(def db {
:classname "org.sqlite.JDBC"
:subprotocol "sqlite"
:subname "src/storage/journal.db"
})
(defn create-db []
(try
(db-do-commands db
(create-table-ddl :entry
[:id :primary :key]
[:account "varchar(255)"]
[:timestamp "timestamp"]
[:debt "double(9,2)"]
[:credit "double(9,2)"]))
(catch ExceptionInfo e
(println e))))
(create-db)
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread "main" java.sql.BatchUpdateException: batch entry 0: [SQLITE_ERROR] SQL error or missing database (table entry already exists), compiling:(app/storage.clj:29:21)
at clojure.lang.Compiler.load(Compiler.java:7142)
at clojure.lang.RT.loadResourceScript(RT.java:370)
at clojure.lang.RT.loadResourceScript(RT.java:361)
at clojure.lang.RT.load(RT.java:440)
at clojure.lang.RT.load(RT.java:411)
at clojure.core$load$fn__5066.invoke(core.clj:5641) …
Run Code Online (Sandbox Code Playgroud) 如何在compojure中绑定动态变量?请参阅下面的示例,这里request-id是为每个api请求生成的唯一uuid.我希望能够访问该请求ID在随后的方法记录等等.我已经使用绑定功能试过,但我仍然无法访问请求ID的some-page/some-method
.
handler.clj
(ns some_app.handler
(:require
[compojure.api.sweet :refer :all]
[compojure.route :as route]
[some_api.some_page :as some-page]))
(def ^:dynamic *request-id*
nil)
(defn ^:private generate-request-id []
(str (java.util.UUID/randomUUID)))
(def app
(binding [*request-id* (generate-request-id)]
(api
(context "/api" [] (GET "/some-page" [] (some-page/some-method))))))
Run Code Online (Sandbox Code Playgroud)
一些-page.clj
(ns some_app.some_page
(:require
[clojure.tools.logging :as log]))
(def some-method []
(log/info {:request-id *request-id*}))
Run Code Online (Sandbox Code Playgroud) 我想能够模拟MyFunction
然而我需要模拟在MyFunction
调用时返回不同的值.
是否可以with-redefs
根据函数的调用顺序返回不同的值?
(testing "POST /foo/bar and return ok"
(with-redefs [->Baz (fn [_]
(reify MyProtocol (MyFunction [_] [{:something 1}]))
(reify MyProtocol (MyFunction [_] [{:something 2}])))]
(let [response (routes/foo {:request-method :post
:uri "/foo/bar"
:query-params {}
})]
(is (= (:status response) 200)))))
Run Code Online (Sandbox Code Playgroud) 我是 neo4j 的新手。<id>
从到目前为止我所读到的内容来看,我了解到在应用程序外部使用默认参数通常是不好的做法。因此,我希望能够指定我自己的personId
参数,与<id>
. 为此,我想使用neo4j-ogm
,但是我收到此异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'personController' defined in file [/Users/freid/www/project/address-book/build/classes/java/main/com/addressbook/controller/PersonController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personRepository' defined in com.addressbook.repositories.PersonRepository defined in @EnableNeo4jRepositories declared on SetupBeans: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Required identifier property not found for class com.addressbook.model.Person!
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.5.jar:5.3.5]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.5.jar:5.3.5]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.5.jar:5.3.5]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.5.jar:5.3.5]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) …
Run Code Online (Sandbox Code Playgroud) 我希望能够json编码异常对象.我正在将我的日志推送到sumologic并且希望能够推送json编码的异常,以便我可以在sumo中解析和过滤这些日志.
但是,我不能json编码异常并得到此错误:
Cannot JSON encode object of class: class java.lang.Class: class clojure.lang.ExceptionInfo
Run Code Online (Sandbox Code Playgroud)
这是我的compojure-api异常处理程序:
(defn exception-handler
"Handles exceptions."
[f]
(fn [^Exception ex data request]
(log/error (json/generate-string {:request-id log-helper/*request-id*
:error ex}))
(f (.getMessage ex))))
Run Code Online (Sandbox Code Playgroud) clojure ×4
java ×3
amazon-sqs ×2
aws-sdk ×2
compojure ×2
go ×2
spring-boot ×2
akka ×1
amazon-elb ×1
amazon-s3 ×1
aws-sdk-go ×1
binding ×1
jdbc ×1
lambda ×1
localstack ×1
mocking ×1
neo4j ×1
neo4j-ogm ×1
netty ×1
oauth ×1
oauth-2.0 ×1
sumologic ×1
terraform ×1
unit-testing ×1