5
wersję

AWS CLI:AWS CLI: Rola zdefiniowane dla funkcji nie można założyć przez Lambda

aws --version 
aws-cli/1.11.21 Python/2.7.12 Darwin/15.3.0 botocore/1.4.78 

Próbując stworzyć funkcję lambda i uzyskiwanie błąd:

An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: The role defined for the function cannot be assumed by Lambda. 

Role został stworzony jako :

aws iam create-role --role-name microrole --assume-role-policy-document file://./trust.json 

trust.json jest:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "lambda.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole" 
    } 
    ] 
} 

Polityka został załączony jako:

aws iam put-role-policy --policy-document file://./policy.json --role-name microrole --policy-name micropolicy 

policy.json jest:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "logs:CreateLogGroup", 
     "logs:CreateLogStream", 
     "logs:PutLogEvents" 
     ], 
     "Resource": "arn:aws:logs:*:*:*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "apigateway:*" 
     ], 
     "Resource": "arn:aws:apigateway:*::/*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "execute-api:Invoke" 
     ], 
     "Resource": "arn:aws:execute-api:*:*:*" 
    } 
    ] 
} 

Czekaliśmy na wiele minut, jak wymienione w [1] i [2] ale nadal błąd nie zniknie. Zasady i zaufanie związane z rolą są podobne do domyślnej roli tworzonej podczas tworzenia funkcji Lambda za pomocą konsoli.

Pełne kroki są wymienione na https://github.com/arun-gupta/serverless/tree/master/aws/microservice.

Czego brakuje?

Odpowiedz

0

Funkcja Lambda został stworzony jako:

aws lambda create-function \ 
--function-name MicroserviceGetAll \ 
--role arn:aws:iam::<act-id>:role/service-role/microRole \ 
--handler org.sample.serverless.aws.couchbase.BucketGetAll \ 
--zip-file fileb:///Users/arungupta/workspaces/serverless/aws/microservice/microservice-http-endpoint/target/microservice-http-endpoint-1.0-SNAPSHOT.jar \ 
--description "Microservice HTTP Endpoint - Get All" \ 
--runtime java8 \ 
--region us-west-1 \ 
--timeout 30 \ 
--memory-size 1024 \ 
--environment Variables={COUCHBASE_HOST=ec2-35-165-83-82.us-west-2.compute.amazonaws.com} \ 
--publish 

Poprawna komenda:

aws lambda create-function \ 
--function-name MicroserviceGetAll \ 
--role arn:aws:iam::<act-id>:role/microRole \ 
--handler org.sample.serverless.aws.couchbase.BucketGetAll \ 
--zip-file fileb:///Users/arungupta/workspaces/serverless/aws/microservice/microservice-http-endpoint/target/microservice-http-endpoint-1.0-SNAPSHOT.jar \ 
--description "Microservice HTTP Endpoint - Get All" \ 
--runtime java8 \ 
--region us-west-1 \ 
--timeout 30 \ 
--memory-size 1024 \ 
--environment Variables={COUCHBASE_HOST=ec2-35-165-83-82.us-west-2.compute.amazonaws.com} \ 
--publish 

Różnica polega na tym, że rola została błędnie określona jako role/service-role/microRole zamiast role/microRole.