JetBrains Space 部署到 AWS Lambda

JetBrains Space Deploy to AWS Lambda

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

我们希望 develop 分支发布到 Lambda $Latest,当我们从 develop 分支合并到 main 分支时,我们希望它发布一个新的 Lambda 版本和 link 别名 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).

can specify maven dependencies for your .space.kts script 通过 @DependsOn 注释,您可以使用它从 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 的完整示例。