2016-11-02 19 views

cevap

13

Sen kova temizlemek ve bir CustomResource kullanarak CloudFormation yığından lambda çağırmak için bir lambda fonksiyonu oluşturabilir. Yukarıdaki lambda oluşturduktan sonra

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import json 
import boto3 
from botocore.vendored import requests 


def lambda_handler(event, context): 
    try: 
     bucket = event['ResourceProperties']['BucketName'] 

     if event['RequestType'] == 'Delete': 
      s3 = boto3.resource('s3') 
      bucket = s3.Bucket(bucket) 
      for obj in bucket.objects.filter(): 
       s3.Object(bucket.name, obj.key).delete() 

     sendResponseCfn(event, context, "SUCCESS") 
    except Exception as e: 
     print(e) 
     sendResponseCfn(event, context, "FAILED") 


def sendResponseCfn(event, context, responseStatus): 
    response_body = {'Status': responseStatus, 
        'Reason': 'Log stream name: ' + context.log_stream_name, 
        'PhysicalResourceId': context.log_stream_name, 
        'StackId': event['StackId'], 
        'RequestId': event['RequestId'], 
        'LogicalResourceId': event['LogicalResourceId'], 
        'Data': json.loads("{}")} 

    requests.put(event['ResponseURL'], data=json.dumps(response_body)) 

, sadece CloudFormation yığınında CustomResource koydu: senin kova temizleyerek lambda örnek Aşağıda

--- 
AWSTemplateFormatVersion: '2010-09-09' 

Resources: 

    myBucketResource: 
    Type: AWS::S3::Bucket 
    Properties: 
     BucketName: my-test-bucket-cleaning-on-delete 
    DependsOn: cleanupBucketOnDelete 

    cleanupBucketOnDelete: 
    Type: Custom::cleanupbucket 
    Properties: 
     ServiceToken: arn:aws:lambda:eu-west-1:123456789012:function:clean-bucket-lambda 
     BucketName: my-test-bucket-cleaning-on-delete 

rol takmak unutmayın Kuzudan nesneyi kaldırma iznine sahip olan lambda.

Ayrıca, lambda fonksiyonu cli2cloudformation kullanarak CLI komut satırı kabul eden bir lambda fonksiyonu oluşturabilir unutmayın. here'dan indirip kurabilirsiniz. Sadece feryat gibi bir CustomResource oluşturmanız gerektiğini kullanarak:

"removeBucket": { 
     "Type": "Custom::cli2cloudformation", 
     "Properties": { 
      "ServiceToken": "arn:aws:lambda:eu-west-1:123456789000:function:custom-lambda-name", 
      "CliCommandDelete": "aws s3 rb s3://bucket-name --force", 
     } 
} 
+1

Bu CloudFormation gelen kova silme işlemek için harika bir yoldur ama cevap sadece hayır olduğunu düşünüyorum - ben cevap olarak bu işaretleyemezsiniz (ama didvote it) - teşekkürler –

+0

Bu cevap yayınlanması için çok teşekkürler –

+0

Konu hakkında daha derinlemesine blog yazısı: https://community.alfresco.com/community/platform/blog/2016/10/13/how- a-lambda destekli-özel-kaynak-gün-tasarrufu-gün – vincent

5

Hayır, bunu yapmanın bir yolu olduğunu sanmıyorum. Bu document, bunu doğrular.

İlgili konular