서버리스 애플리케이션 구성 요소 추가 - AWS Marketplace

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

서버리스 애플리케이션 구성 요소 추가

하나 이상의 AWS CloudFormation 템플릿을 사용하여 배송되고, 제품에 서버리스 구성 요소가 통합된 상태에서 Amazon 머신 이미지 (AMI) 가 하나 이상 포함된 상품을 생성할 수 있습니다. 예를 들어 컨트롤러 서버로 구성된 AMI와 작업자 서버로 구성된 또 다른 AMI를 AWS CloudFormation 스택으로 제공하는 제품을 생성합니다. 스택을 생성하는 데 사용되는 AWS CloudFormation 템플릿에는 서버 중 하나의 이벤트에 의해 트리거되는 AWS Lambda 함수를 설정하는 정의가 포함될 수 있습니다.

이 접근 방식을 사용하여 제품을 설계하면 아키텍처를 간소화할 수 있으므로 구매자가 손쉽게 시작할 수 있습니다. 또한 제품을 손쉽게 업데이트할 수 있습니다.

제품에 대한 AMI를 생성하는 방법은 AMI 기반 제품 단원을 참조하십시오. 제품 AWS CloudFormation 템플릿 작성에 대한 자세한 내용은 을 참조하십시오AMI 기반 전송을 사용하여 AWS CloudFormation.

서버리스 애플리케이션을 정의할 때는 에 저장한 AWS Serverless Application Model (AWS SAM) 템플릿을 사용합니다. AWS Serverless Application Repository AWS SAM 서버리스 애플리케이션을 빌드하기 위한 오픈 소스 프레임워크입니다. 배포 중에 구문을 구문으로 AWS SAM 변환하고 확장합니다. AWS Serverless Application Model AWS CloudFormation AWS Serverless Application Repository 는 서버리스 애플리케이션을 위한 관리형 리포지토리입니다. 이 리포지토리를 사용하면 재사용 가능한 애플리케이션을 저장 및 공유할 수 있으므로 구매자가 서버리스 아키텍처를 어셈블하고 배포할 수 있습니다. 이 유형의 제품을 생성하여 제공하려면 다음 단계를 완료하십시오.

AWS Marketplace 리스팅이 생성되기 전에 제품을 검토하고 검증합니다. 제안이 나열되기 전에 해결해야 하는 문제가 있는 경우 이메일 메시지를 보내 드립니다.

구독 이행의 일환으로 AMI, 서버리스 애플리케이션 및 AWS CloudFormation 템플릿을 각각의 AWS Marketplace소유 저장소에 복사합니다. AWS 리전구매자가 제품을 구독할 경우 구매자에게 액세스 권한을 부여하고 소프트웨어 업데이트 시 구매자에게 알립니다.

서버리스 애플리케이션 만들기

첫 번째 단계는 서버리스 애플리케이션을 만드는 데 사용되는 AWS Lambda 함수를 패키징하는 것입니다. 애플리케이션은 작업을 수행하는 데 함께 작동하는 Lambda 함수, 이벤트 소스 및 기타 리소스의 조합입니다. 서버리스 애플리케이션은 단일 Lambda 함수처럼 간단할 수도 있고 API, 데이터베이스, 이벤트 매핑 등 다른 리소스를 갖춘 여러 기능을 포함할 수도 있습니다.

AWS SAM 를 사용하여 서버리스 애플리케이션의 모델을 정의할 수 있습니다. 속성 이름 및 유형에 대한 설명은 AWS Labs AWS::Serverless::Application GitHubon을 참조하십시오. 다음은 단일 Lambda 함수 AWS Identity and Access Management 및 (IAM) 역할을 가진 AWS SAM 템플릿의 예입니다.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example of SAM template with Lambda function and IAM role Resources: SampleFunction: Type: AWS::Serverless::Function Properties: Handler: 'com.sampleproject.SampleHandler::handleRequest' Runtime: java8 CodeUri: 's3://DOC-EXAMPLE-BUCKET/2EXAMPLE-1234-4b12-ac37-515EXAMPLEe5-lambda.zip' Description: Sample Lambda function Timeout: 120 MemorySize: 1024 Role: Fn::GetAtt: [SampleFunctionRole, Arn] # Role to execute the Lambda function SampleFunctionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: "Allow" Principal: Service: - "lambda.amazonaws.com" Action: "sts:AssumeRole" ManagedPolicyArns: - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" Policies: - PolicyName: SFNXDeployWorkflowDefinitionPolicy PolicyDocument: Statement: - Effect: "Allow" Action: - "s3:Get*" Resource: "*" RoleName: "SampleFunctionRole"

리포지토리에 애플리케이션 게시

