AMIの更新通知をトリガーにlambdaからBatchをキックする(Serverless Frameworkも使うぜよ)
AWSはAMIが更新された場合の連絡チャネルを準備してくれているようです。
更新連絡をトリガーとして、lambdaからBatchをキックして、先回のAMIのコンピューティング環境自動更新を動かす試みです。
設定にあたり、Serverless Frameworkなるものを初めて使用したのですが素敵でした。
以下が、使用したserverless.ymlです。
serverless.yml
service: latest-ami-replace
provider:
name: aws
stage: ${opt:stage, self:custom.defaultStage}
region: ${opt:region, self:custom.defaultRegion}
runtime: python2.7
iamRoleStatements:
- Effect: Allow
Action:
- batch:SubmitJob
- logs:CreateLogStream
- logs:CreateLogGroup
- logs:PutLogEvents
Resource: "*"
custom:
defaultStage: dev
defaultRegion: ap-northeast-1
environment:
dev:
JOB_DEFINITION: 'ami-replace:1'
JOB_NAME: 'ami-replace'
JOB_QUEUE: 'arn:aws:batch:ap-northeast-1:999999999999:job-queue/ami-replace'
functions:
handler:
handler: ami-replace.lambda_handler
environment: ${self:custom.environment.${self:provider.stage}}
timeout: 60
resources:
Resources:
SNSSubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: arn:aws:lambda:ap-northeast-1:999999999999:function:asd_latest_ami_replace
Protocol: lambda
TopicArn: arn:aws:sns:ap-northeast-1:177427601217:ecs-optimized-amazon-ami-update
lambda関数は以下です。Batchをcallしているだけの内容です。
上記ではami-replaceとしていますが、環境変数として任意に設定してください。
ami-replace.py
import boto3,os
def lambda_handler(event, context):
client = boto3.client('batch')
JOB_NAME = os.getenv("JOB_NAME")
JOB_QUEUE = os.getenv("JOB_QUEUE")
JOB_DEFINITION = os.getenv("JOB_DEFINITION")
response = client.submit_job(
jobName = JOB_NAME,
jobQueue = JOB_QUEUE,
jobDefinition = JOB_DEFINITION
)
print(response)
return 0
上記のServerless Frameworkで登録した環境を削除すると、CloudFormationが以下のエラーを放ちます。
自分のリソースではないものは削除できない模様ですが、AWSが自ら公開しているリソースなのでなんとかして頂きたいところです。
Stack:arn:aws:cloudformation:ap-northeast-1:999999999999:stack/latest-ami-replace-dev/acc286e0-8406-11e8-9519-50a6866998ae is in DELETE_FAILED state and can not be updated.
今回のトピックのキモは、Serverless(CloudFormation)による操作では 外部topic登録できれど削除はできずというところくらいですね。ありがとうございました。
Author And Source
この問題について(AMIの更新通知をトリガーにlambdaからBatchをキックする(Serverless Frameworkも使うぜよ)), 我々は、より多くの情報をここで見つけました https://qiita.com/sista05/items/126bb2671226892a8e05著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .