Java源码示例:com.amazonaws.services.lambda.model.FunctionConfiguration

示例1
private void deleteAllVersions(AWSLambda client, String functionName) throws Exception {
	TaskListener listener = Execution.this.getContext().get(TaskListener.class);
	listener.getLogger().format("Looking for old versions functionName=%s%n", functionName);
	List<String> aliasedVersions = client.listAliases(new ListAliasesRequest()
			.withFunctionName(functionName)).getAliases().stream()
			.map( (alias) -> alias.getFunctionVersion())
			.collect(Collectors.toList());
	listener.getLogger().format("Found alises functionName=%s alias=%s%n", functionName, aliasedVersions);
	List<FunctionConfiguration> allVersions = findAllVersions(client, functionName);
	listener.getLogger().format("Found old versions functionName=%s count=%d%n", functionName, allVersions.size());
	List<FunctionConfiguration> filteredVersions = allVersions.stream()
		.filter( (function) -> {
			ZonedDateTime parsedDateTime = DateTimeUtils.parse(function.getLastModified());
			return parsedDateTime.isBefore(this.step.versionCutoff);
		})
		.filter( (function) -> !"$LATEST".equals(function.getVersion()))
		.filter( (function) -> !aliasedVersions.contains(function.getVersion()))
		.collect(Collectors.toList());
	for (FunctionConfiguration functionConfiguration : filteredVersions) {
		listener.getLogger().format("Deleting old version functionName=%s version=%s lastModified=%s%n", functionName, functionConfiguration.getVersion(), functionConfiguration.getLastModified());
		client.deleteFunction(new DeleteFunctionRequest()
				.withFunctionName(functionName)
				.withQualifier(functionConfiguration.getVersion())
		);
	}
}
 
示例2
@Test
public void deleteSingleFunction() throws Exception {
	WorkflowJob job = this.jenkinsRule.jenkins.createProject(WorkflowJob.class, "cfnTest");
	Mockito.when(this.awsLambda.listAliases(Mockito.eq(new ListAliasesRequest().withFunctionName("foo")))).thenReturn(new ListAliasesResult());
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo")))).thenReturn(new ListVersionsByFunctionResult()
			.withVersions(Arrays.asList(
					new FunctionConfiguration().withVersion("v1").withLastModified(ZonedDateTime.now().format(DateTimeFormatter.ISO_ZONED_DATE_TIME)),
					new FunctionConfiguration().withVersion("v2").withLastModified("2018-02-05T11:15:12Z")
					))
			);
	job.setDefinition(new CpsFlowDefinition(""
				+ "node {\n"
				+ "  lambdaVersionCleanup(functionName: 'foo', daysAgo: 5)\n"
				+ "}\n", true)
			);
	this.jenkinsRule.assertBuildStatusSuccess(job.scheduleBuild2(0));

	Mockito.verify(this.awsLambda).deleteFunction(new DeleteFunctionRequest()
			.withQualifier("v2")
			.withFunctionName("foo")
			);
	Mockito.verify(this.awsLambda).listVersionsByFunction(Mockito.any());
	Mockito.verify(this.awsLambda).listAliases(Mockito.any());
	Mockito.verifyNoMoreInteractions(this.awsLambda);
}
 
示例3
@Test
public void ignoreLatest() throws Exception {
	WorkflowJob job = this.jenkinsRule.jenkins.createProject(WorkflowJob.class, "cfnTest");
	Mockito.when(this.awsLambda.listAliases(Mockito.eq(new ListAliasesRequest().withFunctionName("foo")))).thenReturn(new ListAliasesResult());
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo")))).thenReturn(new ListVersionsByFunctionResult()
			.withVersions(Arrays.asList(
					new FunctionConfiguration().withVersion("$LATEST").withLastModified(ZonedDateTime.now().minusDays(15).format(DateTimeFormatter.ISO_ZONED_DATE_TIME))
					))
			);
	job.setDefinition(new CpsFlowDefinition(""
				+ "node {\n"
				+ "  lambdaVersionCleanup(functionName: 'foo', daysAgo: 5)\n"
				+ "}\n", true)
			);
	this.jenkinsRule.assertBuildStatusSuccess(job.scheduleBuild2(0));

	Mockito.verify(this.awsLambda).listVersionsByFunction(Mockito.any());
	Mockito.verify(this.awsLambda).listAliases(Mockito.any());
	Mockito.verifyNoMoreInteractions(this.awsLambda);
}
 
