728x90

GCP 로그인 후 화면 우측 상단에서 Cloud shell 버튼을 클릭하여 터미널을 연다.
(프로젝트도 선택된다)

Welcome to Cloud Shell! Type "help" to get started.
Your Cloud Platform project in this session is set to <프로젝트ID>.
Use “gcloud config set project [PROJECT_ID]” to change to a different project.
idogfootman@cloudshell:~ (프로젝트ID)$

터미널에서
gcloud init 을 했더니... (이미 선택되어있었지만)
다시 어떤 프로젝트 환경설정을 할 것인지 정하라고 하네
현재 프로젝트번호를 입력하면
기본 region/zone을 선택하라고 함.

zone 번호를 선택하면 자동으로 region과 zone이 할당 됨.

gcloud list 로 현재 프로젝트 설정을 보여 줌.

test로 vm을 하나 만들어보면 

gcloud compute instances create demo-vm1\
--image-family ubuntu-minimal-2004-lts \
--image-project ubuntu-os-cloud \
--boot-disk-size 10GB \
--machine-type f1-micro

WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#performance.
Created [https://www.googleapis.com/compute/v1/projects/yhnoh-335705/zones/asia-southeast1-a/instances/demo-vm1].
NAME: demo-vm1
ZONE: asia-southeast1-a
MACHINE_TYPE: f1-micro
PREEMPTIBLE:
INTERNAL_IP: 10.148.0.xx
EXTERNAL_IP: 34.124.146.xx
STATUS: RUNNING

간단하게 만들어졌다.

728x90
728x90

파이프라인 생성

    . 파이프라인 이름 : simple-pipeline-aws  (simple-pipeline이라고 project 이름을 지어놔서... 그냥 다르게 이름을 변경 한 것임. )
    . 새서비스 역할
          파이프 라인 이름이 자동으로 뒤에 붙기 되는데... 편집할까?
          역할이름 : AWSCodePipelineServiceRole-ap-northeast-2-simple-pipeline-aws

 

    . 소스 공급자 : AWS CodeCommit
    . Repository : simple-pipeline-repo
    . 브랜치 이름 : master
         (1번에서 repository만 만들고 push된 게 없으므로 추가 필요)

    . 빌드 스테이지 : 빌드는 선택사항이고 이번에는 빌드 없이 가는 것이므로 " 빌드 스테이지 건너뛰기" 선택
    . 배포 스테이지 :
         - 배포공급자 : AWS CodeDeploy
         - 리전 : 아시아 태평양 서울
         - 애플리케이션 이름 : simple-pipeline
         - 배포그룹 : simple-pipeline-deployment-group

    . 파이프라인 생성 버큰 클릭.


    . 생성되면 한번은 pipeline을 실행시키는데 ... 권한부족으로 에러가 나는 경우가 있다.

해당 Role에 권한이 없다는 얘기인데 이름을 보면 Pipeline생성할 때 역할생성 허용으로 만든 이름이다.
무슨권한이 없다는 것일까?
IAM > Role에서 해당권한을 찾아 추가하면 됨.

우선 pipe라인의 어느 단계에서 발생한건지 확인해보니 Source단계다
그래서 codeCommit 권한을 준다. FullAccess로다가
권한 추가 > AWSCodeCommitFullAccess


추가한 다음 CodePipeline으로 와서 "재시도"버튼 클릭
근데 이번에는 다른 오류다

맞다. Repository만 만들고 파일은 하나도 없다 ㅋㅋ

AWS의 도움말에서 제공하는 샘플 프로젝트 파일을 첨부파일로 올려둔다.

SampleApp_Linux.zip
0.01MB

 

파일 구조는

예제에서 MyDemoRepo가 내 repository로 보면 된다.
파일을 하나하나 레파지토리에서 추가해서 넣을 수도 있다.(한번에 1개씩만 된다 ㅡㅡ)
git을 이용하여 추가할 수도 있다.

-- 터미널에서 1단계에서 clone한 위치로 간다.
cd ~/Documents/cicd
cd simple-pipeline-repo
# ls 해서 .git파일만 있는것을 확인한다.
위 SampleApp_Linux.zip 압축을 풀어 파일들을 이곳으로 옮긴다.

 # git 작업
 git add .
 git commit -m "Add sample"
 git push

git push
오브젝트 나열하는 중: 10, 완료.
오브젝트 개수 세는 중: 100% (10/10), 완료.
Delta compression using up to 8 threads
오브젝트 압축하는 중: 100% (8/8), 완료.
오브젝트 쓰는 중: 100% (10/10), 5.31 KiB | 2.66 MiB/s, 완료.
Total 10 (delta 0), reused 0 (delta 0), pack-reused 0
To ssh://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/simple-pipeline-repo
 * [new branch]      master -> master

new branch 로 master 를 생성했다.

 다 올라가면 aws colsole에서 확인
 CodeCommit > Repository > simple-pipeline-repo

이제 Codepipeline으로 가보면 Push했을 때 돌도록 설정이 되어있다(appspec.yml에)
알아서 배포까지 성공되어 있는 상태다



Deploy가 성공했으면 EC2에 해당 소스가 반영되어있다는 뜻이다.
EC2 에 Tag를 줬으므로 해당이름(EC2forCodePipeline)을 검색하여 접속 주소를 확인한다


브라우저에서 해당 EC2주소를 치면 다음과 같이 Congratulations 라고 index.html 파일을 보여준다.

 

-------
AWS의 자습서 사이트의 내용
https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/tutorials-simple-codecommit.html

728x90
728x90

작업에 앞서 역할(Role)을 만든다. EC2를 위한 Role과 별개로 AWSCodeDeployRole 추가.
IAM > 역할 > 역할생성
   . 신뢰할 수 있는 엔터티 유형 : AWS서비스
   . 사용사례 : 다른 AWS 서비스의 사용 사례 선택 -> CodeDeploy 선택 하면 3가지가 나오는데 CodeDeploy 선택

   . 역할세부정보
      역할이름 : CodeDeployRole

역할을 미리 생성했으니 사전작업은 끝났다.


CodeDeploy를 하려면 먼저 application을 지정해야 한다.
그래서 순서상 세번째 메뉴에 있으나 "애플리케이션"을 먼저 만든다.

1. 애플리케이션 생성
CodeDeploy > 애플리케이션 > 애플리케이션 생성
(최초인 경우에는 시작하기 > 애필리케이션 생성)

애플리케이션 이름 : simple-pipeline
컴퓨팅 플랫폼 : EC2/온프레미스

2. 배포그룹 생성
    해당 애플리케이션에 보면 배포그룹이 없다.
    "배포 그룹 생성" 버튼 클릭
    . 배포그룹 이름 : simple-pipeline-deployment-group
    . 서비스 역할 : (돋보기를 클릭하여 CodeDeployRole 선택) 자동으로 arn:xxx/ 뒤에 선택한 역할이 들어온다.

    . 배포유형 : 현재 위치 (In-Place)
    . 환경구성 : Amazon EC2 인스턴스 (바로 이전에 배포용 EC2를 만들었으므로)
                      EC2에 TAG를 지정했으므로 KEY : Name, Value : EC2forCodePipeline 선택.
                      * 이 설정은 EC2에 배포할 때는 필수임.
    . 배포설정 : 배포구성을 CodeDeployDefault.OneAtATime 으로 변경
    . 로드밸런서 : 체크를 해제한다.

 

소스는 아직 안넣었지만.
repository설정, deploy설정을 마쳤으므로 이제 pipeline으로 한번에 흐르게 하면 된다.

728x90
728x90

CodeCommit은 설정을 끝냈고
Deploy를 하는데 서버에 소스 그대로 배포할 것이므로 EC2를 하나 추가한다.
이 때, EC2에 codeDeploy Agent를 설치하도록 Set한다.
EC2에서 CodeCommit에 접근해야하므로 관련 역할도 추가한다.

IAM > 역할 > 역할 만들기
  . 신뢰할 수 있는 엔터티 유형 : AWS 서비스 선택
  . 사용사례 : EC2 선택 하고 다음버튼 클릭
  . 권한정책 : AmazonEC2RoleforAWSCodeDeploy 검색하여 check 한 뒤 다음.
  . 역할이름 : EC2InstanceRole

EC2 > 인스턴스 시작

1. AMI : Amazon Linux 2 AMI 를 선택
2. 인스턴스 유형 : t2.micro
3. 인스턴스 구성
     . 퍼블릭 IP 자동할당 : 활성화
     . IAM 역할선택 : EC2InstanceRole   (위에서 생성한 Role )
     . 고급 세부 정보 [Advanced Detail]
        - 사용자 데이터(User Data) : 텍스트로 선택
        - TextArea에 아래내용 복사. agent를 다운받아 설치하는 것이므로 문구 그대로 입력하면 됨.(ubuntu에서도 같은지는 모르겠음)

#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/ec2-user
wget https://aws-codedeploy-us-east-2.s3.us-east-2.amazonaws.com/latest/install
chmod +x ./install
./install auto

4. 스토리지 추가 : "다음"클릭
5. 태그 추가 : 인스턴스에 Tag를 지정해야 목록에서 구별이 잘 됨.
    Key : Name
    Value : EC2forCodePipeline
6. 보안그룹 구성
    . SSH 의 소스 항목을 "내 IP"로 변경
    . 규칙추가 하여 유형을 "HTTP"로, 소스를 "내 IP"로 변경

7. 검토 및 시작.
    . 키페어를 선택할 수도 있으나, 이번에는 "키페어 없이 계속" 선택
  

 인스턴스가 가동되고 인스턴스 목록을 보면
 TAG로 지정한 값으로 간단히 찾을 수 있다.

 

EC2인스턴스 생성을 했으니
이제 CodeDeploy설정을 할 차례다. - 다음편에 계속

728x90
728x90

CodePipeline으로 소스를 배포하는 예제.
과정이 간단한 것이 아니라 구조가 간단한 것임.

일반적으로는 commit - build - deploy의 구조를 가지는데
build를 빼고 commit - deploy 만 codepipeline으로 묶음.

사용하는 AWS제품은
CodeCommit, CodeDeploy, CodePipeline, S3 bucket, EC2

소스를 push하면 CodeDeploy Agent가 설치된 EC2에 배포한다.
build라는 과정이 없기 때문에 간단과정이다.


이번 설명에서 AWS CodePipe라인은 다음 순서로 설정한다
1. CodeCommit
2. CodeDeploy
3. EC2
4. CodePipeline

CodeCommit Repository : simple-pipeline-repo
Region : 서울 ap-northeast-2

먼저 CodeCommit에 Repository를 생성한다.
. login


. codeCommit > repository > repository 생성 버튼 클릭


. repository 이름 넣고 "생성" 버튼 클릭. (simple-pipeline-repo)

*[참고]루트계정으로 작업하지 않는것을 권장하며
repository를 루트계정으로 생성하면 ssh로 작업을 할 수 없다
아래와 같이 https로만 연결 가능하므로 IAM 유저를 추가한 다음 작업하는 것을 추천.

root계정으로 repository 생성핼을 때.

 . Repository가 생성되면 "연결 단계" 설정을 해야한다.
   HTTPS, SSH, HTTPS(GRC) 세 가지가 있으며
   조금 복잡하지만 SSH 방식으로 진행한다.
   아래 그림과 같이 연결단계는 MacOS, Windows, Linux 별 설정이 다르니 해당 OS에 맞는 설정을 한다.
   MacOS 를 클릭하면 설정방법이 나타난다. 

  . 1단계로 : 사전요구사항인데. 작업할 PC에 git이 깔려있어야 하고 IAM 유저가 CodeCommit를 쓰기위한 권한이 있어야하고 팀원초대하는데. 우선은 혼자 작업할 예정이므로 스킵.
  . 2단계 : SSH 퍼블릭 키 등록. Repository의 source를 git clone, push를 하기위해 키 등록을 해야한다.
     적절한 권한이 없이 그냥 clone 하면 id/pass를 물어보고 권한이 없어서 안된다고 한다.

git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/simple-pipeline-epo
'simple-pipeline-repo'에 복제합니다...
Username for 'https://git-codecommit.ap-norththeast-1.amazonaws.com': noman
Password for 'https://noman@git-codecommit.ap-northeast-2.amazonaws.com':
fatal: unable to access 'https://git-codecommit.ap-norththeast-2.amazonaws.com/v1/repos/simple-pipeline-repo/': The requested URL returned error: 403


     - 터미널에서 작업
        #폴더 이동
        cd ~/.ssh
        #Key 생성 ssh-keygen명령을 실행하고 keypair 파일명 입력 passphrase는 생략가능하므로 그냥 엔터만 쳐도 된다.(엔터 2번)
        ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): aws_seoul-codecommit-keypair
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in aws_seoul-codecommit-keypair
Your public key has been saved in aws_seoul-codecommit-keypair.pub
The key fingerprint is: xxxxx

 ** 다른 repository에서도 사용가능한지는 확인 안해봤으나 가능할 것으로 보고 이름을 좀 넓은 의미로 지음.

      # ls 를 해 보면 1쌍의 key pair파일이 생성되었다. ( xxx.pub, xxx)
      ls

      # xxx.pub파일의 내용 확인
      cat ~/.ssh/aws-seoul-codecommit-keypair.pub
      그러면 ssh-rsa ~~~ user-name@...
      이 내용을 모두 복사한다.
      ex)

