如何使用 SAM 部署来获取 lambda,以及 AutoPublishAlias 和其他别名

2023-11-27

我的目标是额外SAM deploy调用将导致 :staging 别名反映最新版本,并且 :live 将通过外部方式更新,但必须初始化为部署时创建的相同版本。

我正在使用 SAM 部署,并且需要 lambda 上的别名。在初始模板中添加它们很棘手,因为您无法创建具有显式版本号的别名,并且 AWS CloudFormation 强制保留旧的 lambda 版本,因此您在不检查资源的情况下无法知道版本。这是迄今为止我发现的最好的方法,但它很麻烦并且不能很好地扩展(每个堆栈都需要相同的逻辑)。

该代码还取决于cfn-response.js用于自定义资源管理。

我怎样才能做得更好?

模板.yaml

GetLatestVersionOfLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: GetLatestVersionOfLambdaFunction
        Description: Given an existing Lambda Function Name, return the most recent version number
        VersionDescription: !Sub ${deployVersionDescription}
        AutoPublishAlias: staging
        CodeUri: src/
        Handler: getLatestLambdaVersionByName.handler
        MemorySize: 128
        Runtime: nodejs12.x
        Timeout: 10
        Tracing: Active
        Role: !GetAtt GetLatestVersionOfLambdaRole.Arn
SampleLambdaGetMaxVersionFunction:
    Type: Custom::FunctionVersion
    Properties:
        ServiceToken: !GetAtt GetLatestVersionOfLambdaFunction.Arn
        FunctionName: !Ref SampleLambdaFunction
SampleLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: SampleLambda
        AutoPublishAlias: staging
        CodeUri: src/
        Handler: SampleLambda.handler
        MemorySize: 512
        Runtime: nodejs12.x
        Role: !GetAtt SampleLambdaRole.Arn
SampleLambdaLiveAlias:
    Type: AWS::Lambda::Alias
    Properties:
        FunctionName: !Ref SampleLambdaFunction
        FunctionVersion: !GetAtt SampleLambdaGetMaxVersionFunction.version
        Name: live

src/getLatestLambdaVersionByName.js

const response = require('./cfn-response.js'),
    AWS = require('aws-sdk'),
    lambda = new AWS.Lambda({ apiVersion: '2015-03-31' });