示例4
@Test
public void ignoreAliases() throws Exception {
	WorkflowJob job = this.jenkinsRule.jenkins.createProject(WorkflowJob.class, "cfnTest");
	Mockito.when(this.awsLambda.listAliases(Mockito.eq(new ListAliasesRequest().withFunctionName("foo")))).thenReturn(new ListAliasesResult()
			.withAliases(
				new AliasConfiguration().withFunctionVersion("myVersion")
			)
			);
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo")))).thenReturn(new ListVersionsByFunctionResult()
			.withVersions(Arrays.asList(
					new FunctionConfiguration().withVersion("myVersion").withLastModified(ZonedDateTime.now().minusDays(15).format(DateTimeFormatter.ISO_ZONED_DATE_TIME))
					))
			);
	job.setDefinition(new CpsFlowDefinition(""
				+ "node {\n"
				+ "  lambdaVersionCleanup(functionName: 'foo', daysAgo: 5)\n"
				+ "}\n", true)
			);
	this.jenkinsRule.assertBuildStatusSuccess(job.scheduleBuild2(0));

	Mockito.verify(this.awsLambda).listVersionsByFunction(Mockito.any());
	Mockito.verify(this.awsLambda).listAliases(Mockito.any());
	Mockito.verifyNoMoreInteractions(this.awsLambda);
}
 
示例5
public static void main(String[] args) {

        // snippet-start:[lambda.java1.list.main]
        ListFunctionsResult functionResult = null;

        try {
            AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(Regions.US_WEST_2).build();

            functionResult = awsLambda.listFunctions();

            List<FunctionConfiguration> list = functionResult.getFunctions();

            for (Iterator iter = list.iterator(); iter.hasNext(); ) {
                FunctionConfiguration config = (FunctionConfiguration)iter.next();

                System.out.println("The function name is "+config.getFunctionName());
            }

        } catch (ServiceException e) {
            System.out.println(e);
        }
        // snippet-end:[lambda.java1.list.main]
    }
 
示例6
/**
 * Instantiates a new lambda VH.
 *
 * @param lambda the lambda
 * @param tagsList the tags list
 */
public LambdaVH(FunctionConfiguration lambda,Map<String,String> tagsList){
	this.lambda = lambda;
	this.tags = new ArrayList<>();
	Iterator<Entry<String, String>> it = tagsList.entrySet().iterator();
	while(it.hasNext()){
		Entry<String, String> entry = it.next();
		Tag tag = new Tag();
		tag.setKey(entry.getKey());
		tag.setValue(entry.getValue());
		tags.add(tag);
	}
}
 
示例7
/**
 * Fetch lambda info test.
 *
 * @throws Exception the exception
 */
