/// Update an existing Lambda function.
///
///
The name of the Lambda function to update.
///
The bucket where the zip file containing
/// the Lambda function code is stored.
///
The key name of the source code file.
///
Async Task.
public async Task UpdateFunctionCodeAsync(
string functionName,
string bucketName,
string key)
var functionCodeRequest = new UpdateFunctionCodeRequest
FunctionName = functionName,
Publish = true,
S3Bucket = bucketName,
S3Key = key,
var response = await _lambdaService.UpdateFunctionCodeAsync(functionCodeRequest);
Console.WriteLine($"The Function was last modified at
{
response.LastModified}.");
Aws::Client::ClientConfiguration clientConfig;
// Optional: Set to the AWS Region in which the bucket was created (overrides config file).
// clientConfig.region = "us-east-1";
Aws::Lambda::LambdaClient client(clientConfig);
Aws::Lambda::Model::UpdateFunctionCodeRequest request;
request.SetFunctionName(LAMBDA_NAME);
std::ifstream ifstream(CALCULATOR_LAMBDA_CODE.c_str(),
std::ios_base::in | std::ios_base::binary);
if (!ifstream.is_open()) {
std::cerr << "Error opening file " << INCREMENT_LAMBDA_CODE << "." << std::endl;
#if USE_CPP_LAMBDA_FUNCTION
std::cerr
<< "The cpp Lambda function must be built following the instructions in the cpp_lambda/README.md file. "
<< std::endl;
#endif
deleteLambdaFunction(client);
deleteIamRole(clientConfig);
return false;
Aws::StringStream buffer;
buffer << ifstream.rdbuf();
request.SetZipFile(
Aws::Utils::ByteBuffer((unsigned char *) buffer.str().c_str(),
buffer.str().length()));
request.SetPublish(true);
Aws::Lambda::Model::UpdateFunctionCodeOutcome outcome = client.UpdateFunctionCode(
request);
if (outcome.IsSuccess()) {
std::cout << "The lambda code was successfully updated." << std::endl;
else {
std::cerr << "Error with Lambda::UpdateFunctionCode. "
<< outcome.GetError().GetMessage()
<< std::endl;
"FunctionName": "my-function",
"LastModified": "2019-09-26T20:28:40.438+0000",
"RevisionId": "e52502d4-9320-4688-9cd6-152a6ab7490d",
"MemorySize": 256,
"Version": "$LATEST",
"Role": "arn:aws:iam::123456789012:role/service-role/my-function-role-uy3l9qyq",
"Timeout": 3,
"Runtime": "nodejs10.x",
"TracingConfig": {
"Mode": "PassThrough"
"CodeSha256": "5tT2qgzYUHaqwR716pZ2dpkn/0J1FrzJmlKidWoaCgk=",
"Description": "",
"VpcConfig": {
"SubnetIds": [],
"VpcId": "",
"SecurityGroupIds": []
"CodeSize": 304,
"FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
"Handler": "index.handler"
有关更多信息,请参阅《AWS Lambda 开发人员指南》中的配置 AWS Lambda 函数选项。
// FunctionWrapper encapsulates function actions used in the examples.
// It contains an AWS Lambda service client that is used to perform user actions.
type FunctionWrapper struct {
LambdaClient *lambda.Client
// UpdateFunctionCode updates the code for the Lambda function specified by functionName.
// The existing code for the Lambda function is entirely replaced by the code in the
// zipPackage buffer. After the update action is called, a lambda.FunctionUpdatedV2Waiter
// is used to wait until the update is successful.
func (wrapper FunctionWrapper) UpdateFunctionCode(functionName string, zipPackage *bytes.Buffer) types.State {
var state types.State
_, err := wrapper.LambdaClient.UpdateFunctionCode(context.TODO(), &lambda.UpdateFunctionCodeInput{
FunctionName: aws.String(functionName), ZipFile: zipPackage.Bytes(),
if err != nil {
log.Panicf("Couldn't update code for function %v. Here's why: %v\n", functionName, err)
} else {
waiter := lambda.NewFunctionUpdatedV2Waiter(wrapper.LambdaClient)
funcOutput, err := waiter.WaitForOutput(context.TODO(), &lambda.GetFunctionInput{
FunctionName: aws.String(functionName)}, 1*time.Minute)
if err != nil {
log.Panicf("Couldn't wait for function %v to be active. Here's why: %v\n", functionName, err)
} else {
state = funcOutput.Configuration.State
return state
const updateFunctionCode = async (funcName, newFunc) => {
const client = new LambdaClient({});
const code = await readFile(`${dirname}../functions/${newFunc}.zip`);
const command = new UpdateFunctionCodeCommand({
ZipFile: code,
FunctionName: funcName,
Architectures: [Architecture.arm64],
Handler: "index.handler", // Required when sending a .zip file
PackageType: PackageType.Zip, // Required when sending a .zip file
Runtime: Runtime.nodejs16x, // Required when sending a .zip file
return client.send(command);
public function updateFunctionCode($functionName, $s3Bucket, $s3Key)
return $this->lambdaClient->updateFunctionCode([
'FunctionName' => $functionName,
'S3Bucket' => $s3Bucket,
'S3Key' => $s3Key,
class LambdaWrapper:
def __init__(self, lambda_client, iam_resource):
self.lambda_client = lambda_client
self.iam_resource = iam_resource
def update_function_code(self, function_name, deployment_package):
Updates the code for a Lambda function by submitting a .zip archive that contains
the code for the function.
:param function_name: The name of the function to update.
:param deployment_package: The function code to update, packaged as bytes in
.zip format.
:return: Data about the update, including the status.
response = self.lambda_client.update_function_code(
FunctionName=function_name, ZipFile=deployment_package
except ClientError as err:
logger.error(
"Couldn't update function %s. Here's why: %s: %s",
function_name,
err.response["Error"]["Code"],
err.response["Error"]["Message"],
raise
else:
return response
@lambda_client = Aws::Lambda::Client.new
@logger = Logger.new($stdout)
@logger.level = Logger::WARN
# Updates the code for a Lambda function by submitting a .zip archive that contains
# the code for the function.
# @param function_name: The name of the function to update.
# @param deployment_package: The function code to update, packaged as bytes in
# .zip format.
# @return: Data about the update, including the status.
def update_function_code(function_name, deployment_package)
@lambda_client.update_function_code(
function_name: function_name,
zip_file: deployment_package
@lambda_client.wait_until(:function_updated_v2, { function_name: function_name}) do |w|
w.max_attempts = 5
w.delay = 5
rescue Aws::Lambda::Errors::ServiceException => e
@logger.error("There was an error updating function code for: #{function_name}:\n #{e.message}")
rescue Aws::Waiters::Errors::WaiterFailed => e
@logger.error("Failed waiting for #{function_name} to update:\n #{e.message}")
/** Given a Path to a zip file, update the function's code and wait for the update to finish. */
pub async fn update_function_code(
&self,
zip_file: PathBuf,
key: String,
) -> Result<UpdateFunctionCodeOutput, anyhow::Error> {
let function_code = self.prepare_function(zip_file, Some(key)).await?;
info!("Updating code for {}", self.lambda_name);
let update = self
.lambda_client
.update_function_code()
.function_name(self.lambda_name.clone())
.s3_bucket(self.bucket.clone())
.s3_key(function_code.s3_key().unwrap().to_string())
.send()
.await
.map_err(anyhow::Error::from)?;
self.wait_for_function_ready().await?;
Ok(update)
* Upload function code from a path to a zip file.
* The zip file must have an AL2 Linux-compatible binary called `bootstrap`.
* The easiest way to create such a zip is to use `cargo lambda build --output-format Zip`.
async fn prepare_function(
&self,
zip_file: PathBuf,
key: Option<String>,
) -> Result<FunctionCode, anyhow::Error> {
let body = ByteStream::from_path(zip_file).await?;
let key = key.unwrap_or_else(|| format!("{}_code", self.lambda_name));
info!("Uploading function code to s3://{}/{}", self.bucket, key);
let _ = self
.s3_client
.put_object()
.bucket(self.bucket.clone())
.key(key.clone())
.body(body)
.send()
.await?;
Ok(FunctionCode::builder()
.s3_bucket(self.bucket.clone())
.s3_key(key)
.build())
oo_result = lo_lmd->updatefunctioncode( " oo_result is returned for testing purposes. "
iv_functionname = iv_function_name
iv_zipfile = io_zip_file
MESSAGE 'Lambda function code updated.' TYPE 'I'.
CATCH /aws1/cx_lmdcodesigningcfgno00.
MESSAGE 'Code signing configuration does not exist.' TYPE 'E'.
CATCH /aws1/cx_lmdcodestorageexcdex.
MESSAGE 'Maximum total code size per account exceeded.' TYPE 'E'.
CATCH /aws1/cx_lmdcodeverification00.
MESSAGE 'Code signature failed one or more validation checks for signature mismatch or expiration.' TYPE 'E'.
CATCH /aws1/cx_lmdinvalidcodesigex.
MESSAGE 'Code signature failed the integrity check.' TYPE 'E'.
CATCH /aws1/cx_lmdinvparamvalueex.
MESSAGE 'The request contains a non-valid parameter.' TYPE 'E'.
CATCH /aws1/cx_lmdresourceconflictex.
MESSAGE 'Resource already exists or another operation is in progress.' TYPE 'E'.
CATCH /aws1/cx_lmdresourcenotfoundex.
MESSAGE 'The requested resource does not exist.' TYPE 'E'.
CATCH /aws1/cx_lmdserviceexception.
MESSAGE 'An internal problem was encountered by the AWS Lambda service.' TYPE 'E'.
CATCH /aws1/cx_lmdtoomanyrequestsex.
MESSAGE 'The maximum request throughput was reached.' TYPE 'E'.
ENDTRY.