๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
DevOps
15-SDK-CLI

1. SDK

  • SDK(Software Development Kit, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ)
    • ์ •์˜ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ์ง‘ํ•ฉ
  • AWS์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ SDK๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • e.g. JS, Python, PHP, .Net, Ruby, Java, Go, Node.js, C++
  • ๋˜ํ•œ ์›น๊ณผ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ์œ„ํ•œ SDK๋„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•œ๋‹ค.
    • e.g. Web : JS, React, Angular, Vue, Next.js
    • e.g. Mobile : Android, IOS, React Native, Ionic, Flutter
  • cf. AWS ๊ณต์‹๋ฌธ์„œ SDK : https://aws.amazon.com/ko/developer/tools/

2. CLI

  • CLI (Command Line Interface, ๋ช…๋ นํ–‰ ๋„๊ตฌ) : ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ
  • AWS์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ CLI๊ฐ€ ์žˆ๋‹ค.
    • AWS CLI, PowerShell Tools, EC2 AMI Tools, Elastic Beanstalk CLI
    • ECS CLI, Amplify CLI, Serverless Application Model(SAM) CLI, Compilot
  • cf. AWS ๋ช…๋ น์ค„ ๋„๊ตฌ

3. (์‹ค์Šต) Node.js์™€ npm ์„ค์น˜

Node.js LTS ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.


4. (์‹ค์Šต) Shared Credential ์„ค์ •

  • Shared Credentials(๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…)
    • ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์— AWS ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•จ์œผ๋กœ์จ
    • ํ•ด๋‹น ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ณ„๋„์˜ ์„ค์ • ์—†์ด
    • SDK๋‚˜ CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AWS ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
  • ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์€ AWS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฑฐ์˜ ํ•„์ˆ˜์ 
  • cf. ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช… ์ƒ์„ฑ : ๊ณต์œ  config ๋ฐ credentials ํŒŒ์ผ

๋จผ์ € ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•œ IAM ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

  • [IAM] โ†’ ์™ผ์ชฝ ๋ฉ”๋‰ด [์‚ฌ์šฉ์ž] โ†’ [์‚ฌ์šฉ์ž ์ƒ์„ฑ] ๋ฒ„ํŠผ์„ ํด๋ฆญ
    • ์‚ฌ์šฉ์ž ์ด๋ฆ„ : admin
    • [๋‹ค์Œ] ๋ฒ„ํŠผ์„ ํด๋ฆญ
  • [์ง์ ‘ ์ •์ฑ… ์—ฐ๊ฒฐ] ์˜ต์…˜์„ ์„ ํƒ.
    • ์•„๋ž˜์— ๊ถŒํ•œ ์ •์ฑ… ๋ชฉ๋ก์ด ๋‚˜์˜ค๋Š”๋ฐ, ์—ฌ๊ธฐ ๊ฒ€์ƒ‰์ฐฝ์— s3full ์ด๋ผ๊ณ  ๊ฒ€์ƒ‰.
    • AmazonS3FullAccess ์ •์ฑ…์„ ํด๋ฆญ.
    • ์ฒดํฌํ•œ ์ดํ›„์— [๋‹ค์Œ] ๋ฒ„ํŠผ์„ ํด๋ฆญ.
  • ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ๋Š” ์•ž์—์„œ ์„ค์ •ํ•œ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ ๋” ํ™•์ธํ•œ๋‹ค.
    • ์ด์ƒ์ด ์—†๋‹ค๋ฉด [์‚ฌ์šฉ์ž ์ƒ์„ฑ] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

