Lambda(python)で部品的コードをいろいろ書いてみる

GOAL:チートシート的な何か

# 1.Lambda 関数ハンドラー (Python)

```python
def handler_name(event, context): 
    ...
    return some_value
```


## 1.1.テストイベントから値を取得

```json:1.君の名は.testevent
{
  "firstname": "value1",
  "lastname": "value2"
}
```


```python:1.君の名は.py
import json

def lambda_handler(event, context):
    message = 'Hello {} {}!'.format(event['firstname'], 
                                    event['lastname'])  
    return { 
        'message' : message
    }  
```

# 2.boto3

## 2.1 バケット/キー（ファイル名）が存在するか確認 s3.list_objects

```key_exists.py

def lambda_handler(event, context):
    import boto3
    import botocore
  
    s3 = boto3.client('s3')
    
    bucket_name = 'jtakasuryuji-22'
    file_name = 'cat1.png' 
   
    try:
##################################################################
        list_object = s3.list_objects(Bucket=bucket_name, Prefix=file_name)
       
        file_exists = False
        if 'Contents' in list_object:
            message="Found"
            print (message)
        else:
            message="NotFound" #ファイルないんだけど
            print (message)

##################################################################

    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == 'NoSuchBucket':
            message="NoSuchBucket" #そもそもバケット自体がないんだけど
            print (message)

##################################################################

    return { 
        'message' : message
    }  
```

## ダウンロード用の署名つきURLを取得する generate_presigned_url()
```generate_presigned_url.py
def lambda_handler(event, context):
    import boto3
    
    s3 = boto3.client('s3')

    bucket_name = 'jtakasuryuji-22'
    file_name = 'cat1.png' 
 
    header_location = s3.generate_presigned_url(
        ClientMethod = 'get_object',
        Params = {'Bucket' : bucket_name, 'Key' : file_name},
        ExpiresIn = 60,
        HttpMethod = 'GET'
        )
        
    print (header_location)
```

## 同一バケット内でファイルをコピー
https://hacknote.jp/archives/37097/

## バケットをまたいでファイルをコピーする

```WARNING_NOTWORK_WIP_filecopy_another_bucket.py
    import boto
    conn = boto.connect_s3()

    myBucket = 'jtakasuryuji-22'
    myKey = '20181118b.txt'

    newBucket = 'jtakasuryuji-33'
    
    #copy
    src = conn.get_bucket(myBucket) 
    dst = conn.get_bucket(newBucket) 
    dst.copy_key(mykey,src.name,mykey) 
    
```

## バケット内のファイルを削除する delete_object()  object().delete()

```deletekey.py

def lambda_handler(event, context):
    import boto3
    
    s3 = boto3.resource('s3')
    myBucket = 'jtakasuryuji-22'
    myKey = '20181118b.txt'
    
#つくる

    #s3_obj = s3.Object(myBucket,myKey)
    #s3_obj.put(Body="")

#消す
    s3.Object(myBucket,myKey).delete()

```

## ファイル名を変更する COPY+DELETE

## テキストファイルを新規作成

```create_new_file.py

def lambda_handler(event, context):
    import boto3
    
    s3 = boto3.resource('s3')
    myBucket = 'jtakasuryuji-22'
    myKey = '20181118b.txt'
    
#つくる

    s3_obj = s3.Object(myBucket,myKey)
    s3_obj.put(Body="")

#消す
    s3.Object(myBucket,myKey).delete()
```

### boto s3 だけでいっぱいある...

abort_multipart_upload()
can_paginate()
complete_multipart_upload()
copy()
copy_object()
create_bucket()
create_multipart_upload()
delete_bucket()
delete_bucket_analytics_configuration()
delete_bucket_cors()
delete_bucket_encryption()
delete_bucket_inventory_configuration()
delete_bucket_lifecycle()
delete_bucket_metrics_configuration()
delete_bucket_policy()
delete_bucket_replication()
delete_bucket_tagging()
delete_bucket_website()
delete_object()
delete_object_tagging()
delete_objects()
delete_public_access_block()
download_file()
download_fileobj()
generate_presigned_post()
generate_presigned_url()
get_bucket_accelerate_configuration()
get_bucket_acl()
get_bucket_analytics_configuration()
get_bucket_cors()
get_bucket_encryption()
get_bucket_inventory_configuration()
get_bucket_lifecycle()
get_bucket_lifecycle_configuration()
get_bucket_location()
get_bucket_logging()
get_bucket_metrics_configuration()
get_bucket_notification()
get_bucket_notification_configuration()
get_bucket_policy()
get_bucket_policy_status()
get_bucket_replication()
get_bucket_request_payment()
get_bucket_tagging()
get_bucket_versioning()
get_bucket_website()
get_object()
get_object_acl()
get_object_tagging()
get_object_torrent()
get_paginator()
get_public_access_block()
get_waiter()
head_bucket()
head_object()
list_bucket_analytics_configurations()
list_bucket_inventory_configurations()
list_bucket_metrics_configurations()
list_buckets()
list_multipart_uploads()
list_object_versions()
list_objects()
list_objects_v2()
list_parts()
put_bucket_accelerate_configuration()
put_bucket_acl()
put_bucket_analytics_configuration()
put_bucket_cors()
put_bucket_encryption()
put_bucket_inventory_configuration()
put_bucket_lifecycle()
put_bucket_lifecycle_configuration()
put_bucket_logging()
put_bucket_metrics_configuration()
put_bucket_notification()
put_bucket_notification_configuration()
put_bucket_policy()
put_bucket_replication()
put_bucket_request_payment()
put_bucket_tagging()
put_bucket_versioning()
put_bucket_website()
put_object()
put_object_acl()
put_object_tagging()
put_public_access_block()
restore_object()
select_object_content()
upload_file()
upload_fileobj()
upload_part()
upload_part_copy()