gpt4 book ai didi

aws-lambda - AWS SAM - 为有条件创建的资源应用策略模板

转载 作者:行者123 更新时间:2023-12-04 13:52:09 25 4
gpt4 key购买 nike

我有条件地创建了一个 DynamoDb 表:

 MyDynamoTable:
Type: AWS::DynamoDB::Table
Condition: IsDevAccount
这就是 IsDevAccount使用输入参数定义:
Conditions:
IsDevAccount: !Equals [ !Ref Stage, dev ]
现在我正在创建一个 Lambda 函数,它通过环境变量接受表的名称(除其他外)作为输入。这也是有条件地完成的。在函数的代码中,我会检查表名是否被传递(如果不满足条件,则传递空)。如果是这样,我会放一些东西进去。
但是,我不确定如何有条件地将策略模板应用于函数的角色。通常我这样做:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
TableName: !Ref MyDynamoTable
如果由于不满足条件而未创建表(例如:在另一个帐户中),函数的执行角色会发生什么情况?我也可以有条件地应用此策略模板吗?
我不想做的是盲目地为帐户内的所有DynamoDB表授予写权限。

最佳答案

是的,您可以将条件添加到数据库写入策略中,以便仅在满足条件时才允许写入策略。
仅当环境是登台或开发时,您才创建表,您可以在策略上应用条件以检查您的表名,然后应用写入策略。下面的例子

MyDynamoTable:
Type: AWS::DynamoDB::Table
Condition: IsDevAccount

Conditions:
IsDevAccount: !Equals [ !Ref Stage, dev ]

MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
Condition: !Equals [ !Ref MyDynamoTable, "myTableName" ],
TableName: !Ref MyDynamoTable
回复评论更新:
!Ref 返回指定参数或资源的值。我们需要具有环境允许值的参数和条件的 DBtable。
Parameters:
Environment:
Type: String
Default: dev
AllowedValues:
- dev
- stage
- prod

MyDynamoTable:
Description: table name for the db
Type: String
AllowedValues:
- tableOne
- tableTwo
- myTableName

Conditions:
IsDevAccount: !Equals [ !Ref Environment, "dev" ]
TableExists: !Equals [ !Ref MyDynamoTable, "myTableName" ]

MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
Condition: !And [IsDevAccount, TableExists] // Only with TableExists condition, it'll work fine with the added parameters
TableName: !Ref MyDynamoTable
引用:- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html
更新 2:
同意,我研究并确认,无法检查在同一堆栈模板中创建的资源(这就是为什么建议参数)。 条件都是基于参数的 .
但是,如果资源已经在其他堆栈中创建,您可以通过 Resource import 执行此操作。 .我不认为,资源导入将有助于您的要求。
但是,一种解决方法是为 TableExists 设置 bool 参数。条件并可以在运行时通过 AWS CLI 传递值,如下所示,
MyDynamoTable: 
Description: dynamo db table
Type: String
AllowedValues:
- true
- false

Conditions:
TableExists: !Equals [ !Ref MyDynamoTable, "true" ]

MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
Condition: !Ref TableExists
TableName: !Ref MyDynamoTable
部署时的 AWS CLI 传递所需参数
aws cloudformation deploy --template templateName.yml --parameter-overrides MyDynamoTable="true" dynamoDBtableName="myTableName" (any parameter required)

关于aws-lambda - AWS SAM - 为有条件创建的资源应用策略模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68251931/

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