IAM ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ƒ ์ƒ์„ฑ๋˜๋ฉด, ์œ„์— [์‚ฌ์šฉ์ž ๋ณด๊ธฐ]๋ฅผ ํด๋ฆญํ•ด ์‚ฌ์šฉ์ž ์ƒ์„ธ์ •๋ณด๋ฅผ ๋‚˜์˜จ๋‹ค.

  • ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ [๋ณด์•ˆ ์ž๊ฒฉ ์ฆ๋ช…] ํƒญ์„ ํด๋ฆญํ•œ๋‹ค.
  • [์•ก์„ธ์Šค ํ‚ค ๋งŒ๋“ค๊ธฐ] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.
  • (์•ก์„ธ์Šค ํ‚ค ์ƒ์„ฑ) ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.
    • ์‚ฌ์šฉ ์‚ฌ๋ก€ : Command Line Interface(CLI)๋ฅผ ์„ ํƒ
    • ์œ„์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๋Š” ํ™•์ธ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ฒดํฌ ํ‘œ์‹œ
    • [๋‹ค์Œ] ๋ฒ„ํŠผ์„ ํด๋ฆญ
    • ํƒœ๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋‹จ๊ณ„์ธ๋ฐ ๊ฑด๋„ˆ๋›ด๋‹ค.
    • [์•ก์„ธ์Šค ํ‚ค ๋งŒ๋“ค๊ธฐ] ๋ฒ„ํŠผ์„ ํด๋ฆญ.
    • ์•ก์„ธ์Šค ํ‚ค๋Š” ์ฒ˜์Œ ๋งŒ๋“œ๋Š” ์‹œ์ ์—๋งŒ ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • [.csv ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ] ๋ฒ„ํŠผ์„ ํด๋ฆญ
  • IAM ์‚ฌ์šฉ์ž์˜ ์•ก์„ธ์Šค ํ‚ค ๋ชฉ๋ก์„ ๋ณด๋ฉด, ์•ก์„ธ์Šค ํ‚ค๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์€ ๊ฐ ์šด์˜์ฒด์ œ๋ณ„๋กœ ์‚ฌ์ „์— ์ •ํ•ด์ง„ ์œ„์น˜์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.

  • Linux ๋ฐ Mac :
    • ~/.aws/config
    • ~/.aws/credentials
  • Windows
    • %USERPROFILE%\.aws\config
    • %USERPROFILE%\.aws\credentials

cf. Config์™€ Credentials ํŒŒ์ผ ๋‘˜ ๋‹ค ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†๊ณ  ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

1
$ mkdir ~/.aws
2
$ cd ~/.aws
3
$ vim credentials # vim config

์ดํ›„ credentials ํŒŒ์ผ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

1
[default]
2
region = ap-northeast-2
3
aws_access_key_id = ๋‚ดaws์•ก์„ธ์Šคํ‚ค
4
aws_secret_access_key = ๋‚ด๊ฐ€์ƒ์„ฑํ•œ์‹œํฌ๋ฆฟํ‚ค

์•„๊นŒ IAM ์‚ฌ์šฉ์ž์˜ accesskey๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ CSV ํŒŒ์ผ์„ ์—ด์–ด์„œ,

  • accesskey ID์™€ secret accesskey๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ ๋„ฃ์–ด์ค€๋‹ค.
  • ํŒŒ์ผ์„ ๋ชจ๋‘ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด, ๋ช…๋ น ๋ชจ๋“œ์—์„œ :wq๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ €์žฅํ•˜๊ณ  ๋‚˜๊ฐ„๋‹ค.

5. (์‹ค์Šต) AWS SDK for JS

๋ฐ”ํƒ•ํ™”๋ฉด์— aws๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ ํŒŒ์ผ์„ vscode ํ„ฐ๋ฏธ๋„๋กœ ์—ฐ๋‹ค.

1
npm init -y
2
3
# s3๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ AWS SDK ํŒจํ‚ค์ง€ ์„ค์น˜
4
npm install --save @aws-sdk/client-s3

package.json ํŒŒ์ผ์— type:module์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

package.json
1
{
2
"name": "aws",
3
"version": "1.0.0",
4
"description": "",
5
"main": "index.js",
6
"scripts": {
7
"test": "echo \"Error: no test specified\" && exit 1"
8
},
9
"keywords": [],
10
"author": "",
11
"license": "ISC",
12
"dependencies": {
13
"@aws-sdk/client-s3": "^3.490.0"
14
},
15
"type": "module"
16
}
  • type์„ module๋กœ ํ•ด์ฃผ๋ฉด Node.js์—์„œ ECMA ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