ssh-rsa AAAA - 중 간 생 략 -0K2xI71eoVRMe6fbp13WJl8mrtdYgxglfOCMnV9K+OFyeQj7/cuiw5uK0QadZywSBReMDhN4RkHKMBe6wW7KrLPRCoBOlFqnvXP4kFGOko4 - 중 간 생 략 -D8/6TjIgT2A+MgNuM= noman@MYPC.local

    - AWS Console에서 작업 : SSH 퍼블릭 키 업로드
       . IAM > 좌측메뉴 사용자 > 사용자 목록에서 사용자 선택 > 보안 자격 증명 Tab

           . 아래로 scroll "AWS CodeCommit"에 대한 SSH 키 항목에 "SSH 퍼블릭 키 업로드" 버튼 클릭

        . xxx.pub파일에 있는 내용을 붙여 넣는다.

      . 생성하면 SSH KEY ID 가 생성된다. 사용하지 않을 때는 "비활성화"를 클릭하면 되고, 필요없을 때는 X 버튼을 누르면 된다.

      . 3단계 : ssh 구성 편집
        # config라는 파일을 생성하여 방금 생성한 ssh key id와 생성된 파일위치를 지정한다.
        vi config

Host git-codecommit.*.amazonaws.com
  User APKAQXV6Fxxxxx
  IdentityFile ~/.ssh/aws-seoul-codecommit-keypair

        # config 파일에 권한 변경 : 작업 디렉토리는 반드시 ~/.ssh 여야한다.
        chmod 600 config

      . 4단계 : Repository 복제
       # 로컬로 clone
       # 작업할 directory로 이동
       pwd
       cd ~/Documents/cicd
       # 접속Test : ssh key id 와 해당 region정보로
       ssh APKAQXV6Fxxxxx@git-codecommit.ap-northeast-2.amazonaws.com
       정상인 경우 아래와 같은 메세지가 나온다.

