Blog
Bereitstellen einer gehosteten S3-Anwendung mit CodePipeline

Vor einiger Zeit habe ich geschrieben, wie Sie Ihre eigene einseitige Anwendung auf S3 hosten können. Aber wie bekommen Sie Ihre Anwendung in den S3-Bucket? Hier gibt es mehrere Möglichkeiten: Sie könnten sie von Hand hochladen. Aber wir wissen beide, dass das nicht die richtige Lösung ist. Nein, wir wollen diesen Prozess automatisieren! In diesem Blogbeitrag zeige ich Ihnen, wie Sie dies mit AWS CodePipeline automatisieren können.
Die Pipeline
AWS Codepipeline verwendet verschiedene Phasen. Ich verwende häufig die Phasen Source, Build und Deploy. In einigen Fällen unterteile ich die Bereitstellungsphase in eine Entwicklungs-, Test-, Abnahme- und Produktionsbereitstellung (auch bekannt als DTAP). Wenn Sie mehr darüber wissen möchten, wie Sie dies einrichten können, lesen Sie meinen Blog zum Erstellen von Anwendungen mit Pipelines. Letztendlich liegt es aber an Ihnen und daran, was für Ihren Anwendungsfall sinnvoll ist.
Wenn Sie Ihre Infrastruktur mit CloudFormation bereitstellen . Sie können die Ausgaben innerhalb der CodePipeline verwenden. Eine andere Möglichkeit ist die Verwendung einer Namenskonvention. Ich verwende gerne die Outputs, denn so müssen Sie nicht im Voraus einen Namen festlegen. Das macht es robuster, wenn Sie Snippets wiederverwenden oder Ihre Infrastruktur mehr als einmal bereitstellen.
Outputs:
ApplicationBucketName:
Value: !Ref ApplicationBucket
Als nächstes müssen Sie einen Namespace für die Aktion definieren, die Ihre Infrastruktur bereitstellt.
- Name: ExecuteChangeSet
Region: eu-west-1
RunOrder: 2
RoleArn: !Sub arn:aws:iam::${DevelopmentAccountId}:role/cross-account-role
Namespace: DevelopmentVariables
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: "1"
Configuration:
ActionMode: CHANGE_SET_EXECUTE
RoleArn: !Sub arn:aws:iam::${DevelopmentAccountId}:role/cloudformation-execution-role
StackName: !Sub ${ProjectName}-development
ChangeSetName: !Sub ${ProjectName}-development-ChangeSet
Standardmäßig lädt CodePipeline die Ausgaben im angegebenen Namespace. In diesem Beispiel ist das DevelopmentVariables, so dass die ApplicationBucketName als verfügbar ist: #{DevelopmentVariables.ApplicationBucketName}.
Auf S3 bereitstellen
AWS bietet eine S3 Deploy Aktion, mit der Sie ein Artefakt in Ihrer Pipeline in S3 bereitstellen können. Sie können dieses Artefakt in einem CodeBuild-Projekt erstellen oder das Quell-Artefakt verwenden.
Ich verwende eine kontoübergreifende Bereitstellungsstrategie. Aus diesem Grund muss ich meiner
- Sid: AllowPipelineToUpload
Effect: Allow
Action: s3:PutObject
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:role/cross-account-role
Resource: !Sub ${ApplicationBucket.Arn}/*
Beachten Sie, dass sich die Rolle und der Bucket im selben Konto befinden. Die Pipeline befindet sich in meinem Build/Deployment-Konto. In der Pipeline müssen wir also den Upload auf S3 konfigurieren:
- Name: Ireland-Uploadapplication
Region: eu-west-1
RunOrder: 3
RoleArn: !Sub arn:aws:iam::${DevelopmentAccountId}:role/cross-account-role
InputArtifacts:
- Name: application
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: S3
Version: "1"
Configuration:
BucketName: "#{DevelopmentVariables.ApplicationBucketName}"
Extract: true
CacheControl: max-age=0, no-cache, no-store, must-revalidate
In diesem Beispiel verwende ich mein Artefakt namens Anwendung und extrahiere den Inhalt in den S3-Bucket. Es wird die Rolle annehmen, die wir als CacheControl einstellen, damit CloudFront weiß, dass es die neuen Inhalte bereitstellen muss.
Fazit
Mit der Aktion S3 Deploy können Sie Ihre Inhalte ganz einfach in einen S3-Bucket hochladen. Damit entfällt die Notwendigkeit, ein CodeBuild-Projekt zum Hochladen der Inhalte zu verwenden. Dies reduziert die Kosten und die Komplexität, da Sie kein zusätzliches CodeBuild-Projekt pflegen müssen.
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Unsere Ideen
Weitere Blogs
Contact



