Swift serverless.yml 适配器。在 Swift 中读取和写入 Serverless Framework 配置。
Serverless framework 是一款一体化的开发解决方案,用于在 AWS Lambda 上自动扩展应用程序。 serverless.yml 文件表示部署配置。 这个 swift 包允许使用 Yams 对 serverless.yml 进行编码和解码。
将以下包添加到您的 swift 包中
dependencies: [
// ...
.package(url: "https://github.com/swift-sprinter/swift-sls-adapter.git", from: "0.1.0")
]
解码
import Foundation
import SwiftSlsAdapter
import Yams
let fileUrl = URL(fileURLWithPath: "servreless.yml")
let serverlessYml: Data = Data(contentsOf: fileUrl)
let decoder = YAMLDecoder()
let serverlessConfig = try decoder.decode(ServerlessConfig.self, from: serverlessYml)
编码
import Foundation
import SwiftSlsAdapter
import Yams
// Initialise ServerlessConfig
let iam = Iam(
role: Role(
statements: [
Statement(
effect: "Allow",
action: [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
resource: try YAMLContent(with: "*")
),
Statement(
effect: "Allow",
action: [
"dynamodb:UpdateItem",
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:DeleteItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:DescribeTable"
],
resource: try YAMLContent(with: [["Fn::GetAtt": ["ProductsTable", "Arn"]]])
)
]))
let environment = try YAMLContent(with: ["PRODUCTS_TABLE_NAME": "${self:custom.tableName}"])
let provider = Provider(
name: .aws,
region: .eu_west_1,
runtime: .providedAl2,
environment: environment,
lambdaHashingVersion: "20201221",
architecture: .arm64,
httpAPI: .init(payload: "2.0", cors: true),
iam: iam
)
let custom = try YAMLContent(with: ["tableName": "products-table-${sls:stage}"])
let layer = Layer(
path: "./build/swift-lambda-runtime",
name: "aws-swift-sprinter-lambda-runtime",
description: "AWS Lambda Custom Runtime for Swift-Sprinter"
)
let package = Package(
patterns: [
"!**/*",
"build/Products"
],
individually: true
)
let layersRef = try YAMLContent(with: [["Ref": "SwiftDashlambdaDashruntimeLambdaLayer"]])
let path = "/products"
let keyedPath = "/products/{sku}"
let createProduct = Function(
handler: "build/Products.create",
runtime: nil,
memorySize: 256,
description: "[${sls:stage}] Create Product",
package: package,
layers: layersRef,
events: [.init(httpAPI: .init(path: path, method: .post))]
)
let readProduct = Function(
handler: "build/Products.read",
runtime: nil,
memorySize: 256,
description: "[${sls:stage}] Get Product",
package: package,
layers: layersRef,
events: [.init(httpAPI: .init(path: keyedPath, method: .get))]
)
let updateProduct = Function(
handler: "build/Products.update",
runtime: nil,
memorySize: 256,
description: "[${sls:stage}] Update Product",
package: package,
layers: layersRef,
events: [.init(httpAPI: .init(path: path, method: .put))]
)
let deleteProduct = Function(
handler: "build/Products.delete",
runtime: nil,
memorySize: 256,
description: "[${sls:stage}] Delete Product",
package: package,
layers: layersRef,
events: [.init(httpAPI: .init(path: keyedPath, method: .delete))]
)
let listProducts = Function(
handler: "build/Products.list",
runtime: nil,
memorySize: 256,
description: "[${sls:stage}] List Products",
package: package,
layers: layersRef,
events: [.init(httpAPI: .init(path: path, method: .get))]
)
let resource = Resource.dynamoDBResource(tableName: "${self:custom.tableName}", key: "sku")
let resources = Resources.resources(with: ["ProductsTable": resource])
let serverlessConfig = ServerlessConfig(
service: "swift-sprinter-rest-api",
provider: provider,
package: .init(patterns: nil, individually: true, artifact: nil),
custom: custom,
layers: ["swift-lambda-runtime": layer],
functions: [
"createProduct": createProduct,
"readProduct": readProduct,
"updateProduct": updateProduct,
"deleteProduct": deleteProduct,
"listProducts": listProducts
],
resources: try YAMLContent(with: resources)
)
let encoder = YAMLEncoder()
let content = try encoder.encode(serverlessConfig)
该软件包正在开发中。
此软件包中实现的功能的状态
功能 | 支持 |
---|---|
根属性 | ✅ |
参数 | ✅ |
Provider (提供者) | aws |
通用设置 | ✅ |
通用函数设置 | ✅ |
部署存储桶 | ❌ |
API Gateway v2 HTTP API | ✅ |
API Gateway v1 REST API | ❌ |
ALB | ❌ |
ECR 中的 Docker 镜像部署 | ❌ |
IAM 权限 | ✅ |
VPC | ❌ |
S3 存储桶 | ❌ |
Package (打包) | ✅ |
Functions (函数) | ✅ |
Lambda 事件 | ✅ |
API Gateway v2 HTTP API | ✅ |
API Gateway v1 REST API | ❌ |
API Gateway v1 REST API | ❌ |
Websocket API | ❌ |
S3 事件 | ❌ |
S3 定时任务 | ❌ |
SNS | ❌ |
SQS | ❌ |
Streams (流) | ❌ |
MSK | ❌ |
ActiveMQ | ❌ |
Kafka | ❌ |
Kafka | ❌ |
RabbitMQ | ❌ |
Alexa | ❌ |
IOT | ❌ |
CloudWatch | ❌ |
Cognito | ❌ |
ALB | ❌ |
EventBridge | ❌ |
CloudFront | ❌ |
函数层 | ✅ |
AWS 资源 | ✅ |
非常欢迎贡献! 遵循此指南以进行贡献。
https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml