با استفاده از AWS CDK و Azure DevOps، به طور خودکار روی برنامه AWS Runner اجرا شود

آپدیت چیه؟
بهروزرسانیهای جریان Azure DevOps
من جریان را به روز کردم و یک مرحله برای اجرای آن اضافه کردم cdk deploy
فرمان
من ساخت و توسعه را به دو قالب جدا می کنم. من الگوها را در خطوط لوله خود قرار می دهم.
- خطوط لوله (azure-pipelines.yml)
trigger:
- main
pr:
- main
variables:
- group: 'AWS'
pool:
vmImage: ubuntu-22.04
parameters:
- name: awsCredentials
displayName: AWS Credentials
type: string
default: 'AWS-Dev-AssumeRole'
- name: region
displayName: AWS Region
type: string
default: 'ap-southeast-1'
steps:
- template: build.yml
parameters:
awsCredentials: ${{ parameters.awsCredentials }}
region: ${{ parameters.region }}
- ${{ if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
- template: deploy.yml
parameters:
awsCredentials: ${{ parameters.awsCredentials }}
region: ${{ parameters.region }}
parameters:
- name: awsCredentials
displayName: AWS Credentials
type: string
default: 'AWS-Dev-AssumeRole'
- name: region
displayName: AWS Region
type: string
default: 'ap-southeast-1'
steps:
- script: npm install -g aws-cdk
displayName: 'Install AWS CDK'
- script: cd SimplePasswordManagerService.Infra && cdk synth
displayName: 'CDK Synth'
- task: Docker@2
displayName: 'Build Docker Image'
inputs:
command: 'build'
Dockerfile: 'Dockerfile'
repository: 'spms'
tags: '$(Build.BuildId)'
parameters:
- name: awsCredentials
displayName: AWS Credentials
type: string
default: "AWS-Dev-AssumeRole"
- name: region
displayName: AWS Region
type: string
default: "ap-southeast-1"
steps:
- task: ECRPushImage@1
displayName: "Push Image to ECR"
inputs:
awsCredentials: "${{ parameters.awsCredentials }}"
regionName: "${{ parameters.region }}"
sourceImageName: "spms"
sourceImageTag: "$(Build.BuildId)"
repositoryName: "spms"
pushTag: "$(Build.BuildId)"
- script: cd SimplePasswordManagerService.Infra && cdk deploy SimplePasswordManagerServiceInfraStack --parameters "imageTag=$(Build.BuildId)"
displayName: CDK Deploy
env:
AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
AWS_DEFAULT_REGION: ${{ parameters.region }}
ساختارهای CDK!
من ارائه دهنده ECR را به کلاس SpamsRepo (پشته متفاوت) منتقل می کنم. من مقداری تنظیمات را به پشته قبلی اضافه می کنم:
- ECR ایجاد شده را بخوانید.
- اسرار ایجاد شده از Secret Manager را بخوانید.
- پارامتر را بخوانید
imageTag
و ارائه App Runner Service.
توجه داشته باشید: پشته قبلی را حذف می کنم. شما ممکن است این کار را در تولید خود انجام ندهید! من هنوز در حال آزمایش هستم، بنابراین با از دست دادن داده ها مشکلی ندارم.
خط لوله فراهم خواهد کرد imagesTag
. به هر حال من در حال حاضر این خط لوله را یک محیط توسعه می دانم. به طور خودکار برنامه را در App Runner مستقر می کند. من قصد دارم خط لوله انتشار را برای پست بعدی اضافه کنم.
می توانید به کدهای cdk من نگاه کنید.
using Amazon.CDK;
using Amazon.CDK.AWS.AppRunner.Alpha;
using Amazon.CDK.AWS.ECR;
using Constructs;
using System.Collections.Generic;
namespace SimplePasswordManagerService.Infra {
public class SimplePasswordManagerServiceInfraStack : Stack {
internal SimplePasswordManagerServiceInfraStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) {
// 0.0 ECR
var repository = Repository.FromRepositoryName(this, "spms-ecr", "spms");
// 1.0 AppRunner
var appRunnerSecret = Amazon.CDK.AWS.SecretsManager.Secret.FromSecretNameV2(this, "apprunner-secret", "dev/AppRunner/spms");
var imageTag = new CfnParameter(this, "imageTag", new CfnParameterProps {
Type = "String",
Description = "Target tag"
});
var appRunner = new Service(this, "spms-apprunner", new ServiceProps {
Source = Source.FromEcr(new EcrProps {
Repository = repository,
ImageConfiguration = new ImageConfiguration {
Port = 80,
EnvironmentSecrets = new Dictionary<string, Secret> {
{"Authentication__Microsoft__ClientId", Secret.FromSecretsManager(appRunnerSecret, "Authentication__Microsoft__ClientId")},
{"Authentication__Microsoft__ClientSecret", Secret.FromSecretsManager(appRunnerSecret, "Authentication__Microsoft__ClientSecret")},
{"ConnectionStrings__mongo", Secret.FromSecretsManager(appRunnerSecret, "ConnectionStrings__mongo")},
},
EnvironmentVariables = new Dictionary<string, string> {
{"ASPNETCORE_FORWARDEDHEADERS_ENABLED", "true" }
}
},
TagOrDigest = imageTag.ValueAsString
}),
});
new CfnOutput(this, "output-spms-apprunner-url", new CfnOutputProps {
Value = appRunner.ServiceUrl
});
}
}
}
مخازن
برنامه من منبع باز است. با خیال راحت خطوط لوله و کدهای CDK را ببینید! در صورت تمایل کمی بازخورد بدهید.
وب سرویس مدیریت رمز عبور ساده
سرویس مدیریت رمز عبور ساده
ابزار
.خالص
خطوط لوله
Azure DevOps
flowchart TD
A[Install AWS CDK CLI] --> B(CDK Synth)
B --> C[Docker Build]
C --> D{Is Running in Main?}
D -->|Yes| E[Push to ECR]
D -->|No| F[End]
E --> G[CDK Deploy]
G --> F
مجوز
با
متشکرم
با تشکر از شما برای خواندن! روز خوبی داشته باشی.