안드로이드 앱으로 Rekognition을 사용하기 위해서 카메라로 촬영한 사진을 S3에 업로드 해야 할 일이 생겼다
나중에 내가 참고하려고 정리하는 글!!
먼저 IAM과 S3 버킷이 만들어져 있어야 함!
이전 포스트 참고
https://hemon.tistory.com/73?category=1289659
1. Cognito 자격 증명 풀 생성하기
Amazon Cognito에 들어가면 이런 화면이 나오는데 여기서 [자격 증명 풀 관리]를 눌러준다
자격 증명 풀을 처음 만드는 사람이면 이런 화면이 뜰 것이다
원하는 이름을 입력하고 우리 앱은 로그인 기능이 없기 때문에 인증되지 않은 자격 증명에 대한 액세스를 활성화 시켰다
여기서 보면 Auth와 Unauth 역할이 두개 생성되는 것을 알 수 있다. 다음으로 넘어가자
여기 보이는 자격 증명 얻기에 있는 코드를 실제로 입력할 것이다
(따로 적어놓을 필요는 없음)
// Amazon Cognito 인증 공급자를 초기화합니다
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"ap-northeast-2:~", // 자격 증명 풀 ID
Regions.AP_NORTHEAST_2 // 리전
);
이렇게 Cognito 생성은 끝났다!
2. S3 접근 권한 주기
이제 위에서 생성된 역할에 S3 접근 권한을 부여해줄 것이다
IAM > 역할로 들어가면 이렇게 아까 생성된 역할들이 얌전히 기다리고 있다
우린 인증되지 않은 사용자로 사용할 거니까 Unauth를 수정!
Unauth_Role로 들어가서 인라인 정책을 생성해줄 것이다
서비스 : S3
읽기 : GetObject
쓰기 : PutObject
우리는 사진을 읽고 쓰고 다 할 거니까 둘 다 추가해주었다
리소스 > 특정 > ARN 추가
우리가 사용할 버킷에 대한 ARN을 추가해준다. (특정 버킷, 모든 파일)
나머지는 그대로 두고 정책 검토로 넘어간다!
이제 정책 이름을 입력하고 요약을 보고 잘 됐는지 검토하면 끝~~
그럼 이렇게 역할에 권한 부여가 끝난다!
3. 안드로이드 스튜디오 설정 및 코드
먼저 build.gradle파일 dependency에 세가지를 추가해준다
(추가하고 Sync Now 꼭 누르기!!)
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.13.5'
implementation 'com.amazonaws:aws-android-sdk-cognito:2.13.5'
implementation 'com.amazonaws:aws-android-sdk-s3:2.13.5'
다음은 Manifest파일에서 퍼미션을 준다
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
그리고 서비스도 추가해줘야 함!
<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />
마지막으로 코드를 작성해주면 끝!
File img;
AmazonS3 s3;
TransferUtility transferUtility;
CognitoCachingCredentialsProvider credentialsProvider;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rekog);
// Amazon Cognito 인증 공급자 초기화
credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"ap-northeast-2:~", // 자격 증명 풀 ID
Regions.AP_NORTHEAST_2 // 리전
);
s3 = new AmazonS3Client(credentialsProvider);
transferUtility = new TransferUtility(s3, getApplicationContext());
s3.setRegion(Region.getRegion(Regions.AP_NORTHEAST_2));
s3.setEndpoint("s3.ap-northeast-2.amazonaws.com");
}
(여기서 img는 앱에서 촬영한 이미지이다)
public void upload() {
String imgName = "uploadImg";
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("curImg", imgName);
editor.commit();
if (img == null) {
Log.i("ERROR", "The file is empty");
} else {
TransferObserver observer = transferUtility.upload(
"cloud-test-hyun", // The bucket to upload to
"upload_test.jpg", // The key for the uploaded object
img,
CannedAccessControlList.PublicRead
);
observer.setTransferListener(new TransferListener() {
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
Log.i(TAG, "progress changed");
}
public void onStateChanged(int id, TransferState state) {
if (state == TransferState.COMPLETED) {
Log.i(TAG, "state changed");
DetectText();
}
}
public void onError(int id, Exception ex) {
Log.e("ERROR", ex.getMessage(), ex);
}
});
}
}
'Study > AWS' 카테고리의 다른 글
안드로이드 앱으로 Amazon Rekognition 사용하기!! (1) | 2022.07.04 |
---|---|
AWS Rekognition 사용하기(IAM 생성, 버킷 만들기) (0) | 2022.05.16 |