AWS
EC2
aws-cli

EC2上でアタッチされたroleを使用してaws-cliを行う

やりたいこと

  • EC2上で動くjenkinsでaws-cliを使う
  • EC2にアタッチされているroleを使う
  • Access KeyやSecret Keyは持たない
  • AWSのAPIを使って行う

実現方法

シェルファイルでAPIを叩き、
レスポンスを環境変数に入れて一時tokenを使えるようにする

credential.sh
# bin/bash

url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE_NAME
curl $url > credential.json
export AWS_ACCESS_KEY_ID=`cat credential.json | jq .AccessKeyId | tr -d \"`
export AWS_SECRET_ACCESS_KEY=`cat credential.json | jq .SecretAccessKey | tr -d \"`
export AWS_SESSION_TOKEN=`cat credential.json | jq .Token | tr -d \"`

ちなみにJenkinsfile

作ったlambda関数を自動的にS3に上げてくれるジョブです
lambdaを更新するコマンドでやらないとS3に上げるだけになっちゃうので要改良

Jenkinsfile
#!groovy
pipeline {
    agent any
    triggers {
        pollSCM('H/3 * * * 1-5')
    }
    //environment {}
    stages {
        stage('Develop') {
            when {
                branch 'PR-*'
            }
            steps {
                ansiColor('xterm') {
                    echo '<<< start develop >>>'
                    sh '''
                        source `pwd`/credential.sh
                        Lambdadir="`pwd`/Lambdafiles/*"
                        for filepath in $Lambdadir; do
                            dirname=`basename $filepath`
                            zip `pwd`/$dirname.zip $filepath/*
                            aws s3 cp `pwd`/$dirname.zip s3://BUCKET_NAME/
                            aws lambda update-function-code --function-name dev_$dirname --zip-file fileb://$dirname.zip
                        done
                    '''
                }
            }
        }
    }
}
folder構成
.
├── Jenkinsfile
├── Lambdafiles
│   └── MODULE1_NAME_FOLDER #中にlamda用の関数を入れておく
│   └── MODULE2_NAME_FOLDER #中にlamda用の関数を入れておく
├── README.md
└── credential.sh