코드 파이프 라인을 사용하여 인프라를 배포하고 있으며 다른 환경 (dev, staging, prod ...)에 배포 할 수 있기를 원합니다.CodePipeline에서 여러 환경을 처리하는 방법은 무엇입니까?
현재 "pip install"지침과 "aws cloudformation package"명령이 포함 된 buildspec.yml 파일이 있습니다. 또한 프로덕션 용 파이프 라인 2 개와 github에서 2 개의 다른 브랜치를 가리키는 개발 용 파이프 라인 2 개를 만들었습니다. 내가 가진 문제는 두 가지 분기에서 파일에 유사한 리소스가 포함되어 있기 때문에 S3 버킷에 이름 충돌이 발생했기 때문입니다.
AWS CLI 및 cloudform을 사용하여 스택을 생성하거나 업데이트 할 때 --parameters 옵션을 사용하여 매개 변수를 전달할 수 있습니다. 내가 만든 2 개의 파이프 라인에서 비슷한 것을하고 싶습니다.
이 문제를 해결하는 가장 좋은 해결책은 무엇입니까?
마지막 목표는 인프라 구축을 자동화하는 것입니다. 우리의 인프라는 사용자, KMS 키, Lamdbas (파이썬에서), 그룹 및 버킷으로 구성됩니다.
내가 자습서 다음과 같은 두 개의 파이프 라인을 만들었습니다 http://docs.aws.amazon.com/lambda/latest/dg/automating-deployment.html
첫 번째 파이프 라인은 코드와 준비 지점에 두 번째를 포함하는 REPO의 마스터 지점에 연결되어 있습니다. 필자의 목표는 두 번째 파이프 라인을 사용하는 준비 환경의 첫 번째 파이프 라인과 준비 지점을 사용하여 프로덕션 환경에서 마스터 분기의 배포를 자동화하는 것입니다.
같은 내 buildspec.yml 파일보기 :
version: 0.1
phases:
install:
commands:
- pip install requests -t .
- pip install simplejson -t .
- pip install Image -t .
- aws cloudformation package --template-file image_processing_sam.yml --s3-bucket package-bucket --output-template-file new_image_processing_sam.yml
artifacts:
type: zip
files:
- new_image_processing_sam.yml
처럼 image_processing_sam.yml 파일보기 :
AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Description: Create a thumbnail for an image uploaded to S3
Resources:
ThumbnailFunction:
Type: "AWS::Serverless::Function"
Properties:
Role: !GetAtt LambdaExecutionRole.Arn
Handler: create_thumbnail.handler
Runtime: python2.7
Timeout: 30
Description: "A function computing the thumbnail for an image."
LambdaSecretEncryptionKey:
Type: "AWS::KMS::Key"
Properties:
Description: "A key used to encrypt secrets used in the Lambda functions"
Enabled: True
EnableKeyRotation: False
KeyPolicy:
Version: "2012-10-17"
Id: "lambda-secret-encryption-key"
Statement:
-
Sid: "Allow administration of the key"
Effect: "Allow"
Principal:
AWS: "arn:aws:iam::xxxxxxxxxxxxx:role/cloudformation-lambda-execution-role"
Action:
- "kms:Create*"
- "kms:Describe*"
- "kms:Enable*"
- "kms:List*"
- "kms:Put*"
- "kms:Update*"
- "kms:Revoke*"
- "kms:Disable*"
- "kms:Get*"
- "kms:Delete*"
- "kms:ScheduleKeyDeletion"
- "kms:CancelKeyDeletion"
Resource: "*"
-
Sid: "Allow use of the key"
Effect: "Allow"
Principal:
AWS:
- !GetAtt LambdaExecutionRole.Arn
Action:
- "kms:Encrypt"
- "kms:Decrypt"
- "kms:ReEncrypt*"
- "kms:GenerateDataKey*"
- "kms:DescribeKey"
Resource: "*"
LambdaExecutionRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: "LambdaExecutionRole"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- "lambda.amazonaws.com"
Action:
- "sts:AssumeRole"
Policies:
-
PolicyName: LambdaKMS
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action:
- "kms:Decrypt"
Resource: "*"
-
Effect: "Allow"
Action:
- "lambda:InvokeFunction"
Resource: "*"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
UserGroup:
Type: "AWS::IAM::Group"
LambdaTriggerUser:
Type: "AWS::IAM::User"
Properties:
UserName: "LambdaTriggerUser"
LambdaTriggerUserKeys:
Type: "AWS::IAM::AccessKey"
Properties:
UserName:
Ref: LambdaTriggerUser
Users:
Type: "AWS::IAM::UserToGroupAddition"
Properties:
GroupName:
Ref: UserGroup
Users:
- Ref: LambdaTriggerUser
Policies:
Type: "AWS::IAM::Policy"
Properties:
PolicyName: UserPolicy
PolicyDocument:
Statement:
-
Effect: "Allow"
Action:
- "lambda:InvokeFunction"
Resource:
- !GetAtt DispatcherFunction.Arn
Groups:
- Ref: UserGroup
PackageBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: "package-bucket"
VersioningConfiguration:
Status: "Enabled"
Outputs:
LambdaTriggerUserAccessKey:
Value:
Ref: "LambdaTriggerUserKeys"
Description: "AWSAccessKeyId of LambdaTriggerUser"
LambdaTriggerUserSecretKey:
Value: !GetAtt LambdaTriggerUserKeys.SecretAccessKey
Description: "AWSSecretKey of LambdaTriggerUser"
내가 계산 변경 세트를 실행하는 두 파이프 라인에 배포 작업을 추가 한 베타 조치 중.
첫 번째 파이프 라인은 매력처럼 작동하며 기대하는 모든 작업을 수행합니다. 마스터 브랜치에서 코드를 푸시 할 때마다 배포됩니다.
내가 직면 한 문제는 준비 분기에 코드를 푸시하면 배포 작업에 도달 할 때까지 모든 것이 파이프 라인에서 작동한다는 것입니다. deploy 액션은 새로운 스택을 만들려고 시도하지만, 똑같은 buildspec.yml과 처리 된 image_processing_sam.yml이기 때문에 아래와 같이 이름 충돌이 발생합니다.
package-bucket already exists in stack arn:aws:cloudformation:eu-west-1:xxxxxxxxxxxx:stack/master/xxxxxx-xxxx-xxx-xxxx
LambdaTriggerUser already exists in stack arn:aws:cloudformation:eu-west-1:xxxxxxxxxxxx:stack/master/xxxxxx-xxxx-xxx-xxxx
LambdaExecutionRole already exists in stack arn:aws:cloudformation:eu-west-1:xxxxxxxxxxxx:stack/master/xxxxxx-xxxx-xxx-xxxx
...
buildspec.yml image_processing_sam.yml에있는 자원의 이름에 접미사를 추가 할 수 있도록 매개 변수화 할 수있는 방법이 있습니까? 이를 달성하기위한 다른 아이디어는 환영합니다.
감사합니다.
안녕하세요,이 이번 주에 테스트 할 시간이 없어하지만 난 그것을 시도하고 최대한 빨리 답변을 받아 들일 수 있는지 확인합니다. 시간과 자세한 답변을 보내 주셔서 감사합니다. – JonathanGailliez
시험 된 어제 전체 코드 예제는 여기에서 볼 수 있습니다. 271 라인 : https://github.com/byu-oit-appdev/iac/blob/master/cloudformation/codepipeline/lambda-pipeline-cf.yaml –
안녕하세요. 솔루션을 검증하고 검증 할 시간을 가지십시오. 그것은 실제로 진행하는 방법입니다. 자세한 답변과 시간 내 주셔서 다시 한 번 감사드립니다. 친애하는. – JonathanGailliez