From b54fe1b555e4f3449561a9940228b0dcef2d6037 Mon Sep 17 00:00:00 2001 From: Bruno Schaatsbergen Date: Fri, 25 Mar 2022 00:01:07 +0100 Subject: [PATCH 01/12] Add `ephemeral_storage` attribute to Lambda function scheme --- internal/service/lambda/function.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/internal/service/lambda/function.go b/internal/service/lambda/function.go index 88f48d7ee36c..bb06c171ef3a 100644 --- a/internal/service/lambda/function.go +++ b/internal/service/lambda/function.go @@ -208,6 +208,24 @@ func ResourceFunction() *schema.Resource { Optional: true, ValidateFunc: validation.StringInSlice(lambda.Runtime_Values(), false), }, + "ephemeral_storage": { + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "size": { + Type: schema.TypeInt, + Required: true, + Default: 512, + ValidateFunc: validation.All( + validation.IntBetween(512, 10240), + ), + }, + }, + }, + }, "timeout": { Type: schema.TypeInt, Optional: true, @@ -378,6 +396,7 @@ func hasConfigChanges(d verify.ResourceDiffer) bool { d.HasChange("layers") || d.HasChange("dead_letter_config") || d.HasChange("tracing_config") || + d.HasChange("ephemeral_storage") || d.HasChange("vpc_config.0.security_group_ids") || d.HasChange("vpc_config.0.subnet_ids") || d.HasChange("runtime") || @@ -506,6 +525,14 @@ func resourceFunctionCreate(d *schema.ResourceData, meta interface{}) error { } } + // if v, ok := d.GetOk("ephemeral_storage"); ok { + // ephemeralStorageConfig := v.([]interface{}) + // ephemeralStorage := ephemeralStorageConfig[0].(map[string]interface{}) + // params.EphemeralStorage = &lambda.EphemeralStorage{ + // Size: aws.Int64(int64(ephemeralStorage["size"].(int))), + // } + // } + if v, ok := d.GetOk("environment"); ok { environments := v.([]interface{}) environment, ok := environments[0].(map[string]interface{}) From d1399f4de85442a6bdec32c4c78b32f1226c4857 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Fri, 25 Mar 2022 00:42:28 +0000 Subject: [PATCH 02/12] Lambda ephemeral storage feature added --- internal/service/lambda/function.go | 53 ++++++++++++- .../service/lambda/function_data_source.go | 16 ++++ .../lambda/function_data_source_test.go | 41 ++++++++++ internal/service/lambda/function_test.go | 79 +++++++++++++++++++ website/docs/d/lambda_function.html.markdown | 1 + website/docs/r/lambda_function.html.markdown | 43 ++++++++++ 6 files changed, 231 insertions(+), 2 deletions(-) diff --git a/internal/service/lambda/function.go b/internal/service/lambda/function.go index 88f48d7ee36c..ef5f085ba22e 100644 --- a/internal/service/lambda/function.go +++ b/internal/service/lambda/function.go @@ -146,6 +146,21 @@ func ResourceFunction() *schema.Resource { }, }, }, + "ephemeral_storage": { + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "size": { + Type: schema.TypeInt, + Optional: true, + Default: 512, + ValidateFunc: validation.IntBetween(512, 10240), + }, + }, + }, + }, "file_system_config": { Type: schema.TypeList, Optional: true, @@ -381,7 +396,8 @@ func hasConfigChanges(d verify.ResourceDiffer) bool { d.HasChange("vpc_config.0.security_group_ids") || d.HasChange("vpc_config.0.subnet_ids") || d.HasChange("runtime") || - d.HasChange("environment") + d.HasChange("environment") || + d.HasChange("ephemeral_storage") } // resourceAwsLambdaFunction maps to: @@ -481,6 +497,14 @@ func resourceFunctionCreate(d *schema.ResourceData, meta interface{}) error { } } + if v, ok := d.GetOk("ephemeral_storage"); ok && len(v.([]interface{})) > 0 { + ephemeralStorage := v.([]interface{}) + configMap := ephemeralStorage[0].(map[string]interface{}) + params.EphemeralStorage = &lambda.EphemeralStorage{ + Size: aws.Int64(int64(configMap["size"].(int))), + } + } + if v, ok := d.GetOk("file_system_config"); ok && len(v.([]interface{})) > 0 { params.FileSystemConfigs = expandFileSystemConfigs(v.([]interface{})) } @@ -792,6 +816,12 @@ func resourceFunctionRead(d *schema.ResourceData, meta interface{}) error { log.Printf("[ERR] Error setting environment for Lambda Function (%s): %s", d.Id(), err) } + ephemeralStorage := flattenEphemeralStorage(function.EphemeralStorage) + log.Printf("[INFO] Setting Lambda %s ephemeralStorage %#v from API", d.Id(), ephemeralStorage) + if err := d.Set("ephemeral_storage", ephemeralStorage); err != nil { + return fmt.Errorf("error setting ephemeral_storage for Lambda Function (%s): %w", d.Id(), err) + } + if function.DeadLetterConfig != nil && function.DeadLetterConfig.TargetArn != nil { d.Set("dead_letter_config", []interface{}{ map[string]interface{}{ @@ -983,7 +1013,15 @@ func resourceFunctionUpdate(d *schema.ResourceData, meta interface{}) error { if d.HasChange("description") { configReq.Description = aws.String(d.Get("description").(string)) } - + if d.HasChange("ephemeral_storage") { + ephemeralStorage := d.Get("ephemeral_storage").([]interface{}) + if len(ephemeralStorage) == 1 { + configMap := ephemeralStorage[0].(map[string]interface{}) + configReq.EphemeralStorage = &lambda.EphemeralStorage{ + Size: aws.Int64(int64(configMap["size"].(int))), + } + } + } if d.HasChange("handler") { configReq.Handler = aws.String(d.Get("handler").(string)) } @@ -1444,3 +1482,14 @@ func expandImageConfigs(imageConfigMaps []interface{}) *lambda.ImageConfig { } return imageConfig } + +func flattenEphemeralStorage(response *lambda.EphemeralStorage) []map[string]interface{} { + if response == nil { + return nil + } + + m := make(map[string]interface{}) + m["size"] = aws.Int64Value(response.Size) + + return []map[string]interface{}{m} +} diff --git a/internal/service/lambda/function_data_source.go b/internal/service/lambda/function_data_source.go index 366fb01a0bee..3a4154a8e0ef 100644 --- a/internal/service/lambda/function_data_source.go +++ b/internal/service/lambda/function_data_source.go @@ -43,6 +43,18 @@ func DataSourceFunction() *schema.Resource { }, }, }, + "ephemeral_storage": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "size": { + Type: schema.TypeInt, + Computed: true, + }, + }, + }, + }, "file_system_config": { Type: schema.TypeList, Computed: true, @@ -356,5 +368,9 @@ func dataSourceFunctionRead(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("Error setting architectures for Lambda Function (%s): %w", d.Id(), err) } + if err := d.Set("ephemeral_storage", flattenEphemeralStorage(function.EphemeralStorage)); err != nil { + return fmt.Errorf("error setting ephemeral_storage: (%s): %w", d.Id(), err) + } + return nil } diff --git a/internal/service/lambda/function_data_source_test.go b/internal/service/lambda/function_data_source_test.go index 82cfc7c37e37..40fc45c108d8 100644 --- a/internal/service/lambda/function_data_source_test.go +++ b/internal/service/lambda/function_data_source_test.go @@ -245,6 +245,28 @@ func TestAccLambdaFunctionDataSource_architectures(t *testing.T) { }) } +func TestAccLambdaFunctionDataSource_ephemeralStorage(t *testing.T) { + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + dataSourceName := "data.aws_lambda_function.test" + resourceName := "aws_lambda_function.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, lambda.EndpointsID), + Providers: acctest.Providers, + Steps: []resource.TestStep{ + { + Config: testAccFunctionEphemeralStorageDataSourceConfig(rName), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrPair(dataSourceName, "arn", resourceName, "arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "ephemeral_storage.#", resourceName, "ephemeral_storage.#"), + resource.TestCheckResourceAttrPair(dataSourceName, "ephemeral_storage.0.size", resourceName, "ephemeral_storage.0.size"), + ), + }, + }, + }) +} + func testAccFunctionBaseDataSourceConfig(rName string) string { return fmt.Sprintf(` resource "aws_iam_role" "lambda" { @@ -605,3 +627,22 @@ func testAccImagePreCheck(t *testing.T) { t.Skip("AWS_LAMBDA_IMAGE_LATEST_ID env var must be set for Lambda Function Data Source Image Support acceptance tests.") } } + +func testAccFunctionEphemeralStorageDataSourceConfig(rName string) string { + return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` +resource "aws_lambda_function" "test" { + filename = "test-fixtures/lambdatest.zip" + function_name = %[1]q + handler = "exports.example" + role = aws_iam_role.lambda.arn + runtime = "nodejs12.x" + ephemeral_storage { + size = 1024 + } +} + +data "aws_lambda_function" "test" { + function_name = aws_lambda_function.test.function_name +} +`, rName) +} diff --git a/internal/service/lambda/function_test.go b/internal/service/lambda/function_test.go index 730fdadd53b5..e006226795c3 100644 --- a/internal/service/lambda/function_test.go +++ b/internal/service/lambda/function_test.go @@ -1194,6 +1194,53 @@ func TestAccLambdaFunction_architecturesWithLayer(t *testing.T) { }) } +func TestAccLambdaFunction_ephemeralStorage(t *testing.T) { + var conf lambda.GetFunctionOutput + rString := sdkacctest.RandString(8) + funcName := fmt.Sprintf("tf_acc_lambda_func_ephemeral_storage_%s", rString) + policyName := fmt.Sprintf("tf_acc_policy_lambda_func_ephemeral_storage_%s", rString) + roleName := fmt.Sprintf("tf_acc_role_lambda_func_ephemeral_storage_%s", rString) + sgName := fmt.Sprintf("tf_acc_sg_lambda_func_ephemeral_storage_%s", rString) + resourceName := "aws_lambda_function.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(t) + }, + ErrorCheck: acctest.ErrorCheck(t, lambda.EndpointsID), + Providers: acctest.Providers, + CheckDestroy: testAccCheckFunctionDestroy, + + Steps: []resource.TestStep{ + { + Config: testAccWithEphemeralStorage(funcName, policyName, roleName, sgName), + Check: resource.ComposeTestCheckFunc( + testAccCheckFunctionExists(resourceName, funcName, &conf), + testAccCheckFunctionName(&conf, funcName), + acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "lambda", fmt.Sprintf("function:%s", funcName)), + testAccCheckFunctionInvokeARN(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.0.size", "1024"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"filename", "publish"}, + }, + { + Config: testAccWithUpdateEphemeralStorage(funcName, policyName, roleName, sgName), + Check: resource.ComposeTestCheckFunc( + testAccCheckFunctionExists(resourceName, funcName, &conf), + testAccCheckFunctionName(&conf, funcName), + acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "lambda", fmt.Sprintf("function:%s", funcName)), + resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.0.size", "2048"), + ), + }, + }, + }) +} + func TestAccLambdaFunction_tracing(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") @@ -3597,3 +3644,35 @@ func testAccPreCheckSignerSigningProfile(t *testing.T, platformID string) { t.Skipf("skipping acceptance testing: Signing Platform (%s) not found", platformID) } } + +func testAccWithEphemeralStorage(funcName, policyName, roleName, sgName string) string { + return fmt.Sprintf(acctest.ConfigLambdaBase(policyName, roleName, sgName)+` +resource "aws_lambda_function" "test" { + filename = "test-fixtures/lambdatest.zip" + function_name = "%s" + role = aws_iam_role.iam_for_lambda.arn + handler = "exports.example" + runtime = "nodejs12.x" + + ephemeral_storage { + size = 1024 + } +} +`, funcName) +} + +func testAccWithUpdateEphemeralStorage(funcName, policyName, roleName, sgName string) string { + return fmt.Sprintf(acctest.ConfigLambdaBase(policyName, roleName, sgName)+` +resource "aws_lambda_function" "test" { + filename = "test-fixtures/lambdatest.zip" + function_name = "%s" + role = aws_iam_role.iam_for_lambda.arn + handler = "exports.example" + runtime = "nodejs12.x" + + ephemeral_storage { + size = 2048 + } +} +`, funcName) +} diff --git a/website/docs/d/lambda_function.html.markdown b/website/docs/d/lambda_function.html.markdown index 6c9a8d3f5554..1cab22b9b5c8 100644 --- a/website/docs/d/lambda_function.html.markdown +++ b/website/docs/d/lambda_function.html.markdown @@ -39,6 +39,7 @@ In addition to all arguments above, the following attributes are exported: * `dead_letter_config` - Configure the function's *dead letter queue*. * `description` - Description of what your Lambda Function does. * `environment` - The Lambda environment's configuration settings. +* `ephemeral_storage` - The amount of Ephemeral storage(`/tmp`) allocated for the Lambda Function. * `file_system_config` - The connection settings for an Amazon EFS file system. * `handler` - The function entrypoint in your code. * `image_uri` - The URI of the container image. diff --git a/website/docs/r/lambda_function.html.markdown b/website/docs/r/lambda_function.html.markdown index 7cbb5ab21472..50a19a45fae4 100644 --- a/website/docs/r/lambda_function.html.markdown +++ b/website/docs/r/lambda_function.html.markdown @@ -79,6 +79,44 @@ resource "aws_lambda_function" "example" { } ``` +### Lambda Ephemeral Storage + +Lambda Function Ephemeral Storage(`/tmp`) allows you to configure the storage upto `10` GB. The default value set to `512` MB. + +```terraform +resource "aws_iam_role" "iam_for_lambda" { + name = "iam_for_lambda" + + assume_role_policy = < Date: Fri, 25 Mar 2022 11:01:52 +0000 Subject: [PATCH 03/12] Lambda ephemeral storage html format update --- .changelog/23873.txt | 0 website/docs/r/lambda_function.html.markdown | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .changelog/23873.txt diff --git a/.changelog/23873.txt b/.changelog/23873.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/website/docs/r/lambda_function.html.markdown b/website/docs/r/lambda_function.html.markdown index 50a19a45fae4..21688615f018 100644 --- a/website/docs/r/lambda_function.html.markdown +++ b/website/docs/r/lambda_function.html.markdown @@ -109,7 +109,7 @@ resource "aws_lambda_function" "test_lambda" { function_name = "lambda_function_name" role = aws_iam_role.iam_for_lambda.arn handler = "index.test" - runtime = "nodejs14.x" + runtime = "nodejs14.x" ephemeral_storage { size = 10240 # Min 512 MB and the Max 10240 MB From 09465895ed5867b73d37c067e5c7512e18e3b008 Mon Sep 17 00:00:00 2001 From: Vara Bonthu Date: Fri, 25 Mar 2022 11:02:42 +0000 Subject: [PATCH 04/12] changelog for lambda ephemeral storage feature --- .changelog/23873.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.changelog/23873.txt b/.changelog/23873.txt index e69de29bb2d1..25d809a971d7 100644 --- a/.changelog/23873.txt +++ b/.changelog/23873.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/lambda: Add `ephemeral_storage` attribute +``` \ No newline at end of file From 0c2a2904eeeb72857b64cf12d64841bda44b49e2 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 08:25:47 -0400 Subject: [PATCH 05/12] Corrections after merge. --- internal/service/lambda/function.go | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/internal/service/lambda/function.go b/internal/service/lambda/function.go index 51d2e4832654..b9a174c7e321 100644 --- a/internal/service/lambda/function.go +++ b/internal/service/lambda/function.go @@ -223,24 +223,6 @@ func ResourceFunction() *schema.Resource { Optional: true, ValidateFunc: validation.StringInSlice(lambda.Runtime_Values(), false), }, - "ephemeral_storage": { - Type: schema.TypeList, - MaxItems: 1, - Optional: true, - Computed: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "size": { - Type: schema.TypeInt, - Required: true, - Default: 512, - ValidateFunc: validation.All( - validation.IntBetween(512, 10240), - ), - }, - }, - }, - }, "timeout": { Type: schema.TypeInt, Optional: true, @@ -549,14 +531,6 @@ func resourceFunctionCreate(d *schema.ResourceData, meta interface{}) error { } } - // if v, ok := d.GetOk("ephemeral_storage"); ok { - // ephemeralStorageConfig := v.([]interface{}) - // ephemeralStorage := ephemeralStorageConfig[0].(map[string]interface{}) - // params.EphemeralStorage = &lambda.EphemeralStorage{ - // Size: aws.Int64(int64(ephemeralStorage["size"].(int))), - // } - // } - if v, ok := d.GetOk("environment"); ok { environments := v.([]interface{}) environment, ok := environments[0].(map[string]interface{}) From f5d6a3b34af6354baec70bc9151c6b8898021f30 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 08:27:53 -0400 Subject: [PATCH 06/12] Update 23873.txt --- .changelog/23873.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changelog/23873.txt b/.changelog/23873.txt index 25d809a971d7..bf972a914fa6 100644 --- a/.changelog/23873.txt +++ b/.changelog/23873.txt @@ -1,3 +1,3 @@ ```release-note:enhancement -resource/lambda: Add `ephemeral_storage` attribute -``` \ No newline at end of file +resource/lambda: Add `ephemeral_storage` argument +``` From 5d04dd5cf256496ead421be6b6324d5563a048d8 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 08:28:56 -0400 Subject: [PATCH 07/12] Update 23873.txt --- .changelog/23873.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.changelog/23873.txt b/.changelog/23873.txt index bf972a914fa6..28066cf0f82b 100644 --- a/.changelog/23873.txt +++ b/.changelog/23873.txt @@ -1,3 +1,7 @@ ```release-note:enhancement -resource/lambda: Add `ephemeral_storage` argument +resource/aws_lambda_function: Add `ephemeral_storage` argument +``` + +```release-note:enhancement +data-source/aws_lambda_function: Add `ephemeral_storage` attribute ``` From 362ea034c4cfea3f4006fbbafd695f012b88dd04 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 11:01:38 -0400 Subject: [PATCH 08/12] Test default/pre-existing 'ephemeral_storage' values. --- internal/service/lambda/function_test.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/internal/service/lambda/function_test.go b/internal/service/lambda/function_test.go index e006226795c3..b8eb91412c54 100644 --- a/internal/service/lambda/function_test.go +++ b/internal/service/lambda/function_test.go @@ -51,16 +51,19 @@ func TestAccLambdaFunction_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccBasicConfig(funcName, policyName, roleName, sgName), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckFunctionExists(resourceName, funcName, &conf), + testAccCheckFunctionInvokeARN(resourceName, &conf), testAccCheckFunctionName(&conf, funcName), + resource.TestCheckResourceAttr(resourceName, "architectures.#", "1"), + resource.TestCheckResourceAttr(resourceName, "architectures.0", lambda.ArchitectureX8664), acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "lambda", fmt.Sprintf("function:%s", funcName)), - testAccCheckFunctionInvokeARN(resourceName, &conf), - resource.TestCheckResourceAttr(resourceName, "reserved_concurrent_executions", "-1"), - resource.TestCheckResourceAttr(resourceName, "version", tflambda.FunctionVersionLatest), + resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.0.size", "512"), resource.TestCheckResourceAttr(resourceName, "package_type", lambda.PackageTypeZip), - resource.TestCheckResourceAttr(resourceName, "architectures.0", lambda.ArchitectureX8664), acctest.CheckResourceAttrRegionalARN(resourceName, "qualified_arn", "lambda", fmt.Sprintf("function:%s:%s", funcName, tflambda.FunctionVersionLatest)), + resource.TestCheckResourceAttr(resourceName, "reserved_concurrent_executions", "-1"), + resource.TestCheckResourceAttr(resourceName, "version", tflambda.FunctionVersionLatest), ), }, { @@ -1216,9 +1219,7 @@ func TestAccLambdaFunction_ephemeralStorage(t *testing.T) { Config: testAccWithEphemeralStorage(funcName, policyName, roleName, sgName), Check: resource.ComposeTestCheckFunc( testAccCheckFunctionExists(resourceName, funcName, &conf), - testAccCheckFunctionName(&conf, funcName), - acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "lambda", fmt.Sprintf("function:%s", funcName)), - testAccCheckFunctionInvokeARN(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.#", "1"), resource.TestCheckResourceAttr(resourceName, "ephemeral_storage.0.size", "1024"), ), }, From 1cf78223efd9713ef70b57b3e486f28f71001192 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 11:03:07 -0400 Subject: [PATCH 09/12] 'ephemeral_storage' must be Computed as all existing Lambda Functions have a value of 512. --- internal/service/lambda/function.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/service/lambda/function.go b/internal/service/lambda/function.go index b9a174c7e321..b9fbc677f62c 100644 --- a/internal/service/lambda/function.go +++ b/internal/service/lambda/function.go @@ -150,12 +150,13 @@ func ResourceFunction() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "size": { Type: schema.TypeInt, Optional: true, - Default: 512, + Computed: true, ValidateFunc: validation.IntBetween(512, 10240), }, }, From 74d4e405ed833e5f67d63d580c3e972aa618226b Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 11:21:02 -0400 Subject: [PATCH 10/12] Fix terrafmt errors in documentation --- website/docs/r/lambda_function.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/lambda_function.html.markdown b/website/docs/r/lambda_function.html.markdown index 21688615f018..ac2fa9c2b7c1 100644 --- a/website/docs/r/lambda_function.html.markdown +++ b/website/docs/r/lambda_function.html.markdown @@ -112,7 +112,7 @@ resource "aws_lambda_function" "test_lambda" { runtime = "nodejs14.x" ephemeral_storage { - size = 10240 # Min 512 MB and the Max 10240 MB + size = 10240 # Min 512 MB and the Max 10240 MB } } ``` From 29766c95c6b6df2a2b3c4392fdeab55651d4baff Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 12:53:06 -0400 Subject: [PATCH 11/12] d/aws_lambda_function: Tidy up acceptance tests. --- .../lambda/function_data_source_test.go | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/internal/service/lambda/function_data_source_test.go b/internal/service/lambda/function_data_source_test.go index 40fc45c108d8..5f4ef7248b11 100644 --- a/internal/service/lambda/function_data_source_test.go +++ b/internal/service/lambda/function_data_source_test.go @@ -29,8 +29,11 @@ func TestAccLambdaFunctionDataSource_basic(t *testing.T) { Config: testAccFunctionBasicDataSourceConfig(rName), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrPair(dataSourceName, "arn", resourceName, "arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "code_signing_config_arn", resourceName, "code_signing_config_arn"), resource.TestCheckResourceAttrPair(dataSourceName, "dead_letter_config.#", resourceName, "dead_letter_config.#"), resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), + resource.TestCheckResourceAttrPair(dataSourceName, "ephemeral_storage.#", resourceName, "ephemeral_storage.#"), + resource.TestCheckResourceAttrPair(dataSourceName, "ephemeral_storage.0.size", resourceName, "ephemeral_storage.0.size"), resource.TestCheckResourceAttrPair(dataSourceName, "function_name", resourceName, "function_name"), resource.TestCheckResourceAttrPair(dataSourceName, "handler", resourceName, "handler"), resource.TestCheckResourceAttrPair(dataSourceName, "invoke_arn", resourceName, "invoke_arn"), @@ -40,6 +43,8 @@ func TestAccLambdaFunctionDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "reserved_concurrent_executions", resourceName, "reserved_concurrent_executions"), resource.TestCheckResourceAttrPair(dataSourceName, "role", resourceName, "role"), resource.TestCheckResourceAttrPair(dataSourceName, "runtime", resourceName, "runtime"), + resource.TestCheckResourceAttrPair(dataSourceName, "signing_job_arn", resourceName, "signing_job_arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "signing_profile_version_arn", resourceName, "signing_profile_version_arn"), resource.TestCheckResourceAttrPair(dataSourceName, "source_code_hash", resourceName, "source_code_hash"), resource.TestCheckResourceAttrPair(dataSourceName, "source_code_size", resourceName, "source_code_size"), resource.TestCheckResourceAttrPair(dataSourceName, "tags.%", resourceName, "tags.%"), @@ -47,9 +52,6 @@ func TestAccLambdaFunctionDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "tracing_config.#", resourceName, "tracing_config.#"), resource.TestCheckResourceAttrPair(dataSourceName, "tracing_config.0.mode", resourceName, "tracing_config.0.mode"), resource.TestCheckResourceAttrPair(dataSourceName, "version", resourceName, "version"), - resource.TestCheckResourceAttrPair(dataSourceName, "signing_profile_version_arn", resourceName, "signing_profile_version_arn"), - resource.TestCheckResourceAttrPair(dataSourceName, "signing_job_arn", resourceName, "signing_job_arn"), - resource.TestCheckResourceAttrPair(dataSourceName, "code_signing_config_arn", resourceName, "code_signing_config_arn"), ), }, }, @@ -267,6 +269,12 @@ func TestAccLambdaFunctionDataSource_ephemeralStorage(t *testing.T) { }) } +func testAccImagePreCheck(t *testing.T) { + if os.Getenv("AWS_LAMBDA_IMAGE_LATEST_ID") == "" { + t.Skip("AWS_LAMBDA_IMAGE_LATEST_ID env var must be set for Lambda Function Data Source Image Support acceptance tests.") + } +} + func testAccFunctionBaseDataSourceConfig(rName string) string { return fmt.Sprintf(` resource "aws_iam_role" "lambda" { @@ -327,7 +335,7 @@ EOF } func testAccFunctionBasicDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q @@ -339,11 +347,11 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } func testAccFunctionVersionDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q @@ -357,11 +365,11 @@ data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name qualifier = 1 } -`, rName) +`, rName)) } func testAccFunctionAliasDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q @@ -381,11 +389,11 @@ data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name qualifier = aws_lambda_alias.test.name } -`, rName) +`, rName)) } func testAccFunctionLayersDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_layer_version" "test" { filename = "test-fixtures/lambdatest.zip" layer_name = %[1]q @@ -404,11 +412,11 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } func testAccFunctionVPCDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_vpc" "test" { cidr_block = "10.0.0.0/16" @@ -462,11 +470,11 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } func testAccFunctionEnvironmentDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q @@ -485,11 +493,11 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } func testAccFunctionFileSystemsDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_vpc" "test" { cidr_block = "10.0.0.0/16" @@ -580,13 +588,11 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } func testAccFunctionImageDataSourceConfig(rName, imageID string) string { - return acctest.ConfigCompose( - testAccFunctionBaseDataSourceConfig(rName), - fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { image_uri = %q function_name = %q @@ -606,7 +612,7 @@ data "aws_lambda_function" "test" { } func testAccFunctionArchitecturesDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q @@ -619,23 +625,18 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) -} - -func testAccImagePreCheck(t *testing.T) { - if os.Getenv("AWS_LAMBDA_IMAGE_LATEST_ID") == "" { - t.Skip("AWS_LAMBDA_IMAGE_LATEST_ID env var must be set for Lambda Function Data Source Image Support acceptance tests.") - } +`, rName)) } func testAccFunctionEphemeralStorageDataSourceConfig(rName string) string { - return testAccFunctionBaseDataSourceConfig(rName) + fmt.Sprintf(` + return acctest.ConfigCompose(testAccFunctionBaseDataSourceConfig(rName), fmt.Sprintf(` resource "aws_lambda_function" "test" { filename = "test-fixtures/lambdatest.zip" function_name = %[1]q handler = "exports.example" role = aws_iam_role.lambda.arn runtime = "nodejs12.x" + ephemeral_storage { size = 1024 } @@ -644,5 +645,5 @@ resource "aws_lambda_function" "test" { data "aws_lambda_function" "test" { function_name = aws_lambda_function.test.function_name } -`, rName) +`, rName)) } From 5370bd5662ba7b671965d7a88e065544c1b1c6f6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Mar 2022 14:03:48 -0400 Subject: [PATCH 12/12] Remove duplicate check for 'ephemeral_storage' change. --- internal/service/lambda/function.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/lambda/function.go b/internal/service/lambda/function.go index b9fbc677f62c..2484eec3eda6 100644 --- a/internal/service/lambda/function.go +++ b/internal/service/lambda/function.go @@ -394,7 +394,6 @@ func hasConfigChanges(d verify.ResourceDiffer) bool { d.HasChange("layers") || d.HasChange("dead_letter_config") || d.HasChange("tracing_config") || - d.HasChange("ephemeral_storage") || d.HasChange("vpc_config.0.security_group_ids") || d.HasChange("vpc_config.0.subnet_ids") || d.HasChange("runtime") ||