Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用未链接到角色的AWS CloudFormation创建CloudWatch规则_Amazon Web Services_Amazon Cloudformation_Amazon Cloudwatch - Fatal编程技术网

Amazon web services 使用未链接到角色的AWS CloudFormation创建CloudWatch规则

Amazon web services 使用未链接到角色的AWS CloudFormation创建CloudWatch规则,amazon-web-services,amazon-cloudformation,amazon-cloudwatch,Amazon Web Services,Amazon Cloudformation,Amazon Cloudwatch,我正在尝试创建一个CloudWatch规则,该规则根据计划触发并执行状态机(步骤函数)。我正在使用CloudFormation来创建这个,除了规则使用的IAM角色与规则本身的关联之外,其他一切都创建得很好。我的意思是: 注意“使用现有角色”下为空 下面是处理规则及其角色的CF模板部分 "SFInvoke":{ "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": {

我正在尝试创建一个CloudWatch规则,该规则根据计划触发并执行状态机(步骤函数)。我正在使用CloudFormation来创建这个,除了规则使用的IAM角色与规则本身的关联之外,其他一切都创建得很好。我的意思是:

注意“使用现有角色”下为空

下面是处理规则及其角色的CF模板部分

"SFInvoke":{
    "Type": "AWS::IAM::Role",
    "Properties": {
      "AssumeRolePolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": {
                "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
              }
            },
            "Action": "sts:AssumeRole"
          }
        ]
      },
      "Policies": [
        {
          "PolicyName": "StepFunctionsInvoke",
          "PolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "states:StartExecution"
                ],
                "Resource": { "Ref" : "StateMachine"}
              }
            ]
          }
        }
      ]
    }
  },
  "CloudWatchStateMachineSDCEventRule": {
    "Type":"AWS::Events::Rule",
    "Properties": {
      "Description":"CloudWatch trigger for the InSite Static Data Consumer",
      "ScheduleExpression": "rate(5 minutes)",
      "State":"ENABLED",
      "Targets":[{
        "Arn":{ "Ref" : "StateMachine"},
        "Id":"StateMachineTargetId",
        "RoleArn":{
          "Fn::GetAtt": [
            "SFInvoke",
            "Arn"
          ]
        }
      }]
    }
},

是否希望
SFInvoke
角色显示在
使用现有角色选择器上

如果是这种情况,则需要将主体设置为
事件
,而不是
状态

您正在编辑上面屏幕截图中的事件目标,而不是步骤函数。主体定义了可以承担该角色的服务,在您的情况下是事件服务

尝试以下方法创建角色:

"SFInvoke":{
  "Type": "AWS::IAM::Role",
  "Properties": {
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "events.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    },
    "Policies": [
      {
        "PolicyName": "StepFunctionsInvoke",
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "states:StartExecution"
              ],
              "Resource": { "Ref" : "StateMachine"}
            }
          ]
        }
      }
    ]
  }
}

是否希望
SFInvoke
角色显示在
使用现有角色选择器上

如果是这种情况,则需要将主体设置为
事件
,而不是
状态

您正在编辑上面屏幕截图中的事件目标,而不是步骤函数。主体定义了可以承担该角色的服务,在您的情况下是事件服务

尝试以下方法创建角色:

"SFInvoke":{
  "Type": "AWS::IAM::Role",
  "Properties": {
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "events.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    },
    "Policies": [
      {
        "PolicyName": "StepFunctionsInvoke",
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "states:StartExecution"
              ],
              "Resource": { "Ref" : "StateMachine"}
            }
          ]
        }
      }
    ]
  }
}

Yaml可能为:
基于主体:作为基于事件的服务和操作:开始执行状态机的StepFunctions

AWSEventsInvokeStepFunctions:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:  
              Service: 
                - events.amazonaws.com                   
            Action: sts:AssumeRole     
      Policies:
        - PolicyName: AWSEventsInvokeStepFunctions
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - states:StartExecution
                Resource: !Sub "arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:*" 

该角色现在本质上是通用的,可以应用于CloudWatch事件规则,为该规则提供了基于AmazonS3事件启动StepFunctions状态机执行的权限

AmazonCloudWatchEventRule:
    Type: AWS::Events::Rule
    Properties:
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - 'AWS API Call via CloudTrail'
        detail:
          eventSource:
            - s3.amazonaws.com
          eventName:           
            - PutObject            
          requestParameters:
            bucketName:
              - !Ref EventBucket
      Targets:
        - 
          RoleArn: !GetAtt AWSEventsInvokeStepFunctions.Arn
          Arn: !Sub "arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:MyStateMachine"        
          Id: !Sub "StepExecution"


您可能可以在

上查看更多信息。Yaml可能如下所示:
基于主体:作为基于事件的服务和操作:开始执行状态机的StepFunctions

AWSEventsInvokeStepFunctions:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:  
              Service: 
                - events.amazonaws.com                   
            Action: sts:AssumeRole     
      Policies:
        - PolicyName: AWSEventsInvokeStepFunctions
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - states:StartExecution
                Resource: !Sub "arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:*" 

该角色现在本质上是通用的,可以应用于CloudWatch事件规则,为该规则提供了基于AmazonS3事件启动StepFunctions状态机执行的权限

AmazonCloudWatchEventRule:
    Type: AWS::Events::Rule
    Properties:
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - 'AWS API Call via CloudTrail'
        detail:
          eventSource:
            - s3.amazonaws.com
          eventName:           
            - PutObject            
          requestParameters:
            bucketName:
              - !Ref EventBucket
      Targets:
        - 
          RoleArn: !GetAtt AWSEventsInvokeStepFunctions.Arn
          Arn: !Sub "arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:MyStateMachine"        
          Id: !Sub "StepExecution"


您可能可以在

感谢Tartaglia上查看更多信息-这是否意味着该角色将按照我的要求链接到规则?那么它将能够使用该角色执行吗?这就是我要做的,我要让CF模板生成角色和CloudWatch事件之间的链接,以便它可以根据需要执行并触发状态机。是的,这将触发状态机。您还需要正确设置状态机上的角色(此角色将具有
状态
主体),以及lambda上的角色(此角色将具有
lambda
主体)。感谢您将
状态
更改为
事件
解决了我的问题!感谢Tartaglia-这是否意味着该角色按照我的要求与规则相关联?那么它将能够使用该角色执行吗?这就是我要做的,我要让CF模板生成角色和CloudWatch事件之间的链接,以便它可以根据需要执行并触发状态机。是的,这将触发状态机。您还需要正确设置状态机上的角色(此角色将具有
状态
主体),以及lambda上的角色(此角色将具有
lambda
主体)。感谢您将
状态
更改为
事件
解决了我的问题!