@SuppressWarnings("static-access")
@Test
public void fetchLambdaInfoTest() throws Exception {
    
    mockStatic(AWSLambdaClientBuilder.class);
    AWSLambda lamdaClient = PowerMockito.mock(AWSLambda.class);
    AWSLambdaClientBuilder awsLambdaClientBuilder = PowerMockito.mock(AWSLambdaClientBuilder.class);
    AWSStaticCredentialsProvider awsStaticCredentialsProvider = PowerMockito.mock(AWSStaticCredentialsProvider.class);
    PowerMockito.whenNew(AWSStaticCredentialsProvider.class).withAnyArguments().thenReturn(awsStaticCredentialsProvider);
    when(awsLambdaClientBuilder.standard()).thenReturn(awsLambdaClientBuilder);
    when(awsLambdaClientBuilder.withCredentials(anyObject())).thenReturn(awsLambdaClientBuilder);
    when(awsLambdaClientBuilder.withRegion(anyString())).thenReturn(awsLambdaClientBuilder);
    when(awsLambdaClientBuilder.build()).thenReturn(lamdaClient);
    
    ListFunctionsResult listFunctionsResult = new ListFunctionsResult();
    List<FunctionConfiguration> functions = new ArrayList<>();
    FunctionConfiguration functionConfiguration = new FunctionConfiguration();
    functionConfiguration.setFunctionArn("functionArn");
    functions.add(functionConfiguration);
    listFunctionsResult.setFunctions(functions);
    when(lamdaClient.listFunctions(anyObject())).thenReturn(listFunctionsResult);
    
    ListTagsResult listTagsResult = new ListTagsResult();
    listTagsResult.setTags(new HashMap<>());
    when(lamdaClient.listTags(anyObject())).thenReturn(listTagsResult);
    assertThat(inventoryUtil.fetchLambdaInfo(new BasicSessionCredentials("awsAccessKey", "awsSecretKey", "sessionToken"), 
            "skipRegions", "account","accountName").size(), is(1));
    
}
 
示例8
private List<FunctionConfiguration> findAllVersions(AWSLambda client, String functionName) {
	List<FunctionConfiguration> list = new LinkedList<>();
	ListVersionsByFunctionRequest request = new ListVersionsByFunctionRequest()
		.withFunctionName(functionName);
	do {
		ListVersionsByFunctionResult result = client.listVersionsByFunction(request);
		list.addAll(result.getVersions());
		request.setMarker(result.getNextMarker());
	} while (request.getMarker() != null);

	return list;
}
 
示例9
@Test
public void paginatedResponse() throws Exception {
	WorkflowJob job = this.jenkinsRule.jenkins.createProject(WorkflowJob.class, "cfnTest");
	Mockito.when(this.awsLambda.listAliases(Mockito.eq(new ListAliasesRequest().withFunctionName("foo")))).thenReturn(new ListAliasesResult());
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo")))).thenReturn(new ListVersionsByFunctionResult()
			.withNextMarker("baz")
			);
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo").withMarker("baz")))).thenReturn(new ListVersionsByFunctionResult()
			.withVersions(Arrays.asList(
					new FunctionConfiguration().withVersion("v2").withLastModified("2018-02-05T11:15:12Z")
					))
			);
	job.setDefinition(new CpsFlowDefinition(""
				+ "node {\n"
				+ "  lambdaVersionCleanup(functionName: 'foo', daysAgo: 5)\n"
				+ "}\n", true)
			);
	this.jenkinsRule.assertBuildStatusSuccess(job.scheduleBuild2(0));

	Mockito.verify(this.awsLambda).deleteFunction(new DeleteFunctionRequest()
			.withQualifier("v2")
			.withFunctionName("foo")
			);
	Mockito.verify(this.awsLambda, Mockito.times(2)).listVersionsByFunction(Mockito.any());
	Mockito.verify(this.awsLambda).listAliases(Mockito.any());
	Mockito.verifyNoMoreInteractions(this.awsLambda);
}
 
