【AWS Lambda】 S3에 저장된 이미지를 크기 조정하고 다른 S3에 저장 (Ruby 사용)
목표
S3에 저장된 이미지 데이터는 Lambda 함수를 사용하여 크기를 조정하고 다른 S3에 저장합니다.
프로그래밍 언어는 Ruby를 사용합니다.
전제
사전에 두 개의 S3 버킷을 만들고 있습니다.
작업 흐름
항번
제목
1
Lambda 함수 생성 및 업로드
2
Lambda 환경 변수 설정
3
핸들러 및 실행 역할 설정
4
이벤트 트리거 정의
5
실행 역할 설정
6
동작 검증
절차
1. Lambda 함수 생성 및 업로드
모든 함수 이름과 Lambda 함수에서 사용할 프로그래밍 언어를 선택합니다.
이번은
Ruby2.5
로 기술합니다.배포할 Lambda 함수 본체와 외부 라이브러리(mini_magick)를 zip화한 것을 작성합니다.
작업 디렉토리에서 다음 작업을 수행합니다.
우선
Gemfile
만들기Gemfile
source 'https://rubygems.org'
gem "mini_magick"
bundle install --path vendor/bundle
를 사용하여 작업 디렉토리 아래에 gem을 설치하십시오.
bundle install --path vendor/bundle
또한 Lambda 함수 본문이 될
handler.rb
를 만듭니다.handler.rb
require 'aws-sdk-s3'
require 'base64'
require 'mini_magick'
def resize_image(event:, context:)
s3_client = Aws::S3::Client.new(
:region => ENV['REGION'],
:access_key_id => ENV['ACCESS_KEY'],
:secret_access_key => ENV['SECRET_ACCESS_KEY']
)
# イベントソースとして指定したS3から保存された画像を取り込む
key = event['Records'][0]['s3']['object']['key']
image_file = s3_client.get_object(:bucket => ENV['BUCKET_BEFORE'], :key => key).body.read
image = MiniMagick::Image.read(image_file)
# リサイズした画像をLambda環境の/tmpに一時書き込み
resized_tmp_file = "/tmp/#{key.delete("images/")}"
image.resize("300x300").write(resized_tmp_file)
# アップロード実行
s3_resource = Aws::S3::Resource.new()
object = s3_resource.bucket(ENV['BUCKET_AFTER']).object(key).upload_file(resized_tmp_file)
end
handler.rb
와 vender
를 zip화합니다.만든 zip 파일을 업로드합니다.
Lambda 콘솔의 함수 코드 열 동작에서
.zipファイルをアップロード
handler.zip
를 선택하고 保存
2.Lambda 환경 변수 설정
Lambda 콘솔에서 Lambda 함수 내에서 사용할 환경 변수를 설정합니다.
3. 핸들러 및 실행 역할 설정
어떤 파일의 어느 함수를 호출할까…라는 설정은, 핸들러라고 하는 파라미터로 지시하고 있다고 하는 것이므로,
이번에 작성한 Lambda 함수에 맞게 내용을 편집합니다.
Lambda 콘솔의 기본 설정에서
編集
핸들러 필드에
実行ファイル名(拡張子除く).関数名
형식으로 값을 입력하고 저장합니다.4. 이벤트 트리거 정의
Lambda 콘솔에서
トリガーを追加
이번 이벤트 트리거로 하는 AWS 서비스는 S3
트리거의 상세 설정을 실시합니다.
이번은 images 디렉토리내에 오브젝트가 작성된 타이밍에서의 이벤트 기동으로 합니다.
トリガーの有効化
를 넣으면 S3가 이 Lambda 함수에 처리를 킥할 수 있게 됩니다(Lambda 함수 정책의 설정).마지막으로
追加
5. 실행 역할 설정
또한 이번에는 크기 조정된 이미지를 저장할 때 Lambda에서 S3에 액세스해야 하기 때문에,
S3에 대한 액세스 권한이 있는 실행 역할을 부여합니다.
Lambda 콘솔 상단의
アクセス権限
를 클릭한 후 실행 역할 이름을 클릭합니다.ポリシーをアタッチします
클릭AmazonS3FullAccess
선택 후 ポリシーのアタッチ
6. 동작 검증
이벤트 소스로 지정한 S3의 images 디렉토리에 임의의 이미지를 업로드합니다.
참고로 업로드 한 이미지는 여기
리사이즈 후의 화상 보존처로서 지정한 S3를 확인했는데, 화상이 보존되어 있었으므로 OK입니다.
내용도 크기가 조정되었습니다.
Lambda 로그는 Cloudwatch Logs에서 확인할 수 있습니다.
참고로 한 기사
AWS Lambda Ruby를 사용하여 1시간 내에 만드는 이미지 크기 조정 API
Reference
이 문제에 관하여(【AWS Lambda】 S3에 저장된 이미지를 크기 조정하고 다른 S3에 저장 (Ruby 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OPySPGcLYpJE0Tc/items/7214a3611baa8ab13759텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)