버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

  1. 아래 그림처럼 S3 서비스로 이동합니다.
  2. 기존에 만들어진 S3 버킷이 있다면, 해당 버킷을 볼 수 있습니다. 버킷을 새로 생성하기 위하여, Create bucket 버튼을 클릭합니다.


  3. 팝업창에서 Bucket name을 적습니다. 아래 예제에서는  polly-mp3.awsdemokrawsdemo.comkr 이라는 버킷 이름으로 작성하지만, 실습에서는 전 세계적으로  고유한 다른 이름으로 작성 해야 합니다. 작성후 Next 버튼을 클릭 합니다.
  4. (옵션) Tags 정보에 Key에는 Name 을 Value에는 NewsApp 을 추가하고 Next 버튼을 클릭합니다. 서비스별로 Tags 정보를 입력하면, 태그 정보를 기반으로 어느 프로젝트에 서비스가 어떤 것이 할당 되어 있고, 비용이 얼마가 나오는지 산정을 할 수 있습니다. 
  5. 외부에서 퍼블릭하게 접속해서 mp3 재생이 되도록 체크 박스를 모두 해지   상태로 변경하고 Next 버튼을 클릭합니다. (기본은 체크되어 안전하게 막혀 있음)
  6. 모든 설정이 완료되면 Create Bucket 버튼을 클릭하고 S3 버킷을 생성합니다.

...

  1. PostNews와 같이  Create function  버튼을 클릭해서 UpdateNews  함수를 생성합니다. Runtime과 Role 설정은 기존과 동일합니다.

  2. UpdateNews 의 함수 코드를 아래 코드로 대체합니다.

    코드 블럭
    from __future__ import print_function
     
    import boto3
    import os
    import json
    from contextlib import closing
    from boto3.dynamodb.conditions import Key, Attr
    import re
     
    def lambda_handler(event, context):
        polly_message = event["Records"][0]["Sns"]["Message"]
        print (polly_message)
        polly_response = json.loads(polly_message)
     
        # Updating the item in DynamoDB
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table(os.environ['DB_TABLE_NAME'])
      
        response = table.update_item(
            Key={
                'id': polly_response["taskId"]
            },
            UpdateExpression="set pollyStatus = :s",
            ExpressionAttributeValues={
                ':s': polly_response['taskStatus']
            }
        )
         
        print(response)
         
        s3 = boto3.client('s3')
        s3.put_object_acl(
            ACL = 'public-read',
            Bucket = os.environ['BUCKET_NAME'],
            Key = polly_response["taskId"] + ".mp3"
        )
         
        return


  3. Environment variables는 DB_TABLE_NAME에  NewsTable 값을 입력하고, BUCKET_NAME에는 S3 버킷 이름( polly-mp3.awsdemokrawsdemo.comkr )을 지정합니다. Tags에 Name과  NewsApp 을 입력하고, Timeout을  1 min 으로 수정한후, 우측 상단의 Save 버튼을 클릭하여 저장합니다.

  4. UpdateNews Lambda 함수는 SNS Topic에 의해서 트리거 되어 동작이 되어야 합니다.  따라서 Designer 메뉴를 열고 좌측의 Add trigger 버튼을 클릭합니다.
  5. 트리거를 위하여 SNS를 클릭합니다. SNS topic 으로  NewsTopic  을 지정합니다. 해당 SNS에서 맞는지 확인하고 Add 버튼을 클릭하여 트리거를 등록하고 확인합니다.



...

  1. DeleteNews 함수를 하나 더 추가하기 위해서 Lambda 서비스의 Function List가 나오는 화면 우측 상단의 Create function 버튼을 클릭합니다.
  2. DeleteNews  함수를 생성합니다. Runtime과 Role 설정은 기존과 동일합니다.
  3. DeleteNews 의 함수 코드를 아래 코드로 대체합니다.

    코드 블럭
    from __future__ import print_function
      
    import boto3
    import os
    import json
    from boto3.dynamodb.conditions import Key, Attr
     
    def lambda_handler(event, context):
        if "body" in event:
            params = json.loads(event['body'])
        print (params)
          
        # Bad Request
        if params["postId"] is None or params["postId"] == "":
            response = {
                'statusCode': 400,
                'body': json.dumps({'message': "An unknown error has occurred. Missing required parameters."}),
                'headers': {
                    'Content-Type': 'application/json',
                    'Access-Control-Allow-Origin': '*'
                }
            }
            return response
          
        postId = params["postId"]
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table(os.environ['DB_TABLE_NAME'])
        table.delete_item(Key={"id":postId})
          
        s3 = boto3.client('s3')
        s3.delete_object(Bucket=os.environ['BUCKET_NAME'], Key= postId + ".mp3")
      
        response = {
            'statusCode': 200,
            'body': json.dumps({'message': "item is deleted : " + postId}),
            'headers': {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            }
        }
          
        return response


  4. Environment variables는 DB_TABLE_NAME에 NewsTable 값을 입력하고, BUCKET_NAME에는 S3 버킷 이름( polly-mp3.awsdemokrawsdemo.comkr )을 지정합니다. Tags에 Name과  NewsApp 을 입력하고, Timeout을  1 min 으로 수정합니다.

  5. 아래와 같이 4개의 람다 함수가 생성된 것을 확인할 수 있습니다.

...