index.js ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค.

index.js
1
import { CreateBucketCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3'
2
3
export async function main() {
4
const s3Client = new S3Client({})
5
6
// S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ
7
const bucketName = '์ž์‹ ์˜ ๋ฒ„ํ‚ท ์ด๋ฆ„์„ ์ž…๋ ฅ'
8
await s3Client.send(
9
new CreateBucketCommand({
10
Bucket: bucketName,
11
}),
12
)
13
14
// S3 ๋ฒ„ํ‚ท์— ํŒŒ์ผ ์—…๋กœ๋“œ
15
await s3Client.send(
16
new PutObjectCommand({
17
Bucket: bucketName,
18
Key: 'hello.txt',
19
Body: 'Hello, JavaScript SDK!',
20
}),
21
)
22
}

AWS SDK๋ฅผ ์‚ฌ์šฉํ•ด์„œ S3 ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฒ„ํ‚ท์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

1
node index.js

์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด, AWS ์ฝ˜์†” S3 ํŽ˜์ด์ง€์— ์ƒˆ๋กœ ๋ฒ„ํ‚ท์ด ์ƒ์„ฑ๋œ๋‹ค.

  • ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๋ถ€์— hello.txt๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • cf. ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ์—…๋กœ๋“œ๋œ ๊ฐ์ฒด๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ํด๋ฆญํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„๋ณด๋ฉด, ์ฝ”๋“œ์—์„œ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด ์ž˜ ๋‚˜์˜จ๋‹ค.
  • cf. ๋งŒ์•ฝ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด,
    • ๊ณต์œ  ์ž๊ฒฉ ์ฆ๋ช…์ด ์ œ๋Œ€๋กœ ์„ค์ •๋˜์–ด์žˆ์ง€ ์•Š๊ฑฐ๋‚˜, ์ฝ”๋“œ ์ƒ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ

6. (์‹ค์Šต) AWS CLI ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ

AWS CLI ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ ์ดํ›„ ํ„ฐ๋ฏธ๋„์„ ์—ฐ๋‹ค.

1
# ์ž˜ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ๋ฒ„์ „ ํ™•์ธ
2
$ aws --version
3
4
# S3 ๋ฒ„ํ‚ท ๋ชฉ๋ก ์ถœ๋ ฅ
5
$ aws s3 ls
6
7
# S3 ์ƒˆ ๋ฒ„ํ‚ท ์ƒ์„ฑ (๋ฒ„ํ‚ท์ด๋ฆ„์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ์ž…๋ ฅ)
8
# mb (make bucket์˜ ์•ฝ์ž)
9
$ aws s3 mb s3://<๋ฒ„ํ‚ท์ด๋ฆ„>

๊ฐ„๋‹จํ•œ hello.txt ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค. ๋‚ด์šฉ์€ ์•„๋ฌด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

1
# S3 ๋ฒ„ํ‚ท์— ํŒŒ์ผ ์—…๋กœ๋“œ
2
# cp (copy์˜ ์•ฝ์ž)
3
$ aws s3 cp hello.txt s3://<๋ฒ„ํ‚ท์ด๋ฆ„>
4
5
# S3 ๋ฒ„ํ‚ท ์‚ญ์ œ (๋ฒ„ํ‚ท์€ ๋น„์–ด์žˆ์–ด์•ผ๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ)
6
# rb (remove bucket์˜ ์•ฝ์ž)
7
# force ์˜ต์…˜ : ๊ฐ•์ œ๋กœ ์ง„ํ–‰
8
$ aws s3 rb --force hello.txt s3://<๋ฒ„ํ‚ท์ด๋ฆ„>

6.1 AWS CLI Command Ref

  • https://awscli.amazonaws.com/v2/documentation/api/latest/reference/index.html
  • AWS CLI์—๋Š” ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ ์ˆ˜๋งŽ์€ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘ ์™ธ์šฐ๋Š”๊ฒŒ ๋ถˆ๊ฐ€๋Šฅ.
  • ๊ทธ๋ž˜์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ๋ช…๋ น์–ด๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜์ž.