Lambdaで自動フォローとリツイート
概要
awsのEC2無料枠で、件名のスクリプトを定期実行していたが、無料期間が終わったので、永続無料のLambdaを使用することにした。 「パラメータストア(Parameter Store)」や「シークレットマネージャー(Secrets Manager)」との連携で手こずったので、メモとして記載。
※ 重要 ※
Twitterにおける自動フォローとリツイートについては自動化ルールの規約に反しない範囲での使用が必要。
パラメータストア(Parameter Store) との連携
【サービス > AWS Systems Manager > パラメータストア 】
- パラメータを作成(略)
【サービス > Identity and Access Management (IAM) > ロール】
- パラメータを使用する関数を選択する
- 事前に関数がある前提、なければ新規作成のハズ
- アクセス権限tabの[ポリシーをアタッチします]を選択
- [ポリシーの作成] を選択
- [JSON]tabを選択して下記を追加
"ssm:PutParameter" がパラメータに書き込むための権限
"ssm:GetParameters" がパラメータを読み込むための権限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:GetParameter" "ssm:GetParameters" ], "Resource": "*" } ] }
- 適切なポリシー名を設定して保存。
【Lambda > 関数 > パラメータを使用する関数】
- 読み取り(1つのみ。複数ある時は get_parameters を使用)
import boto3 ssm = boto3.client('ssm', 'ap-northeast-1') response = ssm.get_parameter(Name="パラメータ名",WithDecryption=False) print(response['Parameter']['Value'])
- 書き込み
import boto3 ssm = boto3.client('ssm', 'ap-northeast-1') response_put = ssm.put_parameter( Name = "パラメータ名", Value = str(lastid), #書き込む値。Typeに合わせること Type = 'String', #パラメータのYype Overwrite = True )
シークレットマネージャー(Secrets Manager)との連携
【AWS Secrets Manager】
- シークレットの作成
【サービス > Identity and Access Management (IAM) > ロール】
- シークレットを使用する関数を選択する
- 事前に関数がある前提、なければ新規作成のハズ
- アクセス権限tabの[ポリシーをアタッチします]を選択
- [ポリシーの作成] を選択
- [JSON]tabを選択して下記を追加
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
- 適切なポリシー名を設定して保存。
【Lambda > 関数 > シークレットを使用する関数】
- 読み取り
import boto3 import json client = boto3.client(service_name='secretsmanager') get_secret_value_response = client.get_secret_value(SecretId="シークレット名") #ディクショナリ型として読み込む secret = json.loads(get_secret_value_response['SecretString']) secret['呼び出したいシークレットキー']
自動化
【サービス > CloudWatch】
(略:直観的)
定数を渡して関数を実行するのに手間取ったので、下記に記事を追加。