2016-11-02 13 views

答えて

13

あなたのバケツをクリーンアップし、CustomResourceを使用してCloudFormationスタックからあなたのラムダを呼び出すためにラムダ関数を作成することができます。あなたは上記のラムダを作成した後

#!/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)) 

は、ちょうどあなたのCloudFormationスタックにCustomResourceを置く:あなたのバケツをクリーンアップラムダ例以下

--- 
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 

が役割を添付することを忘れないでくださいあなたのバケツからオブジェクトを削除する権限を持っているあなたのラムダに。

さらにあなたはラムダ関数にcli2cloudformationを使用してCLIコマンドラインを受け付けラムダ関数を作成できることに注意してください。 hereからダウンロードしてインストールできます。あなただけ怒鳴るようCustomResourceを作成する必要があることを使用:

"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

これはCloudFormationからバケツを削除処理するための素晴らしい方法ですが、私は答えはただ何もありませんだと思う - 私は答えとしてこれをマークする(しかし、私はできません投稿しました) - ありがとう –

+0

この回答は投稿に非常に感謝しています –

+0

トピックに関する詳細なブログ投稿:https://community.alfresco.com/community/platform/blog/2016/10/13/how- a-lambda-backed-custom-resource-saved-the-day – vincent

5

いいえ、私はそれを行う方法はないと思います。このdocumentはこれを確認しています。

関連する問題