3
1

GitHubActionsでデプロイするAWS環境を簡単に変更したい

Posted at

はじめに

今回はGitHubActionsにて、同じCFnテンプレートを複数のAWS環境にデプロイすることとなり、それを記事として残していきたいと思います。
S3を例にGithubActionsの作成からCFnでの構築までを記述します。

目次

・GitHubActions
・CloudFormation
・最後に
・参考

GitHubActions

GithubActionsが下記になります。
{AWSAccountId_A},{AWSAccountId_B},{IAMRole}は、任意の値を変更してください。

on:にてenvironmentを追加することで、環境を選択するように設定します。
defaultをdevにすることで間違えて本番環境を選択するリスクを下げることをしています。

また、aws-deployでAWS環境設定をする前に変数設定で、AWSアカウントを環境毎に変更したり、CFnに上書きするパラメータを変更しています。

Deploy-s3.yaml
name: Deploy-s3

on: 
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment Environment'
        required: true
        default: 'dev'
        type: choice
        options:
          - dev
          - pro

permissions:
  id-token: write
  contents: read
jobs:
  aws-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # 変数設定(AccountID、Cfnの環境変数)
      - name: Set AWS account ID based on environment
        id: set-aws-account-id
        run: |
          if [ '${{ github.event.inputs.environment }}' == 'pro' ]; then
            echo "AWS_ACCOUNT_ID={AWSAccountId_A}" >> $GITHUB_ENV
            echo "AWS_CFN_ENV=pro" >> $GITHUB_ENV
          else
            echo "AWS_ACCOUNT_ID={AWSAccountId_B}" >> $GITHUB_ENV
            echo "AWS_CFN_ENV=dev" >> $GITHUB_ENV
          fi

      # IAMロール&リージョン設定
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1-node16
        with:
          role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/{IAMRole}
          aws-region: ap-northeast-1
          
      - name: cloudformation
        run: aws cloudformation deploy --stack-name Deployment-S3 --template-file s3.yaml --parameter-overrides Environment=${{ env.AWS_CFN_ENV }}
        working-directory: ./3_S3

CloudFormation

CloudFormationが下記になります。
GitHubActionsにてParametersのEnvironmentを上書きし、
Mappingを使って、環境毎に値を変更したいものがあるものはこちらで変数を設定します。

s3.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Description: >
  s3bucket deployment
#------------------------------------------------------------#
#Parameters
#------------------------------------------------------------#
Parameters:
  PJPrefix:
    Description: Project Name
    Type: String
    Default: pj-ogataro
    AllowedPattern: ^[a-zA-Z0-9\-]*$
  Environment:
    Description: Environment Name
    Type: String
    Default: dev
    AllowedPattern: ^[a-zA-Z0-9\-]*$
#------------------------------------------------------------#
#Mapping
#------------------------------------------------------------#
Mappings:
  MapEnv:
    dev:
      TagName: Develop-S3
    pro:
      TagName: Product-S3
#------------------------------------------------------------#
#Resources
#------------------------------------------------------------#
Resources:
  PatentS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub '${PJPrefix}-${Environment}-storage'
      VersioningConfiguration:
        Status: Enabled
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      Tags:
        - Key: Name
          Value: !Sub
            - '${TagName}'
            - TagName: !FindInMap [MapEnv, !Ref Environment, TagName]

動作確認

GitHubActionsで実際にRun workflowを実行する際、下記のような状態に変化します。
Deployment Environmentの箇所で環境を選択できるようにしています。

image.png

こちらでproを選択し、実行するとJobのログで下記のように表示されるのを確認し、最後にAWS環境にて正常にS3の名前にproが反映されていることを確認します。
image.png

最後に

GitHubActionsでデプロイするAWS環境を変更する手順は完了です。
参考になれば、幸いです。

参考サイト

GitHubActions

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1