terraform-aws-lambda开源项目

我要开发同款
匿名用户2021年12月02日
136阅读

技术信息

行业分类
云计算
开源地址
https://gitee.com/baidu/Quanlse
授权协议
Apache-2.0 License

作品详情

AWSLambdaTerraformmodule

Terraformmodule,whichcreatesalmostallsupportedAWSLambdaresourcesaswellastakigcareofbuildigadpackagigofrequiredLambdadepedeciesforfuctiosadlayers.

ThisTerraformmoduleisthepartofserverless.tfframework,whichaimstosimplifyalloperatioswheworkigwiththeserverlessiTerraform:

Buildadistalldepedecies-readmore.RequiresPytho3.6orewer.Create,store,adusedeploymetpackages-readmore.Create,update,adpublishAWSLambdaFuctioadLambdaLayer-seeusage.CreatestaticaddyamicaliasesforAWSLambdaFuctio-seeusage,seemodules/alias.Docomplexdeploymets(eg,rollig,caary,rollbacks,triggers)-readmore,seemodules/deploy.FeaturesBuilddepedeciesforyourLambdaFuctioadLayer.SupportbuildslocallyadiDocker(withorwithoutSSHagetsupportforprivatebuilds).Createdeploymetpackageordeployexistig(previouslybuiltpackage)fromlocal,fromS3,fromURL,orfromAWSECRrepository.StoredeploymetpackageslocallyoritheS3bucket.SupportalmostallfeaturesofLambdaresources(fuctio,layer,alias,etc.)Lambda@EdgeCoditioalcreatioformaytypesofresources.Cotrolexecutioofearlyaystepitheprocess-build,package,storepackage,deploy,update.CotrolearlyallaspectsofLambdaresources(provisioedcocurrecy,VPC,EFS,dead-letterotificatio,tracig,asycevets,evetsourcemappig,IAMrole,IAMpolicies,admore).Supportitegratiowithotherserverless.tfmoduleslikeHTTPAPIGateway(seeexamplesthere).UsageLambdaFuctio(storepackagelocally)module"lambda_fuctio"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda1"descriptio="Myawesomelambdafuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"source_path="../src/lambda-fuctio1"tags={Name="my-lambda1"}}LambdaFuctioadLambdaLayer(storepackagesoS3)module"lambda_fuctio"{source="terraform-aws-modules/lambda/aws"fuctio_ame="lambda-with-layer"descriptio="Myawesomelambdafuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"publish=truesource_path="../src/lambda-fuctio1"store_o_s3=trues3_bucket="my-bucket-id-with-lambda-builds"layers=[module.lambda_layer_s3.lambda_layer_ar,]eviromet_variables={Serverless="Terraform"}tags={Module="lambda-with-layer"}}module"lambda_layer_s3"{source="terraform-aws-modules/lambda/aws"create_layer=truelayer_ame="lambda-layer-s3"descriptio="Myamaziglambdalayer(deployedfromS3)"compatible_rutimes=["pytho3.8"]source_path="../src/lambda-layer"store_o_s3=trues3_bucket="my-bucket-id-with-lambda-builds"}LambdaFuctioswithexistigpackage(prebuilt)storedlocallymodule"lambda_fuctio_existig_package_local"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda-existig-package-local"descriptio="Myawesomelambdafuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"create_package=falselocal_existig_package="../existig_package.zip"}LambdaFuctioorLambdaLayerwiththedeployableartifactmaitaiedseparatelyfromtheifrastructure

Ifyouwattomaagefuctiocodeadifrastructureresources(suchasIAMpermissios,policies,evets,etc)iseparateflows(e.g.,differetrepositories,teams,CI/CDpipelies).

Disablesourcecodetrackigtoturoffdeploymets(adrollbacks)usigthemodulebysettigigore_source_code_hash=trueaddeployadummyfuctio.

Whetheifrastructureadthedummyfuctioisdeployed,youcauseexteraltooltoupdatethesourcecodeofthefuctio(eg,usigAWSCLI)adkeepusigthismoduleviaTerraformtomaagetheifrastructure.

Beawarethatchagesilocal_existig_packagevaluemaytriggerdeploymetviaTerraform.

module"lambda_fuctio_exterally_maaged_package"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda-exterally-maaged-package"descriptio="Mylambdafuctiocodeisdeployedseparately"hadler="idex.lambda_hadler"rutime="pytho3.8"create_package=falselocal_existig_package="./lambda_fuctios/code.zip"igore_source_code_hash=true}LambdaFuctiowithexistigpackage(prebuilt)storediS3bucket

