서버리스 프레임워크로 AWS Parameter Store를 절약하는 방법
13712 단어 todayilearnedjavascriptawstutorial
문제:
API 키 또는 데이터베이스 암호를 참조하는 코드 내에서 하드 코딩된 값을 사용하는 것은 좋지 않은 관행이며 보안 위험이 될 수도 있습니다. 또는 비즈니스 결정이나 예상치 못한 상황으로 인해 시간이 지남에 따라 변경될 수 있는 가치를 가질 수 있습니다. 이는 값을 변경해야 할 때마다 코드를 변경해야 함을 의미합니다. 이를 위해 Parameter Store라는 AWS Systems Manager 서비스를 사용할 수 있습니다.
Parameter Store은 구성 데이터 관리 및 비밀 관리를 위한 안전한 계층적 스토리지를 제공하는 AWS Systems Manager의 기능입니다. 암호, 데이터베이스 문자열, Amazon 머신 이미지(AMI) ID 및 라이선스 코드와 같은 데이터를 파라미터 값으로 저장할 수 있습니다. 값을 일반 텍스트 또는 암호화된 데이터로 저장할 수 있습니다.
그러나 여러 변수를 사용해야 하는 경우에는 어떻게 됩니까? 그것들을 유지하는 것은 어렵지만 여러 개발 환경에서 문제는 두 배가 됩니다. 계정 및 지역당 10,000개의 표준 매개변수라는 하드 캡 한도에 쉽게 도달할 수 있습니다.
이 문제를 어떻게 해결합니까?
여러 매개변수 저장소를 저장할 수 있습니다. JSON 형식으로 작성하기 시작하면 명확하고 체계적인 방식으로 정리할 수 있습니다.
JSON 값으로 Parameter Store를 생성해 보겠습니다. 이 예에서는 이름과 성을 값으로 사용하겠습니다.
/dev/myapp/INFO >> {"firstName":"David","lastName":"Llerena"}
서버리스 프레임워크로 Typescript 서버리스 Lambda 프로젝트를 생성합니다. 다음 종속성을 추가해 보겠습니다.
//package.json
{
"name": "myapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"aws-sdk": "2.952.0",
"@types/aws-lambda": "^8.10.95",
"serverless": "^3.15.2",
"serverless-plugin-typescript": "^2.1.2",
"typescript": "^4.6.3"
},
"author": "",
"license": "ISC"
}
이제
helperScript.js
라는 파일에 자바스크립트 코드를 생성하고, SSM 서비스를 호출하고 JSON 값의 각 값을 구문 분석하고 읽을 매개변수 저장소를 읽는 함수를 생성합니다. ResolveConfigurationProperty 문은 serverless.yml
파일에 선언된 서비스의 단계와 이름을 참조합니다.//helperScript.js
const SSM = require("aws-sdk/clients/ssm");
module.exports.getParameters = async ({ resolveConfigurationProperty }) => {
const prefix = await resolveConfigurationProperty(["custom", "prefix"]);
const region = await resolveConfigurationProperty(["provider", "region"]);
const ssm = new SSM({ region });
const policy = await ssm
.getParameter({
Name: prefix + "/INFO",
WithDecryption: true,
})
.promise();
const res = JSON.parse(policy.Parameter.Value);
return {
firstName: res.firstName,
lastName: res.lastName
};
};
serverles.yml
파일에서 이 파일helperScript.js
을 참조하여 환경 문 아래 코드에 사용된 변수를 호출합니다. Lambda에 SSM 서비스에 액세스하는 데 필요한 권한을 부여합니다. 사용 중인 리소스에 대한 액세스 권한만 부여하는 것이 좋습니다.If we are using a serverless version minor to version 3, we have to add this statement
variablesResolutionMode: 20210326
under service declaration
#serverless.yml
service: myapp
plugins:
- serverless-plugin-typescript
provider:
name: aws
runtime: nodejs16.x
stage: dev
region: us-east-1
environment:
FIRST_NAME: ${file(./helperScript.js):getParameters.firstName}
LAST_NAME: ${file(./helperScript.js):getParameters.lastName}
iamRoleStatements:
- Effect: "Allow"
Action:
- ssm:GetParameter
- ssm:GetParameters
- ssm:GetParametersByPath
Resource: "*"
custom:
prefix: /${self:provider.stage}/${self:service}
functions:
hello:
handler: handler.hello
마지막으로 람다 코드에서 이 Parameter Store를 사용해 보겠습니다.
//handler.ts
import { Handler } from 'aws-lambda';
export const hello: Handler = (event: any) => {
const response = {
statusCode: 200,
body: JSON.stringify(
{
message: 'My First name is '+`${process.env.FIRST_NAME}`+' and my last name is '+`${process.env.LAST_NAME}`
},
null,
2
),
};
return new Promise((resolve) => {
resolve(response)
})
}
그게 다야! 람다를 실행하면 다음과 같이 보일 것입니다.
이렇게 하면 일부 매개 변수 저장소를 저장하고 깔끔하고 깨끗하게 유지하는 데 확실히 도움이 될 것입니다. 그러나 이러한 변수가 얻을 수 있는 크기를 고려해야 합니다. Advanced Parameters 의 사용을 고려할 수 있습니다.
참조: Serverless Framework Variables
Reference
이 문제에 관하여(서버리스 프레임워크로 AWS Parameter Store를 절약하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/davidshaek/how-to-save-up-on-aws-parameter-store-with-serverless-framework-44mm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)