AWS-Lambda-Quick
view release on metacpan or search on metacpan
lib/AWS/Lambda/Quick/Upload.pm view on Meta::CPAN
$self->debug('permissions attached to role');
return $result->{Role}{Arn};
};
### rest api attributes
has rest_api => default => 'perl-aws-lambda-quick';
has rest_api_id => sub {
my $self = shift;
# search existing apis
$self->debug('searching for existing rest api');
my $result = $self->aws_do(
'apigateway',
'get-rest-apis',
);
for ( @{ $result->{items} } ) {
next unless $_->{name} eq $self->rest_api;
$self->debug('found existing existing rest api');
return $_->{id};
}
# couldn't find it. Create a new one
$self->debug('creating new rest api');
$result = $self->aws_do(
'apigateway',
'create-rest-api',
{
name => $self->rest_api,
description =>
'Created by AWS::Lambda::Quick. See https://metacpan.org/pod/AWS::Lambda::Quick for more info.',
},
);
$self->debug('created new rest api');
return $result->{id};
};
has resource_id => sub {
my $self = shift;
# TODO: We shold probably make this configurable, right?
my $path = '/' . $self->name;
# search existing resources
$self->debug('searching of existing resource');
my $result = $self->aws_do(
'apigateway',
'get-resources',
{
'rest-api-id' => $self->rest_api_id,
}
);
for ( @{ $result->{items} } ) {
next unless $_->{path} eq $path;
$self->debug('found exiting resource');
return $_->{id};
}
# couldn't find it. Create a new one
$self->debug('creating new resource');
my $parent_id;
for ( @{ $result->{items} } ) {
if ( $_->{path} eq '/' ) {
$parent_id = $_->{id};
last;
}
}
unless ($parent_id) {
die q{Can't find '/' resource to create a new resource from!};
}
$result = $self->aws_do(
'apigateway',
'create-resource',
{
'rest-api-id' => $self->rest_api_id,
'parent-id' => $parent_id,
'path-part' => $self->name,
},
);
$self->debug('created new resource');
return $result->{id};
};
has greedy_resource_id => sub {
my $self = shift;
my $path = '/' . $self->name . '/{proxy+}';
# search existing resources
$self->debug('searching of existing greedy resource');
my $result = $self->aws_do(
'apigateway',
'get-resources',
{
'rest-api-id' => $self->rest_api_id,
}
);
for ( @{ $result->{items} } ) {
next unless $_->{path} eq $path;
$self->debug('found exiting resource');
return $_->{id};
}
# couldn't find it. Create a new one
$self->debug('creating new greedy resource');
$result = $self->aws_do(
'apigateway',
'create-resource',
{
'rest-api-id' => $self->rest_api_id,
'parent-id' => $self->resource_id,
'path-part' => '{proxy+}',
},
);
$self->debug('created new greedy resource');
return $result->{id};
};
### methods
sub upload {
my $self = shift;
my $function_arn = $self->_upload_function;
for my $resource_id ( $self->resource_id, $self->greedy_resource_id ) {
$self->_create_method($resource_id);
$self->_create_method_response($resource_id);
$self->_create_integration( $function_arn, $resource_id );
$self->_create_integration_response($resource_id);
}
$self->_stage;
return ();
}
sub api_url {
my $self = shift;
return
'https://'
. $self->rest_api_id
. '.execute-api.'
. $self->region
. '.amazonaws.com/'
. $self->stage_name . '/'
. $self->name;
}
sub _stage {
my $self = shift;
$self->aws_do(
'apigateway',
'create-deployment',
{
'rest-api-id' => $self->rest_api_id,
'stage-name' => $self->stage_name,
}
);
}
sub _create_method {
my $self = shift;
my $resource_id = shift;
my @identifiers = (
'rest-api-id' => $self->rest_api_id,
'resource-id' => $resource_id,
'http-method' => 'ANY',
);
( run in 1.225 second using v1.01-cache-2.11-cpan-99c4e6809bf )