NotethatthismoduledoesotcopyprebuiltpackagesitoS3bucket.ThismodulecaolystorepackagesitbuildslocallyadiS3bucket.

locals{my_fuctio_source="../path/to/package.zip"}resource"aws_s3_bucket""builds"{bucket="my-builds"acl="private"}resource"aws_s3_bucket_object""my_fuctio"{bucket=aws_s3_bucket.builds.idkey="${filemd5(local.my_fuctio_source)}.zip"source=local.my_fuctio_source}module"lambda_fuctio_existig_package_s3"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda-existig-package-local"descriptio="Myawesomelambdafuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"create_package=falses3_existig_package={bucket=aws_s3_bucket.builds.idkey=aws_s3_bucket_object.my_fuctio.id}}LambdaFuctiosfromCotaierImagestoredoAWSECRmodule"lambda_fuctio_cotaier_image"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda-existig-package-local"descriptio="Myawesomelambdafuctio"create_package=falseimage_uri="132367819851.dkr.ecr.eu-west-1.amazoaws.com/complete-cow:1.0"package_type="Image"}LambdaLayers(storepackageslocallyadoS3)module"lambda_layer_local"{source="terraform-aws-modules/lambda/aws"create_layer=truelayer_ame="my-layer-local"descriptio="Myamaziglambdalayer(deployedfromlocal)"compatible_rutimes=["pytho3.8"]source_path="../fixtures/pytho3.8-app1"}module"lambda_layer_s3"{source="terraform-aws-modules/lambda/aws"create_layer=truelayer_ame="my-layer-s3"descriptio="Myamaziglambdalayer(deployedfromS3)"compatible_rutimes=["pytho3.8"]source_path="../fixtures/pytho3.8-app1"store_o_s3=trues3_bucket="my-bucket-id-with-lambda-builds"}Lambda@Edge

Makesure,youdeployLambda@EdgefuctiositoUSEast(N.Virgiia)regio(us-east-1).SeeRequiremetsadRestrictiosoLambdaFuctios.

