aws_s3

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "functions": {
    "backend": {
      "aws_s3": {
        ...
      }
    }
  }
}

How to use

명령어 리스트

aws_s3 함수를 이용한 클라이언트 트랜잭션안에 S3 동작을 연계한다. 지원하는 {command} 는 다음과 같다.

  • get S3로부터 콘텐츠를 다운로드한다.

  • put S3로 콘텐츠를 업로드한다.

    Note

    응답코드가 200 OK 이며 Content-Length 가 0보다 큰 경우에만 업로드가 수행된다.

  • delete S3로부터 콘텐츠를 삭제한다.

{url}/aws_s3/{command}/{endpoint}

이미지를 마이그레이션 하는 등 S3 동작을 단일 트랜잭션으로 연계할 수 있다.

# image.jpg를 캐싱하는 과정에서 newbucket에서 업로드한다.
https://foo.com/image.jpg/aws_s3/put/newbucket

# image.jpg를 캐싱하는 과정에서 oldbucket의 객체를 삭제한다.
https://foo.com/image.jpg/aws_s3/delete/oldbucket

# image.jpg를 mybucket에서 가져온다.
https://foo.com/image.jpg/aws_s3/get/mybucket

# image.jpg를 mybucket에서 가져오며, oldbucket에서 삭제하고, newbucket에 업로드한다.
https://foo.com/image.jpg/aws_s3/get/mybucket/aws_s3/delete/oldbucket/aws_s3/put/newbucket

meta

"meta" : {
  "enable": false,
  "keyword": "aws_s3"
}
enable (기본: false)

AWS S3 모듈 활성화

keyword (기본: aws_s3)

AWS S3 모듈 키워드

log

"log": {
  "enable": true
}
enable (기본: true)

모듈의 모든 트랜잭션을 origin.log 에 기록한다.

Note

원본 404 Not Found 로 존재하지 않는 파일에 대한 PUT 업로드라도 증빙을 위해 로깅한다.

endpoints

"endpoints": [
  {
    "name": "mystorage",
    "bucket": "s3-image-origin",
    "region": "ap-northeast-2",
    "accessKey": "__my_access_key__",
    "secretKey": "__my_secret_key__",
    "path": { },
    "metadata": { },
    "options": { },
    "tagging": { },
  },
  {
    "name": "oldstorage",
    ...
  }
]
name

프로파일명

bucket

버킷

region

리젼

accessKey (기본: #IAMROLE)
  • 액세스 키

  • #IAMROLE 인 경우 AWS의 IAM 역할 자격 증명을 사용한다.

secretKey (기본: #IAMROLE)
  • 시크릿 키

  • #IAMROLE 인 경우 AWS의 IAM 역할 자격 증명을 사용한다.

options

"options": {
  "blocking": false,
  "sslEnabled": true,
  "overwrite": true,
  "inheritContentType": false
}
blocking (기본: false)

업로드 완료 후 응답여부

sslEnabled (기본: true)

SSL 사용

overwrite (기본: true)

덮어쓰기

inheritContentType (기본: false)

업로드시 Content-Type 헤더를 지정하지 않는다. true 라면 원본의 Content-Type 헤더를 승계한다.

Note

  • 지정되지 않은 콘텐츠는 S3에서 application/octet-stream 으로 다운로드 된다.

  • hyperdims 을 수행하면 이미지에 알맞은 Content-Type 이 자동으로 지정된다. 따라서 이미지 마이그레이션이라면 hyperdims/strip/true/ 명령어를 권장한다.

path

"path": {
  "src": {
    "type": "rewrite",
    "urlRewrites" : [
      {
        "pattern": "/download/(.*)",
        "replace": "/#1"
      }
    ],
    "code": "..."
  },
  "dest": {
    "type": "rewrite",
    "urlRewrites" : [
      {
        "pattern": "/download/(.*)",
        "replace": "/#1"
      }
    ],
    "code": "let ct = rs.headers['content-type'];\nif(ct && ct.startsWith('image')..."
  }
}
src (기본: null)

원본(다운로드)주소. null이라면 입력된 URL 경로를 그대로 사용한다.

dest (기본: null)

대상(업로드)주소. null이라면 입력된 URL 경로 그대로 업로드한다.

src , dest 두 설정은 경로를 수정하기 위해 공통 세부설정을 가진다.

  • "type": "rewrite" 인 경우

    src.urlRewrites , dest.urlRewrites 설정을 통해 URL을 수정한다.

  • "type": "code" 인 경우

    src.code , dest.code 설정을 통해 URL을 수정한다.

  • "type": "argument"

    hooking 모듈등 사전에 정의된 헤더로 입력받는다.

    X-M2X-Param-aws_s3.path.src: /products/100.jpg
    X-M2X-Param-aws_s3.path.dest: /nas/product_item_100.jpg
    

metadata

"metadata": [
  {
    "key": "Content-Type",
    "type": "default"  또는 "static" 또는 "code"
    "value": "image/jpeg"
  }
]

객체 업로드 헤더조건

key

헤더명

type

헤더 값 설정조건

default

원본파일에 동일헤더 key 가 있다면 해당 값 사용. 없다면 value 사용

static

항상 value 를 사용한다.

code

코드를 이용해 산출한다.

tagging TBD

"tagging": [
  {
    "key": "foo",
    "type": "value" 또는 "code",
    "value": "bar",
    "code": "..."
  }
],