更新 AWS::Lambda::Function 资源 - AWS CloudFormation

更新 AWS::Lambda::Function 资源

当生成的模板包含 AWS::Lambda::Function 资源时,会生成警告,指明 Code/S3BucketCode/S3Key 属性将标识为 MUTUALLY_EXCLUSIVE_PROPERTIES。此外,Code/S3ObjectVersion 属性还会收到 UNSUPPORTED_PROPERTIES 警告。您可能会注意到,生成的模板中缺少 Code/ImageUriCode/ZipFile 属性。这是因为这些属性是互斥的只写属性。任何 AWS::Lambda::Function 资源都只能具有以下一组独占属性之一:

  • Code/S3BucketCode/S3Key 属性,以及可选的 Code/S3ObjectVersion 属性

  • Code/ImageUri 属性

  • Code/ZipFile 属性

IaC 生成器无法确定使用了哪组独占只写属性来创建或更新资源。因此,IaC 生成器在生成的模板中仅包含第一组属性。为了在生成的模板中包含 AWS::Lambda::Function 资源,必须下载生成的模板并使用正确的 Lambda 代码信息进行更新。

如果您将 Lambda 代码存储在 Amazon S3 桶中并且不使用 S3ObjectVersion 属性,则无需任何修改即可导入生成的模板。在导入操作期间,IaC 生成器将要求您提供 Amazon S3 桶和密钥作为模板参数。

如果将 Lambda 代码存储为 Amazon ECR 存储库,则您可以按照以下说明更新您的模板:
  1. 下载生成的模板。

  2. 从生成的模板中删除 Code/S3BucketCode/S3Key 属性的属性和相应参数。

  3. 将生成的模板中已删除的属性替换为 Code/ImageUri 属性,指定 Amazon ECR 存储库的 URL。

  4. 在 IaC 生成器控制台中打开生成的模板,然后选择导入编辑的模板按钮。

如果您将 Lambda 代码存储为 zip 文件,则可以按照以下说明更新您的模板:
  1. 下载生成的模板。

  2. 从生成的模板中删除 Code/S3BucketCode/S3Key 属性的属性和相应参数。

  3. 将生成的模板中已删除的属性替换为 Code/ZipFile 属性。

  4. 在 IaC 生成器控制台中打开生成的模板,然后选择导入编辑的模板按钮。

如果没有 Lambda 代码的副本,则您可以按照以下说明更新您的模板:
  1. 使用 AWS Lambda GetFunction API 操作(例如,通过使用 aws lambda get-function AWS CLI 命令)。

  2. 在响应中,如果代码位于 Amazon S3 桶中,则 RepositoryType 参数为 S3;如果代码位于 Amazon ECR 存储库中,则该参数为 ECR

  3. 在响应中,Location 参数包含一个预签名 URL,您可以用其下载部署包 10 分钟。下载代码。

  4. 将代码上传到 Amazon S3 桶。

  5. 使用生成的模板运行导入操作,并提供桶名称和密钥作为参数值。