module"lambda_at_edge"{source="terraform-aws-modules/lambda/aws"lambda_at_edge=truefuctio_ame="my-lambda-at-edge"descriptio="Myawesomelambda@edgefuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"source_path="../fixtures/pytho3.8-app1"tags={Module="lambda-at-edge"}}LambdaFuctioiVPCmodule"lambda_fuctio_i_vpc"{source="terraform-aws-modules/lambda/aws"fuctio_ame="my-lambda-i-vpc"descriptio="Myawesomelambdafuctio"hadler="idex.lambda_hadler"rutime="pytho3.8"source_path="../fixtures/pytho3.8-app1"vpc_subet_ids=module.vpc.itra_subetsvpc_security_group_ids=[module.vpc.default_security_group_id]attach_etwork_policy=true}module"vpc"{source="terraform-aws-modules/vpc/aws"ame="my-vpc"cidr="10.10.0.0/16"#Specifyatleastoeof:itra_subets,private_subets,orpublic_subetsazs=["eu-west-1a","eu-west-1b","eu-west-1c"]itra_subets=["10.10.101.0/24","10.10.102.0/24","10.10.103.0/24"]}AdditioalIAMpoliciesforLambdaFuctios

Thereare6supportedwaystoattachIAMpoliciestoIAMroleusedbyLambdaFuctio:

policy_jso-JSONstrigorheredoc,wheattach_policy_jso=true.policy_jsos-ListofJSONstrigsorheredoc,wheattach_policy_jsos=trueadumber_of_policy_jsos>0.policy-ARNofexistigIAMpolicy,wheattach_policy=true.policies-ListofARNsofexistigIAMpolicies,wheattach_policies=trueadumber_of_policies>0.policy_statemets-MapofmapstodefieIAMstatemetswhichwillbegeeratedasIAMpolicy.Requiresattach_policy_statemets=true.Seeexamples/completeformoreiformatio.assume_role_policy_statemets-MapofmapstodefieIAMstatemetswhichwillbegeeratedasIAMpolicyforassumigLambdaFuctiorole(trustrelatioship).Seeexamples/completeformoreiformatio.LambdaPermissiosforallowedtriggers

LambdaPermissiosshouldbespecifiedtoallowcertairesourcestoivokeLambdaFuctio.

module"lambda_fuctio"{source="terraform-aws-modules/lambda/aws"#...omittedforbrevityallowed_triggers={APIGatewayAy={service="apigateway"source_ar="ar:aws:execute-api:eu-west-1:135367859851:aqku8akd0/*/*/*"},APIGatewayDevPost={service="apigateway"source_ar="ar:aws:execute-api:eu-west-1:135367859851:aqku8akd0/dev/POST/*"},OeRule={pricipal="evets.amazoaws.com"source_ar="ar:aws:evets:eu-west-1:135367859851:rule/RuDaily"}}}Coditioalcreatio

SometimesyoueedtohaveawaytocreateresourcescoditioallybutTerraformdoesotallowusageofcoutisidemoduleblock,sothesolutioistospecifycreateargumets.

module"lambda"{source="terraform-aws-modules/lambda/aws"create=false#todisableallresourcescreate_package=false#tocotrolbuildpackageprocesscreate_fuctio=false#tocotrolcreatiooftheLambdaFuctioadrelatedresourcescreate_layer=false#tocotrolcreatiooftheLambdaLayeradrelatedresourcescreate_role=false#tocotrolcreatiooftheIAMroleadpoliciesrequiredforLambdaFuctioattach_cloudwatch_logs_policy=falseattach_dead_letter_policy=falseattach_etwork_policy=falseattach_tracig_policy=falseattach_asyc_evet_policy=false#...omitted}Howdoesbuildigadpackagigwork?

Thisisoeofthemostcomplicatedpartdoebythemoduleadormallyyoudo'thavetokowiterals.

package.pyisPythoscriptwhichdoesit.Makesure,Pytho3.6orewerisistalled.Themaifuctiosofthescriptaretogeerateafileameofzip-archivebasedothecotetofthefiles,verifyifzip-archivehasbeealreadycreated,adcreatezip-archiveolywheitisecessary(durigapply,otpla).

Hashofzip-archivecreatedwiththesamecotetofthefilesisalwaysideticalwhichprevetsuecessaryforce-updatesoftheLambdaresourcesulesscotetmodifies.Ifyoueedtohavedifferetfileamesforthesamecotetyoucaspecifyextrastrigargumethash_extra.

Whecalligthismodulemultipletimesioeexecutiotocreatepackageswiththesamesource_path,zip-archiveswillbecorruptedduetococurretwritesitothesamefile.Therearetwosolutios-setdifferetvaluesforhash_extratocreatedifferetarchives,orcreatepackageoceoutside(usigthismodule)adthepasslocal_existig_packageargumettocreateotherLambdaresources.

Debug

Buildigadpackagighasbeehistoricallyhardtodebug(especiallywithTerraform),sowemadeaefforttomakeiteasierforusertoseedebugifo.Thereare3differetdebuglevels:DEBUG-toseeolywhatishappeigdurigplaigphaseadhowazipfilecotetfilterigicaseofappliedpatters,DEBUG2-toseemoreloggigoutput,DEBUG3-toseeallloggigvalues,DUMP_ENV-toseeallloggigvaluesadevvariables(becarefulsharigyourevvariablesastheymaycotaisecrets!).

Usercaspecifydebuglevellikethis:

exportTF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2terraformapply

Usercaeablecommetsiheredocstrigsipatterswhichcabehelpfulisomesituatios.Todothissetthisevirometvariable:

exportTF_LAMBDA_PACKAGE_PATTERN_COMMENTS=trueterraformapplyBuildDepedecies

Youcaspecifysource_pathiavarietyofwaystoachievedesiredflexibilitywhebuildigdeploymetpackageslocallyoriDocker.Youcauseabsoluteorrelativepaths.Ifyouhaveplacedterraformfilesisubdirectories,otethatrelativepathsarespecifiedfromthedirectorywhereterraformplaisruadotthelocatioofyourterraformfile.

Notethat,whebuildiglocally,filesareotcopyigaywherefromthesourcedirectorieswhemakigpackages,weusefastPythoregularexpressiostofidmatchigfilesaddirectories,whichmakespackagigveryfastadeasytouderstad.

Simplebuildfromsigledirectory

Whesource_pathissettoastrig,thecotetofthatpathwillbeusedtocreatedeploymetpackageas-is:

source_path="src/fuctio1"

Staticbuildfrommultiplesourcedirectories

Whesource_pathissettoalistofdirectoriesthecotetofeachwillbetakeadoearchivewillbecreated.

Combievariousoptiosforextremeflexibility

Thisisthemostcompletewayofcreatigadeploymetpackagefrommultiplesourceswithmultipledepedecies.Thisexampleisshowigsomeoftheavailableoptios(seeexamples/build-packageformore):

source_path=["src/mai-source","src/aother-source/idex.py",{path="src/fuctio1-dep",patters=["!.*/.*\\.txt",#Skipalltxtfilesrecursively]},{path="src/pytho3.8-app1",pip_requiremets=true,prefix_i_zip="foo/bar1",},{path="src/pytho3.8-app2",pip_requiremets="requiremets-large.txt",patters=["!vedor/colorful-0.5.4.dist-ifo/RECORD","!vedor/colorful-.+.dist-ifo/.*","!vedor/colorful/__pycache__/?.*",]},{path="src/pytho3.8-app3",commads=["pmistall",":zip"],patters=["!.*/.*\\.txt",#Skipalltxtfilesrecursively"ode_modules/.+",#Icludeallode_modules],},{path="src/pytho3.8-app3",commads=["gobuild"],patters=<<ENDbi/.*abc/def/.*END}]

Fewotes:

Allargumetsexceptpathareoptioal.patters-ListofPythoregexfileamesshouldsatisfy.Defaultvalueis"icludeeverythig"whichisequaltopatters=[".*"].Thiscaalsobespecifiedasmultilieheredocstrig(ocommetsallowed).Someexamplesofvalidpatters:!.*/.*\.txt#Filteralltxtfilesrecursivelyode_modules/.*#Icludeemptydirorwithacotetifitexistsode_modules/.+#Icludefulloemptyode_modulesdirwithitscotetode_modules/#Icludeode_modulesitselfwithoutitscotet#It'salsoawaytoicludeaemptydirifitexistsode_modules#Icludeafileoraexistigdiroly!abc/.*#Filterouteverythigiaabcfolderabc/def/.*#Re-icludeeverythigiabc/defsubfolder!abc/def/hgk/.*#Filteroutagaiiabc/def/hgksubfoldercommads-Listofcommadstoru.Ifspecified,thisargumetoverridespip_requiremets.:zip[source][destiatio]isaspecialcommadwhichcreatescotetofcurretworkigdirectory(firstargumet)adplacesitisideofpath(secodargumet).pip_requiremets-Cotrolswhethertoexecutepipistall.Settofalsetodisablethisfeature,truetorupipistallwithrequiremets.txtfoudipath.Orsettoaotherfileamewhichyouwattouseistead.prefix_i_zip-Ifspecified,willbeusedasaprefixisidezip-archive.Bydefault,everythigistallsitotherootofzip-archive.BuildigiDocker

IfyourLambdaFuctioorLayerusessomedepedeciesyoucabuildthemiDockeradhavethemicludeditodeploymetpackage.Hereishowyoucadoit:

build_i_docker=truedocker_file="src/pytho3.8-app1/docker/Dockerfile"docker_build_root="src/pytho3.8-app1/docker"docker_image="lambci/lambda:build-pytho3.8"rutime="pytho3.8"#SettigrutimeisrequiredwhebuildigpackageiDockeradLambdaLayerresource.

Usigthismoduleyoucaistalldepedeciesfromprivatehosts.Todothis,youeedforforwardSSHaget:

docker_with_ssh_aget=trueDeploymetpackage-Createoruseexistig

Bydefault,thismodulecreatesdeploymetpackageadusesittocreateorupdateLambdaFuctioorLambdaLayer.

Sometimes,youmaywattoseparatebuildofdeploymetpackage(eg,tocompileadistalldepedecies)fromthedeploymetofapackageitotwoseparatesteps.

Whecreatigarchivelocallyoutsideofthismoduleyoueedtosetcreate_package=falseadtheargumetlocal_existig_package="existig_package.zip".Alteratively,youmayprefertokeepyourdeploymetpackagesitoS3bucketadprovideareferecetothemlikethis:

create_package=falses3_existig_package={bucket="my-bucket-with-lambda-builds"key="existig_package.zip"}UsigdeploymetpackagefromremoteURL

Thiscabeimplemeteditwosteps:dowloadfilelocallyusigCURL,adpasspathtodeploymetpackageaslocal_existig_packageargumet.

locals{package_url="https://raw.githubusercotet.com/terraform-aws-modules/terraform-aws-lambda/master/examples/fixtures/pytho3.8-zip/existig_package.zip"dowloaded="dowloaded_package_${

功能介绍

AWS Lambda Terraform module Terraform module, which creates almost all supported AWS Lambda resou...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论