Logo

AWS CLI로 Amazon S3 다루기 - 2

이전 포스팅에서 AWS CLI의 aws s3 커맨드를 사용하는 방법에 대해서 살펴보았습니다. 이번 포스팅에서는 aws s3api 커맨드를 통해서 Amazon S3를 좀 더 세밀하게 제어하는 방법에대해서 알아보도록 하겠습니다.

S3 버킷의 Region 확인

종종 본인이 생성한 S3 버킷이 속한 Region이 어디인지 햇갈릴 때가 있습니다. 이럴 때는 aws s3api get-bucket-location 커맨드를 통해서 Region을 알아낼 수 있습니다.

$ aws s3api get-bucket-location --bucket test-bucket
{
    "LocationConstraint": "us-west-2"
}

S3 버킷의 Life Cycle 설정

Amazon S3에 저장되어 있는 파일들의 생명 주기 관리를 위해서 관련 AWS CLI 커맨드를 사용할 수 있습니다. 예제에서는 test-bucket 버킷의 파일들이 한달 후에 자동으로 삭제되도록 설정해보겠습니다.

먼저 다음과 같이 aws s3api put-bucket-lifecycle 커맨드를 통해서 특정 버킷의 Life Cycle 설정을 생성할 수 있습니다.

$ aws s3api put-bucket-lifecycle --bucket test-bucket --lifecycle-configuration \\
  '{ "Rules": [ { "Expiration": { "Days": 30 }, "ID": "Retention", "Filter": { "Prefix": "" }, "Status": "Enabled" } ] }'

그리고 aws s3api get-bucket-lifecycle 커맨드를 통해서 특정 버킷의 Life Cycle 설정을 확인할 수 있습니다.

$ aws s3api get-bucket-lifecycle --bucket test-bucket
{
    "Rules": [
        {
            "Expiration": {
                "Days": 30
            },
            "ID": "Retention",
            "Filter": {
                "Prefix": ""
            },
            "Status": "Enabled"
        }
    ]
}

마지막으로 aws s3api delete-bucket-lifecycle 커맨드를 통해서 특정 버킷의 Life Cycle 설정을 삭제할 수 있습니다.

$ aws s3api delete-bucket-lifecycle --bucket test-bucket

aws s3 VS. aws s3api

aws s3 커맨드를 통해 Amazon S3를 파일 시스템처럼 접근할 수 있는 반면에 aws s3api 커맨드를 통해서는 좀 더 Restful API처럼 접근할 수 있습니다.

$ aws s3 ls s3://test-bucket/css/
2018-06-09 20:08:24     121200 bootstrap.min.css
2018-06-09 20:08:24     542194 bootstrap.min.css.map
2018-06-09 20:08:24        318 font.css
2018-06-09 20:08:24       8679 index.css
2018-06-09 20:08:24      42594 main.css
2018-06-09 20:08:24       9024 mapbox-gl.css
2018-06-09 20:08:24       1224 message.css
2018-06-09 20:08:24       9559 normalize.css
2018-06-09 20:08:24        848 ride.css
$ aws s3api list-objects --bucket test-bucket --prefix css
{
    "Contents": [
        {
            "Key": "css/bootstrap.min.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"ec3bb52a00e176a7181d454dffaea219\"",
            "Size": 121200,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/bootstrap.min.css.map",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"35b79ebe0b7805c1c84524ad920faa33\"",
            "Size": 542194,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/font.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"8af1a948ca8080e26ea87e2a9b01472c\"",
            "Size": 318,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/index.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"4615fa1d9569fe5cb4aa78592d32daac\"",
            "Size": 8679,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/main.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"676ee36bded4b97ff097304f3a266cd3\"",
            "Size": 42594,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/mapbox-gl.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"3d333a3427ff6dbb0cfe2fe93975b815\"",
            "Size": 9024,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/message.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"081952433a6eb6cd96a2b7a646524314\"",
            "Size": 1224,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/normalize.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"c2eaeff11a47fec97bc13343822deeb2\"",
            "Size": 9559,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        },
        {
            "Key": "css/ride.css",
            "LastModified": "2018-06-10T03:08:24.000Z",
            "ETag": "\"52b2996442ef0e99c5d5bfae1227b3bc\"",
            "Size": 848,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "dale.seo",
                "ID": "51dbe4e62e5471da8ee52476412bc9ad187d2a1c196ec9f937b3da7be3a18c70"
            }
        }
    ]
}

이상으로 AWS CLI의 aws s3api를 사용하는 방법에 대해서 알아보았습니다.