Node.정기적으로 js·AWS Lambda·Amazon Event Bridge에서 특정 단어를 발표합니다!

21047 단어 AWSLambdaNodetech
AWS를 조금 배웠어요. AWS Lambda를 알았어요.
재미있어 보여서 공부에서 조금 벗어나서...
Node.js·AWS Lambda·Amazon Event Bridge를 사용하여 정기적으로 트위터를 실행하는 이른바 Bot의 개발에 도전합니다!!
어렵기 때문에, 나는 그것을 기록하고 싶다!
※ 계정을 새로 만들지 않고 현재 사용하고 있는 계정에 가입했기 때문에'봇바람'이라는 표현이 정확할 수 있습니다.
!
이 글은 다음과 같은 대응 완성을 전제로 한 것이다.
· AWS 계정을 만듭니다.
· 필요할 경우 Bot 계정용 트위터 계정을 만드십시오.
· 트위터 디벨로퍼 포탈에서 앱을 만든다.
· 제작된 앱의 앱 퍼미스션스는 리드 앤 write로 변경됐다.기본값은 읽기입니다.
· App Permissions 변경 후 API Key/API Secret, Access Token/Access Token Secret을 재생성하여 기록한다.
→나중에 사용하기 위해서다.
・이번에 사용한 트위터 API는 v1이므로 사전에 Elevated를 무료로 신청하십시오.
→ Submit 신청하면 바로 사용할 수 있다.

만든 물건


맨날 일본 시간 19시 되면'오늘도 수고했어요~😆」트위터를 개발했다.
위에서 말한 바와 같이 이번에 Bot이 사용한 계정은 아직 만들어지지 않았습니다. 제 계정은 Bot 자동 트위터와 수동 트위터가 섞인 상태입니다.

AWS Lambda


나는 즉시 AWS Lambda를 사용하고 싶다!

AWS Lambda란 무엇입니까?


서버의 구축과 관리가 필요 없고 원본 코드를 만들어 업로드하면 프로그램을 실행할 수 있는 서비스다.
C#、Java、Node.js, Python 등의 언어와 실행 환경을 사용할 수 있습니다.

AWS Lambda로 함수 만들기


AWS Lambda의 함수 페이지에서 함수 작성 버튼을 클릭하여 다음 페이지로 이동합니다.
임의의 함수 이름을 입력하고 실행 시간Node.js을 선택합니다.
다른 부분은 기본적으로 문제가 없을 것 같으니 오른쪽 아래에 있는 '함수 만들기' 를 누르십시오.

이렇게 하면 AWS Lambda에서 함수를 만들 수 있습니다!

트위터 API로 트위터 할 수 있어요.


그럼 중요한 트위터를 실행하는 코드를 적어 놓을게요.
우선, 노드.js에서 트위터 API를 사용하는 npm 패키지를 가져왔습니다.
npm install --save twitter
이후 AWS Lambda에 설정된 환경 변수를 사용하여 인증합니다.
const Twitter = require('twitter');

const client = new Twitter({
    consumer_key: process.env.CONSUMER_KEY,
    consumer_secret: process.env.CONSUMER_SECRET,
    access_token_key: process.env.ACCESS_TOKEN_KEY,
    access_token_secret: process.env.ACCESS_TOKEN_SECRET,
});
매개변수로 전달되는 객체 속성은 다음과 같습니다.
키 이름

consumer_key
API Key
consumer_secret
API Secret
access_token_key
Access Token
access_token_secret
Access Token Secret
트위터를 실행하는 함수를 만듭니다.post 사용 방법은 첫 번째 파라미터에endpoint를 지정하고 두 번째 파라미터에 트위터의 내용을 대상 형식으로 전달한다.
같은 내용의 트위터를 여러 번 올릴 수 없기 때문에 사용new Date()으로 생성된 날짜도 함께 올린다.
exports.handler = () => {
    const date = new Date().toLocaleString('ja-JP');
    const text = '今日もお疲れ様でした〜😆'
    const tweetText = { status: `${text}\r\n${date}` }

    client.post('statuses/update', tweetText, (error, tweet, response) => {
        if (error) throw error;
    });
}
처리된 js 파일과 node 설명modules 정리해.zip을 파일화합니다.
zip -r 任意の.zipファイル名.zip ./初期を記述したファイル名.js ./node_modules/

AWS Lambda로 설계


그럼 AWS Lambda에서 만든 코드에 대한 디버깅을 시작합니다!
.zip 파일은 AWS Lambda에 직접 업로드하거나 S3에 배치하여 로컬에서 만든 소스 코드를 디버깅할 수 있습니다.
컨테이너 이미지도 사용할 수 있지만 사랑을 끊어야 한다.

.zip 파일 업로드


zip 파일을 업로드합니다.
AWS Lambda의 함수 중 일부는 코드 소스입니다.
그 부분의 오른쪽 상단에서'업로드 소스'버튼을 찾아 클릭하면'.zip 파일'과'아마존 S3의 위치'두 가지 선택이 나온다.두 파일 중.zip 파일을 선택하십시오.

그리하여zip 파일을 업로드할 시뮬레이터가 나왔으니 업로드 버튼을 눌러주세요.zip 파일을 선택하고 저장하십시오.

그렇다면, AWS Lambda.zip 파일을 올렸습니다!

AWS Lambda를 통한 환경 변수 설정


설정 페이지로 이동하여 환경 변수를 설정할 수 있으므로 이전에 기록된 API Key/API Secret, Access Token/Access Token Secret을 환경 변수로 등록합니다.

