Я новичок в AWS у меня есть программа, которая делает некие операции над видео (конвертирует один формат в другой (есть два бакита в первый загружается исходник второй результат работы программы)). Я смог создать aws role, s3 buckets и lambda function через графический интерфейс. Можно ли как-то сделать это через код на джаве. Хороший туториал очень поможет.
Вот есть хороший туториал на сайте AWS(правда он без кусков кода, только команды для AWS CLI):
https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html
Я взял их туториал и добавил немного описания и кода:
В туториале создаем 2 бакета, лямбду, в первый бакет закачиваем файлы(фото), срабатывает наш триггер(на создание или загрузку фото в бакет) и вызывает лямбду, внтури этой лямбды(можете сделать свою логику) изменяет фото(уменьшает размер) и эти измененные фото загружает во второй бакет.
Flow:
1.Create buckets(sourceBucket, destinationBucket) and upload a sample object.
AWS java SDK v2:
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/S3BucketOps.java
2.Create the IAM Policy:
Create an IAM policy that defines the permissions for the Lambda function. The required permissions include:
Get the object from the source S3 bucket.
Put the modified object into the target S3 bucket.
To create an IAM Policy:(also you need to define policy name. For example: MyLambdaS3Policy)(json вставляется при создании policy объекта)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::sourceBucket/*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::destinationBucket/*"
}
]
}
Create trust policy:(name - myTrustPolicy)(json вставляется в role объект)
The trust-policy.json file is a JSON file in the current directory that defines the trust policy for the role. This trust policy allows Lambda to use the role's permissions by giving the service principal lambda.amazonaws.com permission to call the AWS Security Token Service AssumeRole action.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
3.Create the execution role:(Attach the policy to the role)
Create the execution role that gives your function permission to access AWS resources.
Create a role with the following properties:
The AWSLambdaS3Policy policy has the permissions that the function needs to manage objects in Amazon S3.
https://stackoverflow.com/questions/62645596/how-to-create-aws-role-with-permission-using-java-sdk
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/iam/src/main/java/com/example/iam/CreatePolicy.java
4.Create the function:
Для создания Lambda функции надо:
The function knows the source bucket name and the key name of the object from the event data it receives as parameters. If the object is a .jpg or a .png, the code creates a thumbnail and saves it to the target bucket.
Код Handler:
https://github.com/awsdocs/aws-lambda-developer-guide/blob/master/sample-apps/s3-java/src/main/java/example/Handler.java
AWS java SDK v2:
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/lambda/src/main/java/com/example/lambda/CreateFunction.java
4.To create a deployment package:(jar в нашем случае)
The deployment package is a .zip file containing your Lambda function code and dependencies.
https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
5.Configure Amazon S3 to publish events:
In this step, you add the remaining configuration so that Amazon S3 can publish object-created events to AWS Lambda and invoke your Lambda function. You do the following in this step:
AWS CLI:
aws lambda add-permission
--function-name CreateThumbnail
--principal s3.amazonaws.com
--statement-id s3invoke
--action "lambda:InvokeFunction"
--source-arn arn:aws:s3:::sourcebucket
--source-account account-id
AWS java SDK v2:
LmabdaClient lambdaClient = LambdaClient.builder()
.region(region)
.build();
lambdaClient.addPermission(AddPermissionRequest.builder()
.functionName(functionName)
.principal("s3.amazonaws.com")
.statementId("s3invoke ")
.action("lambda:InvokeFunction")
.sourceArn()//arn:aws:s3:::sourcebucket
.sourceAccount()//account id
.build());
6.Add notification configuration on the source bucket to request Amazon S3 to publish object-created events to Lambda:
Enabling and configuring event notifications:
To enable and configure event notifications for an S3 bucket
In the Event types section, select one or more event types for which you want to receive notifications. For a listing of the event types, see Event notification types.
In the Destination section, choose the event notification destination:
AWS java SDK v2:
S3Client s3Client = S3Client.builder()
.region(AWS_REGION)
.credentialsProvider(ProfileCredentialsProvider.create())
.build();
s3Client.putBucketNotificationConfiguration(PutBucketNotificationConfigurationRequest.builder()
.bucket(bucketName)
.notificationConfiguration(NotificationConfiguration.builder()
.lambdaFunctionConfigurations(LambdaFunctionConfiguration.builder()
.lambdaFunctionArn()//arn:aws:lambda:us-east-1:111111111111:function:myFunction
.events(Event.S3_OBJECT_CREATED)
.build())
.build())
.build());
Замечания:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дана задача: Создать статический метод printMagazines(Printable[] printable) в классе Magazine, который выводит на консоль названия только журналовСоздать статический...
Необходимо написать программу, в которой при нажатии мышки создаётся квадратик синего цвета, при двойном нажатии на синий квадратик цвет...
написал код пытаюсь парсить firebase realtime NotificationFragmentjava
я делаю приложение, выводящее спираль(в целях образования)Но спираль выводится с редкими придатками, в местах отклоняющихся на на количество...