You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.ap-northeast-2.amazonaws.com closed by remote host.
Connection to git-codecommit.ap-northeast-2.amazonaws.com closed.


      # Clone : AWS console에서 해당 repository에 주소가 있으므로 그대로 복사.
      git clone ssh://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/simple-pipeline-repo

      # yes를 입력하면 현재 소스는 없이 repository만 만들었으므로 빈 것 같다는 말이 나옴.     

      # ls -al 해 보면 simple-pipeline-repo 폴더가 생겼고 .git만 하나 있음.
      cd simple-pipeline-repo
      ls -al
          

 

728x90
728x90

VSCode를 웹에서 쓸 수 있게 되었다.
https://vscode.dev 라는 사이트로 접속하면
바로 vscode 를 실행한 것과 같은 화면이 나타난다.
(첫인상은 오~~~ 똑같네?)

여기에서 repository에 연동하면 code를 다운받아 바로 사용할 수 있는데
github 계정에 로그인해서 token을 받으면 된다.

클라우드9(cloud9)이나 구름IDE(groom ide) 를 통해서 할 때에는
가상의 컴퓨터(?)에 세팅을 해서 쓰기 때문에 terminal을 통해 build 하여 직접 서비스도 가능한데

vscode web버전은 github에 연동하여 source 등록/수정 등의 작업만 가능하다.
만약 github actions를 통해 build/deploy환경이 구축되어 있으면 잘 쓸 수 있을 것 같기는 하다.

