Adding support for Lambda function updates
This commit is contained in:
parent
2dc1c022d3
commit
4aeb5bb8e9
|
@ -58,18 +58,15 @@ func resourceAwsLambdaFunction() *schema.Resource {
|
||||||
"handler": &schema.Schema{
|
"handler": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true, // TODO make this editable
|
|
||||||
},
|
},
|
||||||
"memory_size": &schema.Schema{
|
"memory_size": &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: 128,
|
Default: 128,
|
||||||
ForceNew: true, // TODO make this editable
|
|
||||||
},
|
},
|
||||||
"role": &schema.Schema{
|
"role": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true, // TODO make this editable
|
|
||||||
},
|
},
|
||||||
"runtime": &schema.Schema{
|
"runtime": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
|
@ -81,7 +78,6 @@ func resourceAwsLambdaFunction() *schema.Resource {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: 3,
|
Default: 3,
|
||||||
ForceNew: true, // TODO make this editable
|
|
||||||
},
|
},
|
||||||
"vpc_config": &schema.Schema{
|
"vpc_config": &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
|
@ -135,15 +131,11 @@ func resourceAwsLambdaFunctionCreate(d *schema.ResourceData, meta interface{}) e
|
||||||
|
|
||||||
var functionCode *lambda.FunctionCode
|
var functionCode *lambda.FunctionCode
|
||||||
if v, ok := d.GetOk("filename"); ok {
|
if v, ok := d.GetOk("filename"); ok {
|
||||||
filename, err := homedir.Expand(v.(string))
|
zipfile, shaSum, err := loadLocalZipFile(v.(string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
zipfile, err := ioutil.ReadFile(filename)
|
d.Set("source_code_hash", shaSum)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
d.Set("source_code_hash", sha256.Sum256(zipfile))
|
|
||||||
functionCode = &lambda.FunctionCode{
|
functionCode = &lambda.FunctionCode{
|
||||||
ZipFile: zipfile,
|
ZipFile: zipfile,
|
||||||
}
|
}
|
||||||
|
@ -284,7 +276,102 @@ func resourceAwsLambdaFunctionDelete(d *schema.ResourceData, meta interface{}) e
|
||||||
// resourceAwsLambdaFunctionUpdate maps to:
|
// resourceAwsLambdaFunctionUpdate maps to:
|
||||||
// UpdateFunctionCode in the API / SDK
|
// UpdateFunctionCode in the API / SDK
|
||||||
func resourceAwsLambdaFunctionUpdate(d *schema.ResourceData, meta interface{}) error {
|
func resourceAwsLambdaFunctionUpdate(d *schema.ResourceData, meta interface{}) error {
|
||||||
return nil
|
conn := meta.(*AWSClient).lambdaconn
|
||||||
|
|
||||||
|
d.Partial(true)
|
||||||
|
|
||||||
|
codeReq := &lambda.UpdateFunctionCodeInput{
|
||||||
|
FunctionName: aws.String(d.Id()),
|
||||||
|
}
|
||||||
|
|
||||||
|
codeUpdate := false
|
||||||
|
if sourceHash, ok := d.GetOk("source_code_hash"); ok {
|
||||||
|
zipfile, shaSum, err := loadLocalZipFile(d.Get("filename").(string))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if sourceHash != shaSum {
|
||||||
|
d.SetPartial("filename")
|
||||||
|
d.SetPartial("source_code_hash")
|
||||||
|
}
|
||||||
|
codeReq.ZipFile = zipfile
|
||||||
|
codeUpdate = true
|
||||||
|
}
|
||||||
|
if d.HasChange("s3_bucket") || d.HasChange("s3_key") || d.HasChange("s3_object_version") {
|
||||||
|
codeReq.S3Bucket = aws.String(d.Get("s3_bucket").(string))
|
||||||
|
codeReq.S3Key = aws.String(d.Get("s3_key").(string))
|
||||||
|
codeReq.S3ObjectVersion = aws.String(d.Get("s3_object_version").(string))
|
||||||
|
codeUpdate = true
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[DEBUG] Send Update Lambda Function Code request: %#v", codeReq)
|
||||||
|
if codeUpdate {
|
||||||
|
_, err := conn.UpdateFunctionCode(codeReq)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error modifying Lambda Function Code %s: %s", d.Id(), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetPartial("filename")
|
||||||
|
d.SetPartial("source_code_hash")
|
||||||
|
d.SetPartial("s3_bucket")
|
||||||
|
d.SetPartial("s3_key")
|
||||||
|
d.SetPartial("s3_object_version")
|
||||||
|
}
|
||||||
|
|
||||||
|
configReq := &lambda.UpdateFunctionConfigurationInput{
|
||||||
|
FunctionName: aws.String(d.Id()),
|
||||||
|
}
|
||||||
|
|
||||||
|
configUpdate := false
|
||||||
|
if d.HasChange("description") {
|
||||||
|
configReq.Description = aws.String(d.Get("description").(string))
|
||||||
|
configUpdate = true
|
||||||
|
}
|
||||||
|
if d.HasChange("handler") {
|
||||||
|
configReq.Handler = aws.String(d.Get("handler").(string))
|
||||||
|
configUpdate = true
|
||||||
|
}
|
||||||
|
if d.HasChange("memory_size") {
|
||||||
|
configReq.MemorySize = aws.Int64(int64(d.Get("memory_size").(int)))
|
||||||
|
configUpdate = true
|
||||||
|
}
|
||||||
|
if d.HasChange("role") {
|
||||||
|
configReq.Role = aws.String(d.Get("role").(string))
|
||||||
|
configUpdate = true
|
||||||
|
}
|
||||||
|
if d.HasChange("timeout") {
|
||||||
|
configReq.Timeout = aws.Int64(int64(d.Get("timeout").(int)))
|
||||||
|
configUpdate = true
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[DEBUG] Send Update Lambda Function Configuration request: %#v", configReq)
|
||||||
|
if configUpdate {
|
||||||
|
_, err := conn.UpdateFunctionConfiguration(configReq)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error modifying Lambda Function Configuration %s: %s", d.Id(), err)
|
||||||
|
}
|
||||||
|
d.SetPartial("description")
|
||||||
|
d.SetPartial("handler")
|
||||||
|
d.SetPartial("memory_size")
|
||||||
|
d.SetPartial("role")
|
||||||
|
d.SetPartial("timeout")
|
||||||
|
}
|
||||||
|
d.Partial(false)
|
||||||
|
|
||||||
|
return resourceAwsLambdaFunctionRead(d, meta)
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadLocalZipFile(v string) ([]byte, string, error) {
|
||||||
|
filename, err := homedir.Expand(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
zipfile, err := ioutil.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
sum := sha256.Sum256(zipfile)
|
||||||
|
return zipfile, string(sum[:32]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateVPCConfig(v interface{}) (map[string]interface{}, error) {
|
func validateVPCConfig(v interface{}) (map[string]interface{}, error) {
|
||||||
|
|
Loading…
Reference in New Issue