gpt4 book ai didi

amazon-web-services - 通过 Cloudformation 使用函数 URL 部署 AWS Lambda

转载 作者:行者123 更新时间:2023-12-05 04:31:41 26 4
gpt4 key购买 nike

几天以来,AWS Lambdas can be exposed as web services directly without an API Gateway .

通过 UI 控制台设置时效果很好,但我似乎无法使用 Cloudformation 完成它,因为资源策略未附加 AuthType: NONE 。如果没有政策,我会得到 "message": "Forbidden"当尝试通过函数 url 访问 Lambda 时,来自 AWS。

我的 Lambda 如下:

exports.handler = async event => {
return {
statusCode: 200,
body: JSON.stringify("Hello World")
}
}

这是 CFN 模板:

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
stackName:
Type: String
lambdaFile:
Type: String
lambdaBucket:
Type: String

Resources:
lambdaRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Action:
- "sts:AssumeRole"
Effect: "Allow"
Principal:
Service:
- "lambda.amazonaws.com"
Policies:
- PolicyDocument:
Version: "2012-10-17"
Statement:
- Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Effect: "Allow"
Resource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${stackName}:*"
PolicyName: "lambda"

runtimeLambdaFunction:
Type: "AWS::Lambda::Function"
Properties:
Code:
S3Bucket: !Ref lambdaBucket
S3Key: !Ref lambdaFile
Environment:
Variables:
NODE_ENV: production
FunctionName: !Sub "${stackName}-runtime"
Handler: runtime.handler
MemorySize: 128
Role: !GetAtt lambdaRole.Arn
Runtime: "nodejs14.x"
Timeout: 5

lambdaLogGroup:
Type: "AWS::Logs::LogGroup"
Properties:
LogGroupName: !Sub "/aws/${stackName}"
RetentionInDays: 30

runtimeLambdaUrl:
Type: "AWS::Lambda::Url"
Properties:
AuthType: NONE
TargetFunctionArn: !Ref runtimeLambdaFunction

Outputs:
runtimeLambdaUrl:
Value: !GetAtt runtimeLambdaUrl.FunctionUrl

有趣的是,我可以通过 UI 控制台添加策略,然后它就可以工作。

这是 CFN 部署后函数 URL 的初始配置屏幕:

enter image description here

这是我按下“编辑”按钮时看到的内容:

enter image description here

点击“保存”后,我得到以下信息(注意蓝色框):

enter image description here

此外,当我再次进入“编辑”模式时,我现在看到以下内容:

enter image description here

之后,可以通过其 URL 访问该函数。

我尝试将策略添加到我的 CFN 堆栈中,或者独立为 AWS::IAM::Policy ,但它不是基于资源的策略,也不是 lambdaRole 上的附加操作。但无论哪种情况,我都无法添加 Principal并且该政策没有效果。

有人知道如何使用函数 URL 为 Lambda 进行纯 Clouformation 部署吗?或者这是 Cloudformation 和/或 Lambda 中的错误?

最佳答案

您的模板丢失 AWS::Lambda::Permission ,因此它不起作用。您已经根据 AWS 控制台检查知道了应具有哪些权限,因此您必须使用 AWS::Lambda::Permission 重新创建这些权限。这允许您指定 FunctionUrlAuthType .

关于amazon-web-services - 通过 Cloudformation 使用函数 URL 部署 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71806376/

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