kotless icon indicating copy to clipboard operation
kotless copied to clipboard

Kotless Hello World example fails deploying on AWS

Open stefan-zh opened this issue 4 years ago • 4 comments

I am experiencing issues when trying to deploy the "Hello World" example for Kotless. I'm using the latest version of Kotless 0.1.7-beta-4.

> Task :deploy

data.aws_iam_policy_document.kotless_static_assume: Refreshing state...
data.aws_caller_identity.current: Refreshing state...
data.aws_region.current: Refreshing state...
aws_api_gateway_rest_api.karti4ko: Refreshing state... [id=a9aty1vil1]
data.aws_s3_bucket.kotless_bucket: Refreshing state...
data.aws_iam_policy_document.kotless_static_policy: Refreshing state...
aws_api_gateway_deployment.root: Creating...
aws_iam_role.kotless_static_role: Creating...

Error: Error creating API Gateway Deployment: BadRequestException: The REST API doesn't contain any methods

  on karti4ko.tf line 14, in resource "aws_api_gateway_deployment" "root":
  14: resource "aws_api_gateway_deployment" "root" {



Error: Error creating IAM Role kotless-static-role: EntityAlreadyExists: Role with name kotless-static-role already exists.
	status code: 409, request id: 8b6b2879-29be-4cfe-8028-f585f3ec1ece

  on karti4ko.tf line 31, in resource "aws_iam_role" "kotless_static_role":
  31: resource "aws_iam_role" "kotless_static_role" {



BUILD SUCCESSFUL in 47s
6 actionable tasks: 2 executed, 4 up-to-date
22:47:36: Task execution finished 'deploy'.

I have 1 file, Functions.kt, containing the following:

package com.serverless.karti4ko

import io.kotless.dsl.lang.http.Get

@Get("/")
fun sayHello() = "Say Hello!"

My build.gradle.kts looks like this

import io.kotless.plugin.gradle.dsl.kotless

group = "com.serverless.karti4ko"
version = "1.0-SNAPSHOT"

plugins {
    kotlin("jvm") version "1.3.72" apply true
    id("io.kotless") version "0.1.7-beta-4" apply true
}

repositories {
    jcenter()
}

dependencies {
    implementation("io.kotless", "kotless-lang", "0.1.7-beta-4")
}

kotless {
    config {
        bucket = "my.serverless.bucket"

        terraform {
            profile = "my.kotless.user"
            region = "eu-west-1"
        }
    }
    webapp {
        lambda {
            kotless {
                packages = setOf("com.serverless.karti4ko")
            }
        }
    }
}

Expected events

  1. Gradle deployment task should not be successful when the deployment is unsuccessful.
  2. The "Hello World" example as given on the README for Kotless should deploy successfully.

stefan-zh avatar Nov 09 '20 20:11 stefan-zh

Are you building on Windows? If that's the case, please check that new line feeds are LF. It is a well-known bug that should be fixed.

TanVD avatar Nov 14 '20 20:11 TanVD

Hey @TanVD I'm building on Windows. I converted all line feeds to LF, but I still got the same error above.

stefan-zh avatar Dec 04 '20 14:12 stefan-zh

I have the same issue. How can I deploy the same Kotless app into different AWS environments (prod/dev)?

hamadycisse avatar Feb 02 '21 20:02 hamadycisse

I was able to solve the issue by using a prefix

kotless {
    config {
        prefix = System.getenv("DEPLOYMENT_PREFIX") ?: "dev"
    }
}

hamadycisse avatar Feb 02 '21 22:02 hamadycisse