首页 文章

从lambda函数调用cloudformation

提问于
浏览
1

我有一个cloudformation堆栈,其更新策略为滚动更新(AutoScalingRollingUpdate) . 这个堆栈从我们的组织中获取最新的ami . 回购并进行滚动更新 . 这很好,但涉及手动发明 . 有人需要手动转到Cloudformation控制台并每隔几天运行一次更新 . 我正在尝试自动执行此操作,这是我的想法:使用Cloudwatch(cron表达式)设置基于计划的规则并触发lambda函数 . 一旦触发,lambda应该调用现有的堆栈 . 我的问题是1)这看起来可行吗? 2)有没有人为此编写任何lambda函数(最好是在python中)?

附加高级架构
enter image description here

1 回答

  • 1

    完全可行 . CloudFormation模板看起来像这样:

    Resources:
      AmiUpdateLambdaFunction:
        Type: AWS::Lambda::Function
        Properties:
          Code: ami_updater.py
          Handler: ami_updater.lambda_handler
          Runtime: python3.6
          Timeout: 300
          MemorySize: 128
    
      AmiUpdateLambdaRole:
        Type: AWS::IAM::Role
        Properties:
          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Principal:
                  Service:
                    - lambda.amazonaws.com
                Action:
                  - sts:AssumeRole
          Path: /
          ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole 
          # Add policy for updating the Cloudformation stack
    
      AmiUpdateTriggerEvent:
        Type: AWS::Events::Rule
        Properties:
          ScheduleExpression: "rate(15 day)"
          State: ENABLED
          Targets:
            - Arn: !GetAtt AmiUpdateLambdaFunction.Arn
              Id: AmiUpdateTriggerEvent
    
      AmiUpdateLambdaPermission:
        Type: AWS::Lambda::Permission
        Properties:
          Action: lambda:InvokeFunction
          FunctionName: !Ref AmiUpdateLambdaFunction
          Principal: events.amazonaws.com
          SourceArn: !GetAtt AmiUpdateTriggerEvent.Arn
    

    至于Python代码,它是火箭科学 . 然后使用boto3使用 update_stack 方法(documentation)并在那里输入新的AMI .

相关问题