Het Automatiseren van Veilige Lambda-Implementaties van Git

0
243

De Lambda is een web-gebaseerde tekst-editor die je waarschijnlijk al eerder gebruikt voor het schrijven van je functies. Het is geweldig voor beginners leren het platform, maar het is niet de beste manier om te gaan over het omgaan met updates. Hier is het bijhouden van uw Lambda functies op Git.

Hoe CI/CD Voor Lambda Werkt

In plaats van het gebruik van de handleiding editor, moet u de ontwikkeling van uw functies lokaal, plegen en druk verandert in een Git repo, en hebben CodePipeline handvat bouw en implementatie voor u.

CodePipeline draait automatisch wanneer het detecteert veranderingen in uw bron controle, en stuurt de wijzigingen over te CodeBuild (of Jenkins) voor de bouw. Deze stap is optioneel, en je zou niet gebruiken voor Lambda, maar als u iets van de Schrijfmachine moet u dit stadium. Na het bouwen, worden wijzigingen worden doorgegeven aan CodeDeploy, die zorgt voor de implementatie.

CodeDeploy wordt automatisch uw Lambda functies en duw een nieuwe versie. Om de implementatie proces soepeler, kan deze verschuiving van het verkeer geleidelijk aan met behulp van een alias, tot 100% van het verkeer is gericht op de nieuwe functie.

Voor het verwerken van de werkelijke implementatie, CodeDeploy gebruikt AWS de Serverloze Toepassing Model (SAM). SAM is een uitbreiding van CloudFormation, een infrastructure-as-code service. Het is in feite een door de mens leesbare data-serialisatie taal (YAML) sjabloon die wordt gebruikt voor het verwerken van alle configuratie verband met de implementatie van de Lambda functie en hun voorwaarden, en is een essentieel onderdeel van het kunnen implementeren van het gebruik van enige code.

Het Opzetten Van Een Besturings Element Bron

Deze stap is vrij eenvoudig. U wilt voor het maken van een nieuw project directory naar alle van uw code, en initialiseren met Git. De SAM sjabloon zal gaan in de hoofdmap van de map, met de naam sjabloon.yml. Elke functie zal gaan in hun eigen map, met de wortel index.js voor elk. Dit is een duidelijk scheidt van alles, en maakt het makkelijker te beheren

ProjectDirectory
|–sjabloon.yml
|–Function
| |–index.js
|–AnotherFunction
|–index.js

CodePipeline ondersteunt Github en BitBucket voor bronbestrijding. Als u een van deze, al wat je hoeft te doen is het aanmaken van een nieuwe tak voor implementaties (of gebruik gewoon master, als je dat goed). Als u een andere dienst, zal u wilt gebruiken AWS eigen CodeCommit bron controle als een secundaire archief, het duwen van wijzigingen wanneer u wilt om updates te maken.

Het schrijven van een SAM-Sjabloon

In deze stap worden de meest complexe, en meest die specifiek zijn voor uw functie en de bijbehorende eisen. Je hebt te maken met een SAM-sjabloon dat u uw Lambda functie, en alle van de benodigde middelen.

Een basis template er als volgt uitziet:

AWSTemplateFormatVersion: ‘2010-09-09’
Transformeren: AWS::Serverloze-2016-10-31
Beschrijving: Een AWS Serverloze Specificatie sjabloon beschrijving van uw functie
Bronnen:
HelloWorld:
Type: AWS::Serverloze::Functie
Eigenschappen:
Handler: HelloWorld/index.handler
Runtime: nodejs8.10

Deze registers een bron, een Lambda functie die draait op NodeJS, en heeft haar handler in HelloWorld/index.js.

U kunt het implementeren van andere bronnen van de SAM-sjabloon. Bijvoorbeeld, om op te geven API Gateway toestemming te beroepen op uw functie en uw functie uit te voeren op een specifieke API pad, zou je het volgende toevoegen:

AWSTemplateFormatVersion: ‘2010-09-09’
Transformeren: AWS::Serverloze-2016-10-31
Beschrijving: Een AWS Serverloze Specificatie sjabloon beschrijving van uw functie
Bronnen:
HelloWorld:
Type: AWS::Serverloze::Functie
Eigenschappen:
Handler: HelloWorld/index.handler
Runtime: nodejs8.10
Evenementen:
HelloWorldApi:
Type: Api
Eigenschappen:
Path: /helloworld
Methode: VOOR
HelloWorldPermission:
Type: AWS::Lambda::Toestemming
Eigenschappen:
Actie: lambda:InvokeFunction
Functienaam:
Fn::GetAtt:
– HelloWorld
– Arn
Opdrachtgever: apigateway.amazonaws.com
SourceArn:
Fn::Sub: arn:aws:uitvoeren-api:${AWS::Regio}:${AWS::AccountId}:*/*/*/*

U zult zeker meer specifieke toepassingen dan die welke hier worden vermeld, dus voor meer informatie over SAM kunt u, lees onze gids om te werken, AWS, de ontwikkelaar van gidsen, of het volledige schema op Github.

Wanneer u een sjabloon, kunt u de test implementatie door het installeren van de SAM CLI:

pip installeren aws-sam-cli

Vervolgens kunt u het pakket van uw project en het opslaan van de artefacten in een S3 bucket:

sam package
–template-bestand sjabloon.yml
–output-template-bestand pakket.yml
–s3-emmer emmer-naam

En je zult het handmatig uitvoeren van de implementatie:

