小编Erm*_*ary的帖子

如何通过自定义域调用我的 AWS Lambda 函数 URL?

我创建了一个启用了新函数 URL功能的 AWS Lambda。

由于 URL 不太容易记住,我想创建一个 Route 53 别名,例如lambda.mywebsite.com

Route 53 别名的下拉菜单中没有 Lambda 函数 URL 的 Route 53 别名。

如何通过自定义域调用我的 AWS Lambda 函数 URL?

CNAME 记录是正确的选择吗?

amazon-web-services amazon-route53 aws-lambda

25
推荐指数
3
解决办法
2万
查看次数

如果我使用 ECR 映像/容器,AWS Lambda 函数的冷启动会花费更长的时间吗?

如果我使用 ECR 中的图像而不是 S3 中的 jar 作为源代码,AWS Lambda 函数的冷启动是否会花费更长的时间?我认为是的,因为由于额外的操作系统层,图像更大(尽管......常规 Lambda 也应该有一些操作系统层),但我找不到任何性能基准。

谢谢!

amazon-web-services aws-lambda amazon-ecr

21
推荐指数
4
解决办法
1万
查看次数

为什么我会收到“错误处理程序 AWS Lambda - 没有足够的值来解压”错误?

我尝试执行 Lambda 函数,但收到以下错误:

