Я новичок в CodeBUild и пытаюсь упаковать и развернуть лямбда-функцию. У меня есть файл buildspe c .yaml, и его содержимое выглядит следующим образом:
version: 0.2
phases:
install:
pre_build:
commands:
- echo "[Pre-Build phase]"
build:
commands:
- aws cloudformation package --template-file template.yaml --s3-bucket <bucketname> --output-template-file packaged.yaml
- aws s3 cp ./packaged.yaml s3://testbucketdemo/packaged.yaml
- aws s3 cp s3://testbucketdemo/packaged.yaml C:\codebuild\tmp\output
post_build:
commands:
- aws cloudformation deploy --template-file C:\codebuild\tmp\output\packaged.yaml --stack-name testcvdg
artifacts:
type: zip
files:
- packaged.yaml
Мой template.yaml выглядит следующим образом:
AWSTemplateFormatVersion: "2010-09-09"
Transform: 'AWS::Serverless-2016-10-31'
Description: "My API Gateway and Lambda function"
Parameters:
apiGatewayStageName:
Type: "String"
AllowedPattern: "^[a-z0-9]+$"
Default: "dev"
lambdaFunctionName:
Type: "String"
AllowedPattern: "^[a-zA-Z0-9]+[a-zA-Z0-9-]+[a-zA-Z0-9]+$"
Default: "my-function"
Resources:
apiGateway:
Type: "AWS::ApiGateway::RestApi"
Properties:
Name: "cf-DBTableScheduling"
Description: "DBTableScheduling-apigateway by CF"
dbconn:
Type: "AWS::ApiGateway::Resource"
Properties:
RestApiId: !Ref apiGateway
ParentId: !GetAtt
- apiGateway
- RootResourceId
PathPart: dbconn
apiGatewayRootMethod:
Type: "AWS::ApiGateway::Method"
Properties:
AuthorizationType: "NONE"
HttpMethod: "POST"
Integration:
IntegrationHttpMethod: "POST"
Type: AWS
Credentials: "arn:aws:iam::1231544:role/ApiGatewayInvokeLambdaRole"
Uri: !Sub
- "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations"
- lambdaArn: "arn:aws:lambda:us-east-2:123154878:function:Lambda-DBConnMgmtFunction-3T876IRCHJJGHJG"
ResourceId: !Ref "dbconn"
RestApiId: !Ref "apiGateway"
MethodResponses:
- StatusCode: 200
ResponseParameters:
method.response.header.Content-Type: true
apiGatewayDeployment:
Type: "AWS::ApiGateway::Deployment"
DependsOn:
- "apiGatewayRootMethod"
Properties:
RestApiId: !Ref "apiGateway"
StageName: !Ref "apiGatewayStageName"
DBConnMgmtFunctionTesting:
Type: AWS::Serverless::Function
Properties:
CodeUri: DBConnMgmtFunction
Handler: com.test.dbconnmgmt.lambda.DBConnMgmtLambda::handleRequest
Runtime: java8
FunctionName: !Ref "lambdaFunctionName"
MemorySize: 1024
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
REGION: us-east-2
DYNAMODB_NAME: DBConnectionInfo
lambdaLogGroup:
Type: AWS::Logs::LogGroup
Properties:
# LogGroupName: !Sub "/aws/lambda/${DBConnMgmtFunctionTesting}"
LogGroupName: !Join
- ''
- - /aws/lambda/
- !Ref lambdaFunctionName
RetentionInDays: 90
Outputs:
apiGatewayInvokeURL:
Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}"
Теперь это работает всегда, если я запускаю проэкт. Но каждый раз мне нужно скопировать выходной файл packaged.yaml на S3, а затем снова с S3 на какой-то путь, который может использовать облачная информация, поскольку после пакета облачной информации выходные данные сохраняются по какому-либо пути, например C: \ codebuild \ tmp \ output \ src169630847 \ src \ github.com \ naoleyrashmi \ dgweyy \ packaged.yaml и если я непосредственно использую aws cloudformation deploy --template-file packaged.yaml --capabilities CAPABILITY_IAM --stack-name testcvdg, облачная информация не получает пакет .yaml. Есть ли какой-нибудь четкий способ использования этого? Я даже пытался использовать SAM с помощью sam build и sam deploy, но даже здесь sam deploy попросил бы меня подтвердить набор изменений, и нет никакого способа подавить этот набор или установить для changeset значение Y. Может кто-нибудь, пожалуйста, помогите здесь.