또 트위터에 뜨는 시간에 맞춰 환경 변수로 시간대를 지정해야 한다!
키워드TZ를 값Asia/Tokyo으로 설정하고 환경 변수를 추가합니다.

Amazon EventBridge


주기적으로 밀어내고 싶으므로 이벤트 브릿지를 사용하여 함수를 주기적으로 설정합니다.

Amazon Event Bridge란 무엇입니까?


창설 규칙과 일치하는 이벤트를 받으면 지정한 대상이 호출되어 처리되는 서비스입니다.
Amazon CloudWatch가 제공하는 Amazon CloudWatch Events 기능을 확장한 서비스는 이번에 사용한 Amazon Event Bridge입니다.

정기적으로 실행할 Amazon Event Bridge 설정


AWS Lambda 함수의 개요 부분에 "트리거 추가"버튼이 있어야 할 것 같으니 클릭하세요.

EventBridge를 트리거로 선택하십시오.

규칙 새 규칙 작성을 선택합니다.규칙 이름을 입력하십시오.
이번에는 특정 시간이 되면 트위터를 하고 싶기 때문에 규칙 유형은'일식'을 선택한다.

일식 쓰기 방법은cron식을 사용합니다.

크론이 뭐예요?

croncron식이 지정한 시간 안에 프로그램을 실행하는 도구를 가리킨다.
예를 들어 일괄 처리는 정기적으로 프로그램을 실행할 때 사용된다.
cron 공식에서 분, 시간, 날짜 등 6개 요소는 빈 구분자로 지정된다.
cron(分 時間 日付 月 曜日 年)
이번 상황은 다음과 같은cron식이다.
날짜와 화요일에는 모두 별표가 있다✳준비) 지정할 수 없기 때문에 날짜에 의문 번호가 있습니다.구문을 사용합니다.
또한 시간은 GMT(그리니치 표준시)를 사용하기 때문에 日本時間 - 9時間의 값을 입력한다.
일본 시간으로 19시에 트위터를 시키려고 해서19 - 910를 시간대에 뒀다.
cron(0 10 ? * * *)
여러 와일드카드를 조합하여 지정합니다.
다음은 와일드카드 문자의 예입니다.
와일드카드
설명
(쉼표)
값을 추가합니다.
- (대시)
범위를 지정합니다.
*(별표)
모든 값.
/(슬래시)
간격을 지정합니다.10분마다
?(물음표)
임의의 값.특정한 날짜나 일요일의 상황 등이 없다.
크론식AWS의 공식 문서에 대한 상세한 설명도 있으니 참고하세요.

사은품~ 현지에서 테스트하고 싶어요~~


AWS 람바다도 테스트가 가능하지만 여러 번 올리고 싶지 않아 가능하면 로컬에서 테스트하고 싶다.
이때 API Key/API Secret, Access Token/Access Token Secret을 .env 파일에 기술하여 환경 변수로 삼는다.
그리고, 노드.js에서 .env 파일을 읽기 위해서는 패키지dotenv가 필요합니다.이 매크로 패키지를 사용하려면 처음에 다음 설명을 추가합니다.
require("dotenv").config();
인증 부분은 같은 코드를 사용하는데 문제가 없지만 트위터 실행 부분의 코드는 다르다.
AWS Lambda에서 사용하기 위해서exports지만 로컬에서는 필요하지 않습니다.const 함수를 정의하고 실행합니다.
const handler = () => {
    const date = new Date().toLocaleString('ja-JP');
    const text = '今日もお疲れ様でした〜😆'
    const tweetText = { status: `${text}\r\n${date}` }

    client.post('statuses/update', tweetText, (error, tweet, response) => {
        if (error) throw error;
        console.log(tweet);
        console.log(response);
    });
}

handler();
로컬에서 실행할 때의 코드는 전체적으로 다음과 같다.
const Twitter = require('twitter');
require("dotenv").config(); // ローカル実行時に必要。

// 認証
const client = new Twitter({
    consumer_key: process.env.CONSUMER_KEY,
    consumer_secret: process.env.CONSUMER_SECRET,
    access_token_key: process.env.ACCESS_TOKEN_KEY,
    access_token_secret: process.env.ACCESS_TOKEN_SECRET,
});

// ツイートするための関数
const handler = () => {
    const date = new Date().toLocaleString('ja-JP');
    const text = '今日もお疲れ様でした〜😆'
    const tweetText = { status: `${text}\r\n${date}` }

    client.post('statuses/update', tweetText, (error, tweet, response) => {
        if (error) throw error;
        console.log(tweet);
        console.log(response);
    });
}

// 定義した関数を実行!
handler();

감상


이번에는 AWS Lambda와 Amazon Event Bridge를 활용해 특정 언어를 정기적으로 발표하는 Bot 개발에 도전합니다!
평소에는 리액트를 사용해 개발을 많이 하지만 노드.js를 사용하는 경우 .env 파일을 읽기 위해 따로 가져오는 포장이 필요한지 몰라서 배웠습니다.
조금 신경 쓰이는 것은 최소 단위가'분'인 크론이 지정한 것이기 때문에 지정된 시간의 0초 정각이 아니라 수십 초 지연된 것이다.그리고 항상 같은 초가 늦어지는 것도 아니다.초 단위를 무시하면 제시간에 집행된다.
AWS는 아직 공부하고 있지만 이렇게 서비스를 이용하면서 공부하면 정말 즐겁네요!
만약 인식상의 오류, 보충 등이 있다면 반드시 댓글을 남겨주세요~!
읽어주셔서 감사합니다!!

참고 자료


AWS Lambda 소개
Lambda 디버그 패키지
Amazon Event Bridge
cron LPI-Japan

좋은 웹페이지 즐겨찾기