exports.handler = function (event, context) {
    console.log({ GetLatestLambdaVersionBynameEvent: event });

    if (event.RequestType == 'Delete') {
        response.send(event, context, response.SUCCESS);  //, { Delete: true, event } 
        return;
    }

    try {
        let params = {
            FunctionName: event.ResourceProperties.FunctionName,
            MaxItems: 999
        };
        // Use list-versions-by-function then determine the greatest version # and return it
        lambda.listVersionsByFunction(params, function (err, data) {
            console.log({ params, err });
            if (err) {
                console.error(err, err.stack); // an error occurred
                response.send(event, context, response.FAILED);
                return; // JSON.stringify({ error: err });
            } else {
                console.log(JSON.stringify({ Versions: data.Versions }));

                let version = data.Versions[data.Versions.length - 1].Version;
                if (version == '$LATEST') version = 1;
                let res = { version };
                response.send(event, context, response.SUCCESS, res);
                return; // JSON.stringify(res);
            }
        });

    } catch (err) {
        let error = { err, stack: err.stack };
        response.send(event, context, response.FAILED);
        return; // JSON.stringify({ error });
    }
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SAM 部署来获取 lambda,以及 AutoPublishAlias 和其他别名 的相关文章

  • AWS lambda函数使用什么ip?

    我不太擅长网络 但这是我的问题 我需要从位于防火墙后面的AWS lambda函数连接到MySQL服务器 并且要 白色 我的AWS lambda 我需要知道它使用什么IP 据我了解 它因 VPC 子网而异 如果我的 VPC 子网 CIDR 是
  • 如何在AWS Lambda函数中使用ImageMagick“drawtext”方法?

    我目前正在使用 Node gm 模块显示的 ImageMagick 7 运行 Node 8 Lambda 函数 https github com aeckmann gm https github com aheckmann gm 来注释一些
  • 如何在 Amazon AWS Lambda 函数中发布到 MQTT 主题?

    我想要一个简单的命令 就像我在 bash 中使用的那样 将某些内容发布到 AWS Lambda 函数内的 MQTT 主题 沿着以下思路 mosquitto pub h my server com t 灯 设置 m 开 背景 我想用 Alex
  • AWS CLI - 如何为认知用户生成安全令牌

    最终 我需要为 Cognito 用户池中的用户生成 AccessKeyId SecurityKey 和 SessionToken 以便我可以使用 Postman 作为 Cognito 用户测试 lambda 函数 到目前为止 我已经花了两天
  • RDS不支持创建以下组合的数据库实例

    我正在尝试弄清楚如何创建一个简单的数据库实例 到目前为止我只有一个DBSubnetGroup and DBInstance 此时 根据我尝试使用模板 在 Designer 中创建 创建堆栈时遇到的错误 我已经弄清楚了一些事情 我现在遇到了一
  • AWS lambda 基本身份验证,无需自定义授权者

    我在为用 Node js 编写的 AWS lambda 函数设置基本身份验证时遇到问题 问题 AWS lambda 函数是附加服务的代理 该函数仅转发整个请求并向用户提供整个响应 这就是为什么我需要强制使用Authentication标题
  • 如何在 CloudFormation 模板中禁用对 Auto Scaling 组中实例的详细监控?

    我正在使用 CloudFormation 启动自动扩展组中的一些服务器 并且我希望它们全部使用basic监控 我尝试设置Monitoring to false in the AWS AutoScaling AutoScalingGroup属
  • 无法在 AWS Lambda 上使用请求模块

    我需要在每天运行一次的 python 脚本中进行休息调用 我无法使用 AWS Lambda 将 requests 包打包到我的 python 包中 我收到错误 无法导入模块 lambda function 没有名为 lambda funct
  • 无法在 Docker 下运行 AWS SAM CLI

    我正在尝试创建一个 Docker 镜像AWS SAM CLI https github com awslabs aws sam cli 但调用任何函数都会出现错误 无法导入模块 index 我可以在 Docker 之外成功运行相同的测试用例
  • 由于参数中有空格,Bash 脚本因未知选项而失败

    我正在尝试运行 aws create lambda 函数 事情的经过如下 eval aws lambda create function function name FUNCTION NAME runtime RUNTIME role RO
  • 当包含非 ASCII 字符时,无法使用 lambda S3 事件给出的密钥

    我有一个 Python lambda 脚本 可以在图像上传到 S3 时缩小图像 当上传的文件名包含非 ASCII 字符 在我的例子中是希伯来语 时 我无法获取该对象 禁止 就好像该文件不存在一样 这是我的 一些 代码 s3 client b
  • 服务无法放置任务

    好吧 我不知道在哪里可以解决这个问题 我正在尝试启动一个堆栈 其中有一个在 ECS 中运行的基本应用程序 我将在下面展示云信息 但我不断得到 服务 sos ecs SosEcsService 1RVB1U5QXTY9S 无法放置任务 因为没
  • 使用 Cloudformation SAM 的 AWS::Serverless::Api 资源策略

    最近AWS宣布 是否可以将资源策略附加到通过 Cloudformation 使用 SAM 创建的 AWS Serverless Api 我还没有机会尝试这个 但我假设您可以像使用 S3 存储桶策略一样使用它 对你来说最棘手的部分是抓住api
  • AWS SNS 发布到订阅的 Lambda 函数记录空字段

    试图将其发布到 AWS 论坛 但无论这意味着什么 我的帐户似乎 尚未准备好 我设置了一个 AWS Lambda 函数 用 Java 编写 该函数接受 POJO 以允许自动反序列化 JSON 我使用的测试 JSON 如下所示 表示一旦一切启动
  • 创建 CloudFront Distribution 时出现 Crypp CloudFormation 失败

    我设置了一个 CloudFormation 模板来跟踪 CloudFront 分发等 设置完毕后 我创建了一个AWS CertificateManager Certificate and an AWS CloudFront Distribu
  • 如何动态更新我的 AWS CloudWatch 控制面板?

    我在 CloudWatch 中有几个仪表板 它们代表我的基础设施的静态视图 例如 自动扩展工作组中当前正在运行的实例数量 或者各种关键 EC2 实例的 CPU 磁盘状态 但是 当我添加新实例时 我总是需要手动更新仪表板以将它们包含在显示中
  • 如何使用对象标记上传到 AWS S3

    有没有办法使用标签将文件上传到AWS S3 不将标签添加到S3中的现有文件 对象 我需要让该文件与我的 Tags 一起出现在 S3 中 即在单个 API 调用中 我需要这个 因为我使用 Lambda 函数 使用这些 S3 对象标签 由 S3
  • 无法使用 aws 无服务器离线从另一个 lambda 调用 lambda

    我想从 serverless offline 内的另一个 lambda 调用 lambda 我想创建一个无服务器离线 Web 应用程序 但我收到此错误 UnknownError 不支持的媒体类型 在 Object extractError
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • AWS cognito 用户迁移池触发器不适用于登录流程

    我正在使用带有认知执行角色的 Lambda 函数进行 AWS 认知池迁移 以下是我的新池应用程序客户端设置 or AWS doc says 用户迁移身份验证流程 用户迁移 Lambda 触发器 允许从旧用户管理系统轻松迁移用户 进入您的用户

随机推荐

  • 将字符数组视为比特流的 C/C++ 代码

    我在 char 数组中有一大堆二进制数据 我需要将其解释为打包的 6 位值的数组 I could坐下来编写一些代码来执行此操作 但我认为必须有人已经编写了一个很好的现有类或函数 我需要的是这样的 int get bits char data
  • 如何在 asp.net mvc 3 中使用 jquery 和 dataannotation 验证输入文件

    我确信我在这里遗漏了一些东西 我发现this验证文件的问题 这里是示例代码 public class UpdateSomethingViewModel DisplayName evidence Required ErrorMessage Y
  • MySQL 错误 1215:无法添加外键约束

    我正在尝试将我的新架构正向工程到我的数据库服务器上 但我无法弄清楚为什么会出现此错误 我试图在这里搜索答案 但我发现的所有内容都说要么将数据库引擎设置为 InnoDB 要么确保我尝试用作外键的键是它们自己的表中的主键 如果我没记错的话 这两
  • 如何在javascriptalert()中增加字体大小

    我可以控制javascript中字符串的字体大小吗alert call 我有下面的图片 我想增加字体大小以使其清晰易读 Javascript 警报弹出窗口 我可以在 javascriptalert 调用中控制字符串的字体大小吗 没有 警报窗
  • ADB - Android - 获取当前活动的名称

    有没有办法通过 adb 获取当前正在运行的活动的详细信息 我更喜欢解析结果dumpsys window windows over dumpsys activity adb shell dumpsys window windows grep
  • Spring Boot 的 Hibernate 字段命名问题(命名策略)

    请注意 此代码确实适用于普通 Spring 但不适用于 Spring Boot v1 3 3 我是否缺少某些内容 因为这是从有效的 Spring 应用程序导入的 下面的代码来自spring boot应用程序 Entity Table nam
  • 如何使用相同的输入创建两个不同的补充列表

    在我之前的问题中 如何在带有列表的地图中分组时过滤年龄我能够使用以下方法找到年龄组的名称List
  • 从文本文件自动附加/完成到编辑框delphi

    我正在尝试创建一个编辑框 并且希望它能够自动附加键入时输入的文本 文本将附加来自文本文件的 建议 假设我的建议文件中有这些 玛丽莲 梦露 马龙 白兰度 迈克 迈尔斯 当我开始在编辑框中输入 M 时 其余部分将突出显示 或不突出显示 艾琳 梦
  • BitConverter.GetBytes 就位

    我需要获取值UInt16 and UInt64 as Byte 目前我正在使用BitConverter GetBytes 但是这个方法每次都会给我一个新的数组实例 我想使用一种方法 允许我将这些值 复制 到已经存在的数组中 例如 ToByt
  • 我可以发送“收到意向短信”吗?

    标题很明显 我可以在 Android 手机上发送 短信收到意图 吗 换句话说 虚拟地接收自定义短信来伪造一些短信接收者 您可以创建假短信 GMS 类型 以便像真实消息一样内置捕获 这是我的答案 Intent intent new Inten
  • iOS 的 APNS 通知声音

    我在为我的应用程序设置消息声音时遇到一些问题 所以在服务器发送的 apns 响应中 我指定 sound default 一切都很好 但如果我设置 sound chime or sound note 它们似乎不起作用 它始终播放 默认 这些是
  • Powershell Excel 自动化 - 在计划任务中保存/打开失败

    我创建了一个简单的 powershell 脚本 它将创建一个 Excel 实例并保存一个工作簿 excel New Object ComObject Excel Application workbook excel Workbooks Op
  • CSS - border-radius 在 IE6/7/8 中不显示

    我使用以下 CSS 在我的 DIV 上实现圆角边框 border 1px solid 999 border radius 6px ms border radius 6px moz border radius 6px webkit borde
  • 使用c# selenium webdriverWait wait.untill()函数时忽略异常

    为了检查元素是否存在并且可点击 我尝试编写一个布尔方法 该方法将等待元素启用并使用 C selenium webDriverWait 显示 如下所示 webDriverWait wait new webDriverWait driver t
  • 按值对哈希表进行排序

    如果我有一个哈希表 并且我想按值对其进行排序 即 按降序排列的整数 我怎样才能做到这一点并能够打印所有键值对 传输为列表并排序 public static void sortValue Hashtable
  • 关于范围的变量的最佳声明

    我问这个问题主要是关于 C 编程 但欢迎对任何语言的见解 当谈到 C 时 我知道它只允许变量声明出现在代码块的最开始处 我的印象是 应该在函数的一开始就声明函数中要使用的所有变量 但在很多情况下 我都会有一个仅在循环 或类似块 中使用的变量
  • C# 引用变量的内存分配

    有谁知道创建引用类型变量时占用了多少内存 字符串 s 123 s 作为引用 而不是指向它的数据 会占用多少内存 这可以按以下方式细分 String s 123 变量s 这将消耗当前架构上的本机指针大小 如果操作系统是 32 位或进程在 Wo
  • 如何使用 PHP 检测爬虫/蜘蛛?

    如何使用 PHP 检测爬虫 蜘蛛 我目前正在开发一个项目 需要跟踪每个爬虫的访问情况 我知道您应该使用 HTTP USER AGENT 但我不太确定如何为此目的格式化代码 并且我知道 USER AGENT 可以很容易地更改 所以我还想知道是
  • 如何强制 Java 子类定义 Annotation?

    如果一个类定义了一个注释 是否可以强制其子类定义相同的注释 例如 我们有一个简单的类 子类对 它们共享 Author interface 我想做的是强制每个进一步的子类定义相同的 Author注释 防止RuntimeException沿着路
  • 如何使用 SAM 部署来获取 lambda,以及 AutoPublishAlias 和其他别名

    我的目标是额外SAM deploy调用将导致 staging 别名反映最新版本 并且 live 将通过外部方式更新 但必须初始化为部署时创建的相同版本 我正在使用 SAM 部署 并且需要 lambda 上的别名 在初始模板中添加它们很棘手