lxg*_*lxg 6 amazon-web-services aws-cloudformation aws-lambda
几天以来,AWS Lambda 可以直接作为 Web 服务公开,无需 API 网关。
\n通过 UI 控制台设置时效果很好,但我似乎可以\xe2\x80\x99t 使用 Cloudformation 完成它,因为资源策略未附加AuthType: NONE. 如果没有该策略,当我"message": "Forbidden"尝试通过函数 url 访问 Lambda 时,我会从 AWS 获取信息。
我的 Lambda 如下:
\nexports.handler = async event => {\n return {\n statusCode: 200,\n body: JSON.stringify("Hello World")\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这里\xe2\x80\x99s是CFN模板:
\nAWSTemplateFormatVersion: "2010-09-09"\n\nParameters:\n stackName:\n Type: String\n lambdaFile:\n Type: String\n lambdaBucket:\n Type: String\n\nResources:\n lambdaRole:\n Type: "AWS::IAM::Role"\n Properties:\n AssumeRolePolicyDocument:\n Version: "2012-10-17"\n Statement:\n - Action:\n - "sts:AssumeRole"\n Effect: "Allow"\n Principal:\n Service:\n - "lambda.amazonaws.com"\n Policies:\n - PolicyDocument:\n Version: "2012-10-17"\n Statement:\n - Action:\n - "logs:CreateLogGroup"\n - "logs:CreateLogStream"\n - "logs:PutLogEvents"\n Effect: "Allow"\n Resource:\n - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${stackName}:*"\n PolicyName: "lambda"\n\n runtimeLambdaFunction:\n Type: "AWS::Lambda::Function"\n Properties:\n Code:\n S3Bucket: !Ref lambdaBucket\n S3Key: !Ref lambdaFile\n Environment:\n Variables:\n NODE_ENV: production\n FunctionName: !Sub "${stackName}-runtime"\n Handler: runtime.handler\n MemorySize: 128\n Role: !GetAtt lambdaRole.Arn\n Runtime: "nodejs14.x"\n Timeout: 5\n\n lambdaLogGroup:\n Type: "AWS::Logs::LogGroup"\n Properties:\n LogGroupName: !Sub "/aws/${stackName}"\n RetentionInDays: 30\n\n runtimeLambdaUrl:\n Type: "AWS::Lambda::Url"\n Properties:\n AuthType: NONE\n TargetFunctionArn: !Ref runtimeLambdaFunction\n\nOutputs:\n runtimeLambdaUrl:\n Value: !GetAtt runtimeLambdaUrl.FunctionUrl\n\nRun Code Online (Sandbox Code Playgroud)\n有趣的是,我可以通过 UI 控制台添加策略,然后它就可以工作了。
\n这里\xe2\x80\x99是CFN部署后函数URL的初始配置屏幕:
\n\n这是我按下 \xe2\x80\x9cEdit\xe2\x80\x9d 按钮时看到的内容:
\n\n单击 \xe2\x80\x9cSave\xe2\x80\x9d 后,我得到以下内容(注意蓝色框):
\n\n另外,当我再次进入 \xe2\x80\x9cEdit\xe2\x80\x9d 模式时,我现在看到以下内容:
\n\n之后,可以通过其 URL 访问该函数。
\n我尝试将该策略添加到我的 CFN 堆栈中,要么独立为AWS::IAM::Policy,但它不是基于资源的策略,也不是作为lambdaRole. 但无论哪种情况,我都可以添加 aPrincipal并且该策略不会产生效果。
有谁知道如何使用函数 URL 为 Lambda 进行纯 Clouformation 部署?或者这是 Cloudformation 和/或 Lambda 中的错误?
\n您的模板缺少AWS::Lambda::Permission,因此它不起作用。您已经根据 AWS 控制台检查知道了应具有哪些权限,因此您必须使用AWS::Lambda::Permission. 这允许您指定FunctionUrlAuthType。
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |