Шаблон AWS Cloudformation с инстансом EC2 с ролью IAM для завершения стека Cloudformation

Я хочу создать завершаемый стек Cloudformation для запуска пакетного задания,которое завершается само собой.
Поэтому я хочу, чтобы шаблон Cloudformation с экземпляром EC2, который имеет роль IAM, завершал этот стек Cloudformation.

1 ответ

  1. Вот минимальный стек CloudFormation, который самоуничтожается из экземпляра EC2 путем запуска aws cloudformation delete-stack:

    Запустить Стек

    Description: Cloudformation stack that self-destructs
    Mappings:
      # amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2
      RegionMap:
        us-east-1:
          "64": "ami-9be6f38c"
    Resources:
      EC2Role:
        Type: AWS::IAM::Role
        Properties:
          RoleName: !Sub "EC2Role-${AWS::StackName}"
          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
            - Effect: Allow
              Principal:
                Service: [ ec2.amazonaws.com ]
              Action: [ "sts:AssumeRole" ]
          Path: /
          Policies:
          - PolicyName: EC2Policy
            PolicyDocument:
              Version: 2012-10-17
              Statement:
              - Effect: Allow
                Action:
                - "cloudformation:DeleteStack"
                Resource: !Ref "AWS::StackId"
              - Effect: Allow
                Action: [ "ec2:TerminateInstances" ]
                Resource: "*"
                Condition:
                  StringEquals:
                    "ec2:ResourceTag/aws:cloudformation:stack-id": !Ref AWS::StackId
              - Effect: Allow
                Action: [ "ec2:DescribeInstances" ]
                Resource: "*"
              - Effect: Allow
                Action:
                - "iam:RemoveRoleFromInstanceProfile"
                - "iam:DeleteInstanceProfile"
                Resource: !Sub "arn:aws:iam::${AWS::AccountId}:instance-profile/*"
              - Effect: Allow
                Action:
                - "iam:DeleteRole"
                - "iam:DeleteRolePolicy"
                Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/EC2Role-${AWS::StackName}"
      RootInstanceProfile:
        Type: AWS::IAM::InstanceProfile
        Properties:
          Path: /
          Roles: [ !Ref EC2Role ]
      WebServer:
        Type: AWS::EC2::Instance
        Properties:
          ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", 64 ]
          InstanceType: m3.medium
          IamInstanceProfile: !Ref RootInstanceProfile
          UserData:
            "Fn::Base64":
              !Sub |
                #!/bin/bash
                aws cloudformation delete-stack --stack-name ${AWS::StackId} --region ${AWS::Region}
    

    Обратите внимание, что если вы добавите какие-либо дополнительные ресурсы, вам нужно будет добавить соответствующее разрешение ‘delete’ IAM EC2Policyв список инструкций.