跳到文章

AWS Serverless Application Model 学习笔记

关于 SAM

AWS Serverless Application Model(AWS SAM)1 是一个开源框架,可用于构建无服务器应用程序上AWS. 一个无服务器应用是 Lambda 函数、事件源以及共同执行任务的其他资源的组合。请注意,无服务器应用程序不仅仅是一个 Lambda 函数,还可以包含其他资源,例如 API、数据库和事件源映射。

SAM 通过 yaml 文件定义 app 需要的各种 aws 资源,把他们整合在一起通过持续集成(CICD)发布 serverless app。SAM 里面有很多内置变量。比如 AWS::Region

SAM 会调用 AWS CloudFormation 对云资源进行设置。上述更多内置变量参考:AWS CloudFormation 资源和属性类型参考。官方有机翻中文版,👍

SAM 跟 CloudFormation 定义的资源关键字是有区别的,比如 SAM AWS::Serverless::HttpApi 里面的 HttpApiDomainConfiguration 对应后者的 AWS::ApiGateway2::DomainName 资源。

开发笔记

账户被告警扣费了,aws 只提供了10个告警额度,不注意容易超。可以根据告警来源删除告警源,比如来自 Cloudwatch app insight 的告警可以在下图中删除: aws-delete-alarm-insight

当前 Lambda Python3.9 的官方镜像中 boto3 的版本有点老 2,scheduler 的支持是在 botocore 1.26 才加入的3, 所以要用 scheduler client 得在项目 requerments.txt 声明好版本。

创建 scheduler 遇到奇怪的报错,文档里明明写了 str 或者 json。可以提个 PR

botocore.exceptions.ParamValidationError: Parameter validation failed: Unknown parameter in input: "Input", must be one of: ClientToken, Description, EndDate, FlexibleTimeWindow, GroupName, KmsKeyArn, Name, ScheduleExpression, ScheduleExpressionTimezone, StartDate, State, Target

创建权限不够,需要先当前函数的执行角色添加scheduler 权限 scheduler:CreateSchedule,直接给个fullaccess(放在了template.yml)

报错:

botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the CreateSchedule operation: The execution role you provide must allow AWS EventBridge Scheduler to assume the role.

解决办法:需要编辑角色的信任策略,让schuduler 能调用角色。如下图 assumerole