특히 ipad같은 패드에서 코딩하려고 할 때(그냥 아이패드에서 하고 싶을 때) 유용하다고나 할까?
ssh 앱으로 서버에 접속해서 build에러는 따로 확인해야하겠지만
그래도 간단한 조작으로 코딩이 되니 뭐 나름 쓸만하기는 한데
막상 패드로 코딩할 일이 그닥...

이제부터 저것을 어떻게 활용하면 좋을지 생각해봐야겠다.

728x90

AWS Quota 늘리기

2022. 2. 3. 14:02
728x90

Resource handler returned message: "The maximum number of internet gateways has been reached.

The maximum number of VPCs has been reached. (Service: AmazonEC2; Status Code: 400; Error Code: VpcLimitExceeded;

이런식의 오류가 나면
기본 quota는 5개인데 5개 모두 썼다는 뜻이므로 할당량 증가 요청을 해야한다.

설명: https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html

 

Amazon VPC quotas - Amazon Virtual Private Cloud

Amazon VPC quotas The following tables list the quotas, formerly referred to as limits, for Amazon VPC resources per Region for your AWS account. Unless indicated otherwise, you can request an increase for these quotas. For some of these quotas, you can vi

docs.aws.amazon.com

여기에서 쿼타 늘리는 링크는 아래 주소이다.
https://console.aws.amazon.com/servicequotas/home/services/vpc/quotas/L-F678F1CE?#

메뉴는
Service Quotas > AWS서비스 > Amazon Virtual Private Cloud (Amazon VPC) > VPCs per Region

aws console로그인 한 뒤 위 링크주소로 이동.-> region 변경한 후에
할당량 증가 요청 버튼 클릭

할당량을 원하는 만큼 추가

각 리전별로 할당량이 기본값 5로 정해져 있으므로
리전마다 필요시 요청해야한다.
그리고 요청은 바로 처리되지 않고 24~48시간은 기다려야 한다. Email로 결과를 알려준다고 하니...

"EC2 서비스 할당량 증가 요청은 AWS 엔지니어링 팀의 검토를 거칩니다. 서비스 할당량 증가 요청은 제출 후에 즉시 처리되지 않습니다. 요청이 처리되면 이메일이 수신될 것입니다."

728x90
728x90

환경구성중에 마지막 단계인
docker push에서 401 에러가 난다... 해결이 되지 않네.. 쩝.

 

작업단계 1. aws에 iam 계정 생성
권한은 S3FullAcess 로 추가하고
access key id와 secret access key 를 복사 해 둔다.

작업단계 2. aws에 s3 bucket을 생성한다
 추후 물어보기 때문에 region정보를 기록해 둔다 : ap-northeast-2    (아시아 태평양-서울)

작업단계 3. docker 계정정보 확인
id, access token 확인
(docker홈페이지  Account Settings > Security 에서 access token 생성)

작업단계 4. github 에 repository 생성 및 설정
 . Settings > secrets > actions에 사용할 값들 추가

작업단계 5. github repository에 파일 생성
 . main.go, Dockerfile 등

작업단계 6. actions 에 yaml 파일 생성
 . 작업단계 4에서 생성한 KEY를 이용하여 yaml파일 생성
 . commit 하면 자동으로 action이 실행 됨.
 . build fail이 401이 계속남.... 쩝.

728x90
728x90

1. Flutter의 경우 android, ios, web 등의 접속정보를
각각 생성해 사용해야 한다.

android app용으로 google-services.json 파일 생성 후
그 안의 apiKey등을 웹에서 사용 할 수 없다.

2. 여러개의 firebase project는 1개의 App에서 사용할 수 있지만
그 반대인 여러개의 App에서 1개의 firebase project는 쓰기 어렵다.
(구글링 해 본 결과 1개 app은 1개 firebase project를 권장)

3. app/build.gracle에서 minSdkVersion은 19보다 크게하고
그 이하에서 실행되는 것을 고려하여 multiDexEnabled를 추가한다.
 defaultConfig {
minSdkVersion 20   ---> 19보다 크게
...
multiDexEnabled true
}

 

728x90
728x90

go lang에서 go.mod 파일에서

indirect 는 go.mod에는 추가되었으나 소스코드 상에서 사용하지 않는 module

+incompatible 로 표시되는 경우
revision에 tag는 만들어져 있지만 root directory에 go.mod파일이 없는 경우, 즉 module 제작자가 go module로 선언하지 않았을 때 붙는 꼬릿말(suffix)이라고 하네

개발자가 이게 모듈이라고 처리해야 해결되는 것임.

참조 :

https://blog.puppyloper.com/menus/Golang/articles/Golang%EC%9D%98%20module%20system

 

Puppyloper's Blog

 

blog.puppyloper.com

 

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :