JetBrains Space Deploy to AWS Lambda



我们正在试验Jetbrains Space作为我们的代码回购和CI/CD。我们正在尝试找到一种方法来设置.space.kts文件以部署到AWS Lambda。

我们希望develop分支发布到Lambda$Latest,当我们从develop分支合并到main分支时,我们希望它发布一个新的Lambda版本,并将该版本链接到别名pro

我环顾四周,但没有发现任何迹象表明有一个预先构建的解决方案可以控制AWS Lambda,所以我目前的想法是这样的:

job("Publish to Lambda Latest") {
startOn {
gitPush {
branchFilter {
+"refs/heads/develop"
}
}
}
container(displayName = "AWS Lambda CLI", image = "amazon/aws-cli") {

// Space Packages repository
env["REPOSITORY_URL"] = "https://..."
shellScript {
content = """
echo Deploying to Lambda Latest...
...
"""
}
}
}

我不相信使用shell脚本是一种非常健壮的方法,因为我需要将变量从一个命令传递到另一个命令。有更好的方法吗?

没有用于与AWS交互的内置DSL。

如果你想要一个比普通shellScript更安全的解决方案,并且可能在多个调用之间重用数据等,你仍然可以直接使用Kotlin代码(在kotlinScript块中而不是shellScript(。

您可以通过@DependsOn注释为.space.kts脚本指定maven依赖项,例如,您可以使用它来添加来自AWS Java SDK:的模块

// you can add other module artifacts like "s3", "ec2", etc.
@file:DependsOn("software.amazon.awssdk:lambda:2.13.7")
import software.amazon.awssdk.services.lambda.*
import software.amazon.awssdk.services.lambda.model.*
job("Publish to Lambda Latest") {
startOn {
gitPush {
branchFilter {
+"refs/heads/develop"
}
}
}
container(displayName = "AWS Lambda", image = "openjdk:11") {
kotlinScript { spaceApi ->
// use AWS SDK classes here, for instance:
val client = LambdaClient.builder().build()
val updateFunctionCodeRequest = UpdateFunctionCodeRequest.builder()
.functionName("name")
.s3Bucket("bucket")
.s3Key("key")
.publish(true)
.build()
client.updateFunctionCode(updateFunctionCodeRequest)
client.close()
}
}
}

这里显示的这段代码只是为了示例(以表明您可以使用AWS SDK类和方法(,它不是关于如何发布lambda的完整示例。

最新更新