iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
DevOps

探索亞馬遜雨林30天系列 第 15

Day 15: 運用CodePipeline部署程式碼到EC2(上)

  • 分享至 

  • xImage
  •  

如果想要透過CI/CD把在git或gitlab的程式碼自動部署到AWS EC2,除了用Opsworks之外,也可以使用AWS CodePipeline做自動化部署,接下來會介紹使用AWS CodePipeline需要哪些事前準備,以及如何使用CodePipeline,今天會先來介紹事前準備的部分。

在設定AWS CodePipeline前,需要幾個前置作業,才能夠順利的把程式碼從git或gitlab拉到EC2裡面:

  • 在要部署的code加上appspec.yml檔
  • 建置EC2機器

加上appspec.yml檔

為了能夠在CodeDeploy部署的時候,讓EC2知道要執行哪些指令和設定,程式碼必須包含appspec.yml檔。這個yml檔可以設定好每個部署階段需要執行的script。

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/
hooks:
  BeforeInstall:
    - location: test.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: test.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: test.sh
    - location: test.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: test.sh
      timeout: 300
      runas: root

以上面的範例來說,需要執行test.sh這個script,那麼就需要把這個script放在指定的路徑。
Example: https://gitlab.com/hjoruhjoru/go-socket-server/-/tree/stage-dev?ref_type=heads

建置EC2機器

EC2可以透過serverless framwork和cloudformation進行deploy,可以參考Day 12: 使用serverless framework建置AWS EC2這篇文章。

CodePipeline部署時,如果是選擇從s3取得build好的程式碼,EC2需要額外設定role,並在policy設定允許存取s3的權限。在serverless.yml裡面,可以透過InstanceProfile為EC2設定符合需求的iam role和policy。

resources:
  Resources:
    MyEC2SSMRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                Service: ec2.amazonaws.com
              Action: sts:AssumeRole
        Policies:
          - PolicyName: EC2SSMRolePolicy
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: Allow
                  Action:
                    - s3:*
                  Resource: "*"

    EC2InstanceProfile:
      Type: AWS::IAM::InstanceProfile
      Properties:
        Roles:
          - !Ref MyEC2SSMRole

    EC2Instance:
      Type: AWS::EC2::Instance
      Properties: 
        ImageId: ami-0e82a6c15615ee580
        KeyName: test-blue-green
        InstanceType: t2.micro
        SubnetId: subnet-0765f5ad5c906b284
        SecurityGroupIds:
          - sg-0ac58053047cef6d1
        IamInstanceProfile: !Ref EC2InstanceProfile

這樣我們就準備好部署程式碼到EC2的前置作業。


上一篇
Day 14: 使用serverless framework設定EC2的VPC、Subnet和對外連線
下一篇
Day 16: 運用CodePipeline部署程式碼到EC2(下)
系列文
探索亞馬遜雨林30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言