sam deploy
–template-bestand pakket.yml
–stack-naam sam-hello-world /
–mogelijkheden CAPABILITY_IAM

Als alles werkt goed, ziet u een nieuwe CloudFormation stack en een toepassing in Lambda met uw functies.

De verpakking en de Implementatie van het Project met CodePipeline

Dit stadium is niet optioneel, zelfs als u niet werkt met een taal die gecompileerd. Met behulp van het SAM-sjabloon, CodeBuild zal hier gebruikt worden om het handvat van de verpakking van het project in iets dat kan worden geïmplementeerd met CodeDeploy heel gemakkelijk. Optioneel kunt u het uitvoeren van andere opdrachten voor het verpakken, zoals npm uitvoeren bouwen en npm installeren.

U moet eerst een uitvoering rol in staat om de CloudFormation updates. Open de IAM Management Console voor het toevoegen van een nieuwe rol. Selecteer “CloudFormation” als de bron die gebruik maken van deze rol, bevestig dan de “AWSLambdaExecute toestemming beleid.

Sla de rol, opent en sluit u de volgende inline-beleid:

{
“Verklaring”: [
{
“Actie”: [
“apigateway:*”,
“codedeploy:*”,
“lambda:*”,
“cloudformation:CreateChangeSet”,
“iam:GetRole”,
“iam:CreateRole”,
“iam:DeleteRole”,
“iam:PutRolePolicy”,
“iam:AttachRolePolicy”,
“iam:DeleteRolePolicy”,
“iam:DetachRolePolicy”,
“iam:PassRole”,
“s3:GetObject”,
“s3:GetObjectVersion”,
“s3:GetBucketVersioning”
],
“Bron”: “*”,
“Effect”: “Toestaan”
}
],
“Versie”: “2012-10-17”
}

Het maken van een nieuwe pijpleiding van de CodePipeline console. Kies de standaardinstellingen van het maken van een nieuwe service rol. Zal dit automatisch worden geconfigureerd.

Voor de bron controle podium, kies uw bron van controle-type, repo, en de release-branch.

Voor het bouwen van het podium, wil je een nieuw project maken in CodeBuild. De standaard configuratie is prima, gewoon kiezen Amazon Linux 2 als de bouw van het besturingssysteem, en selecteer de standaard runtime en een standaard beeld.

Het belangrijkste wat je nodig hebt voor codePipeline is uw buildspec.yml bestand, geplaatst in de root van uw project directory. Dit stelt CodeBuild met de commando ‘ s moet uitvoeren. De volgende configuratie is een voorbeeld voor het installeren van de Schrijfmachine, alle NPM pakketten, loopt npm uitvoeren bouwen, en vervolgens pakketten alles voor CloudFormation.

versie: 0.2
fasen:
installeren:
runtime-versies:
nodejs: 10
commando ‘ s:
– npm installeren -g typescript
bouwen:
commando ‘ s:
– echo Bouw begon op `datum`
– npm installeren tijd
– npm uitvoeren bouwen
– export EMMER=typoscript-lambda
– aws cloudformation pakket –template-bestand sjabloon.yml –s3-emmer $EMMER –output-template-bestand outputtemplate.yml
artefacten:
type: zip
bestanden:
– sjabloon.yml
– outputtemplate.yml

U zult waarschijnlijk moeten dit wijzigen voor uw project.

Zodra dat is gedaan, kunt u de laatste fase. In plaats van CodeDeploy al, gebruiken we CloudFormation om de update direct dingen, als alle van de verpakking is er gebeurd in de bouwfase toch. Kies “CloudFormation” als het implementeren van provider, en de actie-modus “Maak of vervangen van een change set.” Voer een nieuwe naam in, en wijzig set naam.

Voor de sjabloon, selecteert u “BuildArtifact,” en voer in outputtemplate.yml uit de vorige stap. Toevoegen Vermogen “IAM” tot de mogelijkheden, en selecteer de rol die u handmatig eerder hebt gemaakt.

Klik op “Maken” en je leiding moet draaien zonder fouten. Echter, de CloudFormation fase maakt een wijziging van de set, die is als een voorbeeld van de wijzigingen. Om daadwerkelijk implementeren van de veranderingen die we nodig hebben voor het uitvoeren van de change set.

Klik op “Bewerken” voor je gemaakt pijplijn. Onder “Implementeren”, klik op “Bewerken” en klik op “Add Action Group” na de reeds gemaakte actie. Als u de nieuwe actie voor deze, het zal niet werken.

Kies “CloudFormation” als de provider. Selecteer “BuildArtifact” als de input-artefact. Voor de actie-modus en het wijzigen ingesteld naam, voer op dezelfde waarden die u hebt gemaakt voor de eerste implementatie van de actie.

Klik op “Opslaan” en u zult worden teruggebracht naar de leiding van de belangrijkste scherm. Klik op “Release Change” handmatig uitvoeren van de pijpleiding weer. Het moet nu compleet, en de veranderingen worden zichtbaar in de Lambda-console.

Als u fouten krijgt, het is vrij eenvoudig op te sporen, als u klikt op “Meer Details” volgende fout bericht in CodePipeline. Het is waarschijnlijk een mislukte bouwen, een onvolledige SAM sjabloon, of onvoldoende machtigingen voor CodeBuild of CloudFormation.

Als je wijzigingen vastlegt om uw bron te bedienen, het zouden moeten worden gedetecteerd door CodePipeline, en begint het hele proces weer opnieuw.