![](/img/trans.png)
[英]How to use same application loadbalancer for different elasticbeanstack application environment using cloudformation template?
[英]Using Existing Role in CloudFormation Template
我正在嘗試在其他服務已在使用的 CFN 模板中使用現有 IAM 角色。
Resource
定義如下所示:
MyInstanceProfile:
Type: "AWS::IAM::InstanceProfile"
Properties:
Path: "/"
Roles: ["Capras999"]
我是這樣引用它的:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Role: !Ref MyInstanceProfile
但是我收到此錯誤:
1 validation error detected: Value 'capras-cluster-Prsr-DL-with-params-MyInstanceProfile-1R68JNUXU0SAA' at 'role' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+ (Service: AWSLambdaInternal; Status Code: 400; Error Code: ValidationException; Request ID: 5f75a56d-8ce4-473e-924e-626a5d3aab0a)
我究竟做錯了什么? 請幫我。
對於 lambda function 你需要role
而不是instance-profile
。
解決方案是將現有角色的 ARN復制並粘貼到模板中。 另一種可能性是使用參數傳遞它。
附言
一般需要定義AWS::IAM::Role的推力策略為lambda,例如:
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: my-lambda-execution-role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: {'Service': ['lambda.amazonaws.com']}
Action: ['sts:AssumeRole']
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSLambdaExecute
然后對於你的 function 你會這樣做:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Role: !GetAtt LambdaExecutionRole.Arn
您將實例名稱指定為值,此參數應該改為相關 IAM 角色的 Arn。
根據您的問題,您正在嘗試將實例配置文件附加到您的 Lambda,這些僅適用於 EC2 實例。 相反,您需要角色本身的 Arn。
您可以從控制台獲取 IAM 角色Capras999
的 Arn。
如果您使用的是現有角色,請確保將您的 AssumeRolePolicy 更新為還包含lambda.amazonaws.com
(如果將其用於 Lambda@Edge,則包含lambdaedge.amazonaws.com
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.