Githubアクションを使用したアプリケーション配備の自動化


GitHubアクションは、すべてのソフトウェアのワークフローを自動化することが容易になります.Githubからコードをビルド、テスト、配備できます.このポストでは、どのようにGOTTUBアクションを使用してAWS上のサーバーレスアプリケーション展開を自動化する方法を検討します.AWSの独自のCI/CDサービスを使用しても同じことができます.しかし、ここでは、我々の議論をgithub行動に制限し続けます.

GitHubアクションの使い方


Githubアクションの作成は簡単です.自動化し、アクションをクリックしたいGitHubリポジトリに移動します

あなたは、新しい空白のワークフローを作成したり、市場から既存のアクションを選択するアクションページに撮影されます.市場からのアクションは、ワークフローで使用できる再利用可能なアクションです.我々は空白のアクションを作成するつもりです、我々はまた、市場からいくつかのアクションを使用します.

YAMLファイルをワークフローに変更します.京大理何でも好きな名前をつけます.Serverless Application Model(SAM)テンプレートでAPIゲートウェイを持つラムダ関数を作成し、Githubアクションを使用して展開します.
以下はSAMテンプレートです.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  GitHub Actions demonstration App
Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
    Auth:
     UsagePlan:
      CreateUsagePlan: PER_API
      Description: Usage plan for this API
      Quota:
       Limit: 500
       Period: MONTH
      Throttle:
       BurstLimit: 100
       RateLimit: 50
  LamdbaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./    
      Handler: lambda.handler
      Runtime: python3.8
      Events:
        getCounter:
          Type: Api
          Properties:
            Path: /hello
            Method: get
            RestApiId: !Ref ApiGatewayApi
ラムダ.パイ
def handler(event, context):
            return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*'
        },
        'body':'Hello from Lambda!'
        ,
        "isBase64Encoded": False
    }
これは1つのラムダ関数とAPIを含んでいます.まずSAM CLIを使用して手動で展開します.samconfigを作成します.詳細は以下のtoml.
SAMConfigでSAM展開と更新に使用されるS 3 Rayバケットを作成します.TOML
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "sam-github-actions-app"
s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-1xyg1t2j2ws5k"
s3_prefix = "sam-app"
region = "us-east-1"
confirm_changeset = false
capabilities = "CAPABILITY_IAM"
また、空の要件を作成します.テンプレートと一緒にtxt.京大理Sam buildとsam deploy - gをCLIで実行します.

APIゲートウェイに移動し、ブラウザでURLをヒット.“ラムダからこんにちは”を取得する必要がありますレスポンス.

Githubの上で我々のワークフローファイルに戻ってください.我々は、更新プログラムをRepoにプッシュするとすぐに展開されます.
以下はワークフローです.気象研
# This is a basic workflow to help you get started with Actions
name: AWS Lambda & API gateway deployment demonstration
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2
    # Installs Python
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    # Installs PIP
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
    # Configures AWS credentials from github secrets
    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1
    # Build using SAM 
    - name: SAM Build
      uses: youyo/aws-sam-action/python3.8@master
      with:
        sam_command: build
      env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION:  us-east-1
    # Deploy on AWS
    - name: sam deploy
      uses: youyo/aws-sam-action/python3.8@master
      with:
          sam_command: 'deploy --stack-name myApp --no-fail-on-empty-changeset'
      env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: us-east-1
まず、このアクションをマスターにプッシュして実行したいことを示します.次に、我々の手順を実行するランナー(Ubuntu)を選択します.手順では、まずコードをチェックアウトし、Pythonとその依存関係をインストールします.それから、我々はAWS資格情報を構成するために市場からの他の動作を使用します、そして、我々はSAMビルドとSAM配備をするもう一つの行動を使用します.注意してください、私たちは、コマンドのための行動のためにキー供給AWSアクセスキーと秘密のアクセスキーを必要とします.私たちはここでgithubの秘密を設定します.

すぐにチェックインのワークフロー.このアクションはトリガされる.

スタックの配備


これでAWSコンソールにログインでき、スタックが確認されます.

タブにアクセスし、APIゲートウェイにアクセスします.ステージに行って、prodステージAPIにアクセスしてください.
ブラウザのURLをPATH/Helloで開きます.

おめでとう!あなたはGATHUBアクションを使用してAWS展開を自動化しました!
ここからコードをダウンロードできます.