gpt4 book ai didi

amazon-web-services - 基于 lambda 的服务的 CloudFormation 模板,S3Key 不存在

转载 作者:行者123 更新时间:2023-12-03 07:27:18 27 4
gpt4 key购买 nike

我正在尝试为 AWS lambda 服务创建 CloudFormation 模板,但在保存 lambda 代码的 s3 存储桶与调用所述存储桶的 lambda 函数之间遇到了“先有鸡还是先有蛋”的情况。

目的是将我们的 lambda 代码构建到一个 jar 中,该 jar 将托管在 S3 存储桶中,并且我们的 lambda 函数将引用该存储桶。但是,当我运行模板(使用 CLI aws cloudformation create-stack --template-body "file://template.yaml")时,在创建 lambda 函数时遇到以下错误:

CREATE_FAILED GetObject 时发生错误。 S3 错误代码:NoSuchKey。 S3 错误消息:指定的 key 不存在。 (服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求 ID:...;代理:null)

我相信这种情况正在发生,因为 cloudformation 正在同一事务中构建存储桶和 lambda,并且我无法在中间将其阻止以将内容推送到全新的存储桶中。

我不可能是唯一遇到此问题的人,所以我想知道是否有解决此问题的常见做法?如果可能的话,我想将所有配置保留在一个模板文件中,但我提出的唯一解决方案需要将堆栈创建分成多个步骤。 (例如,首先构建存储桶,将我的代码部署到其中,然后创建堆栈的其余部分。)有更好的方法吗?

template.yaml(相关位)

...
myS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${AWS::StackName}"
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
VersioningConfiguration:
Status: Enabled

myLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub "${AWS::StackName}-dec"
Handler: "lambda.Handler"
Role: !GetAtt myLambdaExecutionRole.Arn
Code:
S3Bucket: !Ref myS3Bucket
S3Key: "emy-lambda-fn.jar"
Runtime: "java8"
Timeout: 90
MemorySize: 384
Environment:
Variables:
stackName: !Sub "${AWS::StackName}"
...

最佳答案

I'm coming up with would require splitting the stack creation into multiple steps. [...] Is there a better way to do this?

将模板分成两部分是完成您想要做的事情的最合乎逻辑且最简单的方法。

有一些替代方案可以让您将所有内容保留在一个模板中,但它们更难以实现、管理和简单使用。一种替代方案是开发 custom resources 。该资源将采用 lambda 函数 的形式,在创建存储桶后将调用该函数。 lambda 将等待并检查存储桶中是否存在您的 emy-lambda-fn.jar,当上传 key 时(最多 15 分钟内),该函数将返回,并且您的堆栈创建将继续。这意味着您的 myLambdaFunction 只会在自定义资源返回后创建,以确保 emy-lambda-fn.jar 存在。

关于amazon-web-services - 基于 lambda 的服务的 CloudFormation 模板,S3Key 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64324993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com