애플리케이션을 게시하려면 우선 애플리케이션 코드를 업로드합니다. 코드 아티팩트(예: Lambda 함수, 스크립트, 구성 파일)를 계정 소유의 Amazon S3 버킷에 저장합니다. 애플리케이션을 업로드하면 처음에는 비공개로 설정됩니다. 즉, 애플리케이션을 생성한 사람만 사용할 수 있습니다. AWS 계정 업로드한 아티팩트에 액세스할 수 있는 AWS Serverless Application Repository 권한을 부여하는 IAM 정책을 생성해야 합니다.

서버리스 애플리케이션을 서버리스 애플리케이션 리포지토리에 게시하려면
  1. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 애플리케이션을 패키징하는 데 사용한 Amazon S3 버킷을 선택합니다.

  3. 권한 탭을 선택합니다.

  4. 버킷 정책(Bucket Policy)을 선택합니다.

  5. 다음 정책 설명 예시를 붙여넣습니다.

    참고

    이 정책 설명 예시는 다음 단계에서 aws:SourceAccountResource 값이 업데이트될 때까지 오류를 일으킵니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "serverlessrepo.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition" : { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
    1. Resource속성 값의 DOC-EXAMPLE-BUCKET을 버킷의 버킷 이름으로 바꾸십시오.

    2. 요소의 123456789012를 ID로 바꾸십시오. Condition AWS 계정 Condition요소는 지정된 응용 프로그램에 액세스할 수 있는 권한을 AWS Serverless Application Repository 만 갖도록 합니다. AWS 계정

  6. 저장을 선택합니다.

  7. 에서 AWS Serverless Application Repository 콘솔을 엽니다https://console.aws.amazon.com/serverlessrepo.

  8. Applications(애플리케이션) 페이지에서 Publish application(애플리케이션 게시)을 선택합니다.

  9. 필수 필드와 선택 필드(해당하는 경우)를 완료합니다. 필수 필드는 다음과 같습니다.

    • 애플리케이션 이름

    • 작성자

    • 설명

    • 소스 코드 URL

    • SAM 템플릿

  10. Publish Application(애플리케이션 게시)을 선택합니다.

애플리케이션의 후속 버전을 게시하는 방법
  1. 에서 AWS Serverless Application Repository 콘솔을 엽니다https://console.aws.amazon.com/serverlessrepo.

  2. 탐색 창의 My Applications(내 애플리케이션)에서 애플리케이션을 선택합니다.

  3. [새 버전 발행]을 선택합니다.

자세한 내용은 CLI를 사용한 서버리스 애플리케이션 게시를 참조하십시오. AWS SAM

CloudFormation 템플릿 생성

템플릿을 구축하려면 CloudFormation 템플릿 사전 요구 사항을 충족하고 필수 입력 및 보안 매개 변수를 제공해야 합니다. 자세한 내용은 AWS CloudFormation 사용 설명서템플릿 구조를 참조하세요.

CloudFormation 템플릿에서 서버리스 애플리케이션과 AMI를 참조할 수 있습니다. 루트 템플릿과 중첩 CloudFormation 템플릿 모두에서 중첩 템플릿과 참조 서버리스 애플리케이션을 사용할 수도 있습니다. 서버리스 애플리케이션을 참조하려면 AWS SAM 템플릿을 사용합니다. 에서 애플리케이션용 AWS SAM 템플릿을 자동으로 생성할 수 있습니다. AWS Serverless Application Repository다음은 템플릿의 예입니다.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example root template for a SAR application Resources: SampleSARApplication: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-1:1234567890:applications/TestApplication SemanticVersion: 1.0.0 SampleEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: "ami-79fd7eee" KeyName: "testkey" BlockDeviceMappings: - DeviceName: "/dev/sdm" Ebs: VolumeType: "io1" Iops: "200" DeleteOnTermination: "false" VolumeSize: "20" - DeviceName: "/dev/sdk" NoDevice: {}

AWS SAM 템플릿에는 다음 요소가 포함되어 있습니다.

  • ApplicationID - 애플리케이션의 Amazon 리소스 이름(ARN)입니다. 이 정보는 AWS Serverless Application Repository의 내 애플리케이션 섹션에 있습니다.

  • SemanticVersion - 서버리스 애플리케이션의 버전입니다. AWS Serverless Application Repository의 내 애플리케이션 섹션에서 찾을 수 있습니다.

  • Parameter(선택 사항) - 애플리케이션 파라미터입니다.

참고

ApplicationIDSemanticVersion의 경우 내장 함수가 지원되지 않습니다. 이러한 문자열은 하드코딩해야 합니다. 에서 복제하면 ApplicationID 가 업데이트됩니다. AWS Marketplace

CloudFormation템플릿의 구성 및 스크립트 파일을 참조하려는 경우 다음 형식을 사용하십시오. 중첩 템플릿(AWS::Cloudformation::Stack)의 경우 내장 함수 없는 TemplateURLs만 지원됩니다. 템플릿의 Parameters 내용을 메모해 둡니다.

AWSTemplateFormatVersion: '2010-09-09' Metadata: Name: Seller test product Parameters: CFTRefFilesBucket: Type: String Default: "seller-bucket" CFTRefFilesBucketKeyPrefix: Type: String Default: "cftsolutionFolder/additionCFfiles" Resources: TestEc2: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: addCloudAccount: files: /etc/cfn/set-aia-settings.sh: source: Fn::Sub: - https://${CFTRefFilesBucket}.${S3Region}amazonaws.com/${CFTRefFilesBucketKeyPrefix}/sampleScript.sh - S3Region: !If - GovCloudCondition - s3-us-gov-west-1 - s3 owner: root mode: '000700' authentication: S3AccessCreds .. .. .. SampleNestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: 'https://sellerbucket.s3.amazon.com/sellerproductfolder/nestedCft.template' Parameters: SampleParameter: 'test' Transform: AWS::Serverless-2016-10-31

CloudFormation 템플릿 및 구성 파일을 제출하십시오.

CloudFormation 템플릿과 구성 및 스크립트 파일을 제출하려면 이러한 파일이 저장된 Amazon S3 버킷을 읽을 수 있는 AWS Marketplace 권한을 부여하십시오. 이렇게 하려면 다음 권한을 포함하도록 버킷 정책을 업데이트합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "assets.marketplace.amazonaws.com" }, "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] } ] }