示例10
@Test
public void deleteCloudFormationStack() throws Exception {
	WorkflowJob job = this.jenkinsRule.jenkins.createProject(WorkflowJob.class, "cfnTest");
	Mockito.when(this.awsLambda.listAliases(Mockito.eq(new ListAliasesRequest().withFunctionName("foo")))).thenReturn(new ListAliasesResult());
	Mockito.when(this.awsLambda.listVersionsByFunction(Mockito.eq(new ListVersionsByFunctionRequest().withFunctionName("foo")))).thenReturn(new ListVersionsByFunctionResult()
			.withVersions(Arrays.asList(
					new FunctionConfiguration().withVersion("v1").withLastModified(ZonedDateTime.now().format(DateTimeFormatter.ISO_ZONED_DATE_TIME)),
					new FunctionConfiguration().withVersion("v2").withLastModified("2018-02-05T11:15:12Z")
					))
			);
	Mockito.when(this.cloudformation.describeStackResources(new DescribeStackResourcesRequest().withStackName("baz"))).thenReturn(new DescribeStackResourcesResult().withStackResources(
				new StackResource()
				.withResourceType("AWS::Lambda::Function")
				.withPhysicalResourceId("foo"),
				new StackResource()
				.withResourceType("AWS::Baz::Function")
				.withPhysicalResourceId("bar")
				)
			);
	job.setDefinition(new CpsFlowDefinition(""
				+ "node {\n"
				+ "  lambdaVersionCleanup(stackName: 'baz', daysAgo: 5)\n"
				+ "}\n", true)
			);
	this.jenkinsRule.assertBuildStatusSuccess(job.scheduleBuild2(0));

	Mockito.verify(this.awsLambda).deleteFunction(new DeleteFunctionRequest()
			.withQualifier("v2")
			.withFunctionName("foo")
			);
	Mockito.verify(this.awsLambda).listVersionsByFunction(Mockito.any());
	Mockito.verify(this.awsLambda).listAliases(Mockito.any());
	Mockito.verifyNoMoreInteractions(this.awsLambda);
}
 
示例11
/**
 * Fetch lambda info.
 *
 * @param temporaryCredentials the temporary credentials
 * @param skipRegions the skip regions
 * @param accountId the accountId
 * @param accountName the account name
 * @return the map
 */
public static  Map<String,List<LambdaVH>> fetchLambdaInfo(BasicSessionCredentials temporaryCredentials, String skipRegions,String accountId,String accountName){

	Map<String,List<LambdaVH>> functions = new LinkedHashMap<>();
	String expPrefix = InventoryConstants.ERROR_PREFIX_CODE+accountId + "\",\"Message\": \"Exception in fetching info for resource in specific region\" ,\"type\": \"Lambda\" , \"region\":\"" ;
	for(Region region : RegionUtils.getRegions()){
		try{
			if(!skipRegions.contains(region.getName())){
				AWSLambda lamdaClient = AWSLambdaClientBuilder.standard().
					 	withCredentials(new AWSStaticCredentialsProvider(temporaryCredentials)).withRegion(region.getName()).build();
				ListFunctionsResult listFnRslt ;
				List<FunctionConfiguration> functionsTemp ;
				List<LambdaVH> lambdaList = new ArrayList<>();
				String nextMarker = null;
				do{
					listFnRslt = lamdaClient.listFunctions(new ListFunctionsRequest().withMarker(nextMarker));
					functionsTemp = listFnRslt.getFunctions();
					if( !functionsTemp.isEmpty() ) {
						functionsTemp.forEach( function -> {
							Map<String,String> tags = lamdaClient.listTags(new ListTagsRequest().withResource(function.getFunctionArn())).getTags();
							LambdaVH  lambda = new LambdaVH(function, tags);
							lambdaList.add(lambda);
						});
					}
					nextMarker = listFnRslt.getNextMarker();
				}while(nextMarker!=null);

				if( !lambdaList.isEmpty() ) {
					log.debug(InventoryConstants.ACCOUNT + accountId +" Type : Lambda " +region.getName() + " >> "+lambdaList.size());
					functions.put(accountId+delimiter+accountName+delimiter+region.getName(),lambdaList);
				}
			}
		}catch(Exception e){
			if(region.isServiceSupported(AWSLambda.ENDPOINT_PREFIX)){
				log.warn(expPrefix+ region.getName()+InventoryConstants.ERROR_CAUSE +e.getMessage()+"\"}");
				ErrorManageUtil.uploadError(accountId,region.getName(),"lambda",e.getMessage());
			}
		}
	}
	return functions ;
}