{
  "errorMessage": "Bad handler 'AlertMetricSender': not enough values to unpack (expected 2, got 1)",
  "errorType": "Runtime.MalformedHandlerName",
  "stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)

我的 Lambda 处理程序在以下位置指定AlertMetricSender.py

from modules.ZabbixSender import ZabbixSender
def lambda_handler(event, context):
    sender = ZabbixSender("10.10.10.10", 10051)
    sender.add("Zabbix server", "lambda.test", 5.65)
    sender.send()
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services python-3.x aws-lambda

17
推荐指数
1
解决办法
2万
查看次数

如何管理多个实例之间共享的RDS数据库的数据库迁移?

我知道一些潜在的解决方案,但它们都让我感觉很糟糕。

  1. 在管道(github操作)中,在fargate上运行一次性任务以在部署之前迁移数据库。
  2. 发布某种 cloudformation 事件作为部署挂钩并将其用作 lambda 触发器,然后 lambda 将执行迁移。
  3. 利用 laravel crons 和 onOneServer() 来持续检查是否需要迁移
  4. [问题,不好] docker 入口点命令在任务启动时运行数据库迁移。(不好,所有实例可能都会尝试快速连续迁移数据库)

每一个都有我不喜欢的东西。

  1. 这个将迁移数据库,然后部署。如果部署失败,数据库现在已迁移,为了修复它,我必须在失败后以某种方式在管道中运行数据库迁移回滚。而且,一般来说,依赖管道中的一次性任务感觉非常糟糕。
  2. 这个移动部件比我认为必要的要多。多点故障:cloudformation 事件、lambda 函数故障。此外,部署似乎是事件触发器,这意味着部署可能成功,但 lambda 数据库迁移失败,并且管道不知道。因此需要手动回滚部署。
  3. 这个感觉很老套,然而,似乎有最少数量的移动部件和最少的熵。然而,主要的缺点是,我认为这本质上需要 1/分钟的 cron 垃圾邮件php artisan migrate(没有任何可迁移的内容),以便它可以通过迁移捕获部署。好处是,使用 onOneServer(),它实际上应该解决这个问题:我们不希望多个实例都尝试在部署上迁移数据库,而只希望一个实例。这有一个很大的好处,就是将部署和迁移链接起来,所以如果部署失败,还没有迁移,如果迁移失败,至少可以更容易地将任务回滚到旧的任务版本。涉及的移动部件较少。每分钟发送垃圾邮件的资源开销php artisan migrate并且没有任何可回滚的内容,应该非常小/不明显的资源使用。但是,它在资源方面的效率低下仍然让我非常困扰。

还有其他解决方案吗?我预计有人可能会建议我使用环境变量控制实例,但我也不想这样做。如果我们部署并运行 3 个实例,它们都应该更新并且它们都是“相同”的实例状态。否则,我必须创建第二个服务,该服务也 24/7 运行以检查迁移作为其自己的特殊工作。我猜这是解决方案5:

  1. 与 24/7 运行的请求处理实例有一个单独的服务任务,其唯一的工作是运行 cron 并在部署后迁移数据库。但这也很糟糕,因为您有一个 24/7 运行的任务来检查部署,而部署并不那么频繁。

我认为解决方案 3 是我的首选解决方案,尽管它有资源开销。我很想听听其他人对这个问题的一些见解。我所处的情况是,如果我被公共汽车撞到,这条管道对于非操作人员来说确实应该很容易处理。在 Laravel 应用程序代码中保持简单似乎符合这一要求。我知道有计划任务/云信息事件解决方案,但请记住我有一个大目标as little entropy / moving parts as possible, within reason

我已经阅读了关于这个主题的每一篇博客文章和每一篇谷歌点击,但还没有找到明确的答案。我自己提出了解决方案 3,但没有看到任何地方建议它。

在所有情况下都可能实现自动化数据库迁移太过雄心勃勃,应该开发并遵循手动流程。特别是如果数据库迁移包含不适用于旧实例的更改 - 在部署之前迁移它会暂时破坏这些更改。

database-migration amazon-web-services amazon-ecs laravel aws-fargate

16
推荐指数
1
解决办法
1094
查看次数

为什么从 v6 升级到 IdentityModel v7 后出现 IDX20803 错误?

升级Microsoft.IdentityModel.TokensSystem.IdentityModel.Tokens.Jwt到后7.0.0,我收到此错误:

IDX20803:无法从“https://example.com/realms/Development/.well-known/openid-configuration”获取配置。

无法从程序集“Microsoft.IdentityModel.Tokens,Version=7.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.IdentityModel.Json.JsonConvert”。无法从程序集“Microsoft.IdentityModel.Tokens,Version=7.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.IdentityModel.Json.JsonConvert”。=> Microsoft.IdentityModel.Json.JsonConvert

更新之前,我的包参考是:

<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.10" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.32.3" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.32.3" />
<PackageReference Include="System.Text.Json" Version="7.0.3" />
Run Code Online (Sandbox Code Playgroud)

更新后,我的包参考现在是:

<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.11" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.0.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.3" />
Run Code Online (Sandbox Code Playgroud)

有什么问题吗?

c# jwt identitymodel

15
推荐指数
1
解决办法
3370
查看次数

默认禁用 .NET 6 功能

使用 .NET 6 在 VS 2022 中创建新项目时,会自动添加以下新功能:

  • 高层声明
  • 隐式使用和可为空引用

有没有办法创建 .NET 6 项目

  • 没有顶级语句(除了创建 .NET 5 项目并将项目类型更改为 .NET 6 之外的解决方法)

  • 禁用隐式使用和可为空引用(无需在项目创建后每次编辑项目文件)

.net c# visual-studio .net-6.0 visual-studio-2022

14
推荐指数
1
解决办法
8860
查看次数

为什么我会收到“没有可发送的发起实体”错误?

我正在设置 SNS,以便能够从 Lambda 向自己发送短信。我正在尝试将(美国)电话号码添加到 SNS Sandbox,但收到以下消息:

尝试将电话号码添加到 SMS 沙箱时发生错误。未添加电话号码。

错误代码:UserError - 错误消息:没有可发送的发起实体

这到底是什么意思?我该如何解决这个问题?我查了一下错误信息,没有发现类似的情况。

amazon-web-services amazon-sns

13
推荐指数
1
解决办法
8725
查看次数

AWS DataSync 与 AWS Transfer 系列

我从官方网站上阅读了文档。但它并没有给我一个清晰的画面。

既然 AWS DataSync 也可以达到相同的结果,为什么需要使用 AWS Transfer Family?

我注意到协议差异,但不太确定数据迁移用例。

为什么我们要选择其中之一而不是另一个?

amazon-web-services aws-datasync aws-transfer-family

12
推荐指数
1
解决办法
9329
查看次数

无法执行 HTTP 请求:获取操作花费的时间超过配置的最大时间

我正在 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 的次数或增加发送请求的主机数量来提高效率

以前有人遇到过这个问题吗?

java amazon-sqs amazon-web-services akka netty

10
推荐指数
1
解决办法
8256
查看次数

DynamoDB 条件写入是事务性的吗?

我很难理解 DDB 提供条件写入但最终保持一致的二分法。这两个事实似乎互相矛盾。

在经典场景中,用户 Bob 更新密钥 A 并将值设置为“FOO”。用户 Alice 从尚未收到更新的节点读取数据,因此它获得同一密钥的原始值“BAR”。

最终一致性

如果 Bob 和 Alice在没有条件检查的情况下写入集群上的不同节点,则可能会发生冲突,Alice 和 Bob 同时写入同一密钥,并且 DDB 不知道哪个更新应该是最新的。客户端必须在下次读取时解决此冲突。

但是当使用条件写入时

如果 A 的现有值为“BAR”,则用户 Bob 将其对 A 的更新发送为“FOO”。如果 A 的现有值为“BAR”,则用户 Alice 将其对 A 的更新发送为“BAZ”。

条件写入

在本地,每个节点都可以检查其节点是否具有原始“BAR”值并进行更新。但要了解集群中 A 的真实状态的唯一方法是首先在集群中进行强一致性读取。这种强一致性读取必须对 Alice 或 Bob 造成阻塞,或者他们可以同时进行强一致性读取。

所以这就是我对 DDB 条件写入的性质感到困惑的地方。在我看来:

  1. 条件写入仅在本地进行评估。合并冲突仍然可能发生。
  2. 条件写入是跨集群评估的。

如果是#2,我认为有效的唯一方法是:

  1. 为钥匙创建了一把锁。
  2. 进行了高度一致的读取。

假设它是#2。现在鲍勃的更新在哪里呢?更新已对节点 2 进行并发送到节点 1,并且我们拥有多数法定人数。但是为了让 Alice 在执行自己的条件写入时可以使用这些更新,需要从 WAL 中刷新这些更新。那么在条件写入中更新总是会刷新吗?一般来说,写入总是刷新吗?

SO 上还有其他类似的问题,但答案是有关此问题的 AWS 文档的重复或链接。AWS文档并没有真正解释这一点(或者我错过了)。

amazon-web-services amazon-dynamodb

10
推荐指数
1
解决办法
3272
查看次数