AWS Serverless Application Repository 애플리케이션 권한 업데이트

에 신청서를 제출하려면 애플리케이션을 읽을 수 있는 AWS Marketplace 권한을 부여해야 합니다. AWS Serverless Application Repository AWS Marketplace이렇게 하려면 서버리스 애플리케이션에 연결된 정책에 권한을 추가합니다. 두 가지 방법으로 애플리케이션 정책을 업데이트할 수 있습니다.

  • AWS Serverless Application Repository로 이동합니다. 목록에서 서버리스 애플리케이션을 선택합니다. 공유 탭을 선택하고 문 생성을 선택합니다. 문 구성 페이지의 계정 ID 필드에 서비스 주체 assets.marketplace.amazonaws.com을 입력합니다. 그런 다음 저장을 선택합니다.

  • 다음 AWS CLI 명령을 사용하여 애플리케이션 정책을 업데이트하십시오.

    aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy

AMI 공유

구축 및 제출된 모든 AMI는 모든 제품 정책을 AWS Marketplace 준수해야 합니다. 셀프 서비스 AMI 검사는 AWS Marketplace Management Portal에서 사용할 수 있습니다. 이 기능을 사용하면 AMI 검사를 시작할 수 있습니다. 단일 위치에서 분명한 피드백과 함께 검사 결과를 신속하게(대개 1시간 미만) 받을 수 있습니다. AMI를 성공적으로 스캔한 후 상품 로드 양식을 업로드하여 AWS Marketplace 셀러 오퍼레이션 팀에서 처리하도록 AMI를 제출하십시오.

AMI 및 서버리스 애플리케이션을 사용하여 CloudFormation 제품 제출

제품을 제출하기 전에 다음에 유의하십시오.

  • 각 템플릿의 아키텍처 다이어그램을 제공해야 합니다. 다이어그램은 CloudFormation 템플릿을 통해 배포된 각 AWS 서비스의 AWS 제품 아이콘을 사용해야 합니다. 또한 다이어그램에는 서비스의 메타데이터가 포함되어야 합니다. 공식 AWS 아키텍처 아이콘을 다운로드하려면 AWS 아키텍처 아이콘을 참조하세요.

  • 구매자에게 표시되는 각 템플릿의 인프라 추정 비용은 AWS 요금 계산기를 사용하여 제공하는 추정치를 바탕으로 계산됩니다. 추정에는 일반 배포에 대한 기본 값과 함께 템플릿의 일부로 배포되는 서비스의 목록이 포함되어야 합니다.

  • 제품 로드 양식을 완료합니다. 제품 로드 양식은 AWS Marketplace Management Portal에서 찾을 수 있습니다. 단일 AMI 제품과 복수 AMI 제품에 다른 제품 로드 양식이 필요합니다. 제품 로드 양식에서 CloudFormation 템플릿의 공개 URL을 제공합니다. CloudFormation 템플릿은 공개 URL 형식으로 제출해야 합니다.

  • 를 AWS Marketplace Management Portal 사용하여 목록을 제출하십시오. Assets(자산)에서 File upload(파일 업로드)를 선택하고 파일을 첨부한 다음 Upload(업로드)를 선택합니다. 템플릿과 메타데이터를 수신한 후 요청 처리를 AWS 시작합니다.

목록을 제출한 후 제품 로드 양식을 AWS Marketplace 검토하고 검증합니다. 또한 AWS Marketplace AMI와 서버리스 애플리케이션을 지역화하고 사용자 대신 템플릿의 지역 매핑을 업데이트합니다. AWS CloudFormation 문제가 발생하는 경우 AWS Marketplace 셀러 오퍼레이션 팀에서 이메일로 연락을 드립니다.