LoginSignup
1
1

More than 3 years have passed since last update.

AWSのSDK周りのセットアップを何個かの言語で試してみた。

Last updated at Posted at 2019-01-28

個人用メモです。以下について記載しています。
AWSに普段触る機会がないので初心者です。ご了承ください。

  • Credentialの設定
  • AWS CLIの設定
  • AWS SDKの設定(AWS触る際、自分で使いそうな言語についてのみ記載しています。)
    • Go
    • Node.js
    • Ruby
    • Python
    • Java
  • AWS S3に対して簡単な疎通確認アプリを書いてみる。(各言語で)

Credentialの設定

そもそものIAMユーザの作成方法

  1. IAM コンソールに移動します (最初に AWS へのサインインが必要になる場合があります)。
  2. サイドバーの [Users (ユーザー)] をクリックして IAM ユーザーを表示します。
  3. IAM ユーザーを設定していない場合は、[Create New Users (新規ユーザーの作成)] をクリックして作成します。
  4. AWS にアクセスするために使用するリストで、IAM ユーザーを選択します。
  5. [Security Credentials (セキュリティ認証情報)] タブを開き、[Create Access Key (アクセスキーの作成)] をクリックします。
  6. 表示されるダイアログボックスで、[Download Credentials (認証情報のダウンロード)] ボタンをクリックして認証情報ファイルをコンピュータにダウンロードするか、[Show User Security Credentials (ユーザーのセキュリティ認証情報を表示)] をクリックして IAM ユーザーのアクセスキー ID とシークレットアクセスキーを表示します

~/.aws/credentialsの設定

これがないと、ローカルで開発するときに、ソースやら環境変数やらにアクセスキー、シークレットキーの情報を埋め込まないといけなくなるので、こういうセキュアな情報はここで管理する。

~/.aws/credentials
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットキー

~/.aws/configの設定

~/.aws/config
[default]
region = ap-northeast-1

AWS CLI のインストール

pipのインストール

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py

awscliのインストール

pip install awscli

helpの確認

aws help

AWS SDKの設定

AWS SDK for Goの設定

go get -u github.com/aws/aws-sdk-go

AWS SDK for Node.jsの設定

npm install aws-sdk

AWS SDK for Rubyの設定

Bundlerを使用している場合

Gemfileに以下追記してbundle install

gem 'aws-sdk'

Bundlerを使用していない場合

以下のコマンドを実行する。

gem install aws-sdk

AWS SDK for Pythonの設定

pip install boto3

AWS SDK for Javaの設定

Javaがいちばんめんどくさい。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v2/developer-guide/getting-started.html

Apache MavenでSDKを利用する場合

以下参考に、pom.xmlに以下設定する。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/setup-project-maven.html

GradleでSDKを利用する場合

以下参考に、build.gradleを作成する。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/setup-project-gradle.html

AWS S3に対して簡単な疎通確認アプリを書いてみる。(各言語で)

上でセットアップしたSDKがとりあえず動作するかを確かめるためにS3に疎通するアプリを簡単に書いてみました。

AWS SDK for Go

まずはGo言語で書いてみました。

package main

import (
    "fmt"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/awserr"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "log"
)

/**
    S3Clientを生成する
 */
func CreateS3Client() *s3.S3 {
    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("ap-northeast-1")}, )

    if err != nil {
        log.Fatal("Error creating session", err)
    }
    return s3.New(sess)

}

/**
    バケット一覧を表示する
 */
func ListBuckets() {
    svc := CreateS3Client()
    input := &s3.ListBucketsInput{}

    result, err := svc.ListBuckets(input)
    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            default:
                log.Fatalln(aerr.Error())
            }
        } else {
            // print the error, cast err to awserr.Error to get the Code and Message from an error.
            log.Fatalln(err.Error())
        }
        return
    }
    fmt.Println(result)
}

/**
    バケットを作成する
 */
func CreateBucket(bucketName string) {
    svc := CreateS3Client()
    input := &s3.CreateBucketInput{
        Bucket: aws.String(bucketName),
    }

    result, err := svc.CreateBucket(input)

    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            case s3.ErrCodeBucketAlreadyExists:
                log.Fatalln(s3.ErrCodeBucketAlreadyExists, aerr.Error())
            case s3.ErrCodeBucketAlreadyOwnedByYou:
                log.Fatalln(s3.ErrCodeBucketAlreadyOwnedByYou, aerr.Error())
            default:
                log.Fatalln(aerr.Error())
            }
        } else {
            log.Fatal(err.Error())
        }
        return
    }

    fmt.Println(result)

}

func main() {
    CreateBucket("examplebucket42142gaga")
    ListBuckets()
}

SDK for Node.js

この辺からすごいテキトー。

const AWS = require('aws-sdk');

class MyS3Client
{
  constructor(bucketName)
  {
    this.s3 = new AWS.S3();
    this.bucketName = bucketName;
  }

  createNewBucket(bucketName)
  {
    this.s3.createBucket({ Bucket: this.bucketName }, (err, _) =>
    {
      if (err) console.error('Create Buckect failed..', err);
      console.log(`Created Bucket: ${this.bucketName}`);
    })
  }

  putTestObject()
  {
    const keyName = "hello-world.txt";
    const params = { Bucket: this.bucketName, Key: keyName, Body: 'Hello World!' };
    this.s3.putObject(params, (err, _) =>
    {
      if (err) console.error('Put object failed..', err);
      console.log(`Put Object complete: ${keyName}`);
    });
  }
}

const myS3Client = new MyS3Client('chocomint-klklkk');
myS3Client.createNewBucket();
myS3Client.putTestObject();

SDK for Ruby

require 'aws-sdk'

# S3のResourceを生成する。
def s3_resouce_factory
  region = 'ap-northeast-1'
  Aws::S3::Resource.new(region: region)
end

# バケット一覧を表示する。
def show_list_buckets
  s3 = s3_resouce_factory
  s3.buckets.each do |bucket|
    puts "#{bucket.name}"
  end
end

# 新しいバケットを作成する。
def create_new_bucket(bucket_name)
  s3 = s3_resouce_factory
  s3.create_bucket(bucket: bucket_name)
end

create_new_bucket('random-example-bucket-by-48hands')
show_list_buckets

SDK for Python

すごいテキトー。

import boto3


class SampleS3App(object):
    def __init__(self):
        self.s3 = boto3.resource('s3')


    def show_list_bucket(self):
        """バケット一覧を表示する"""
        for bucket in self.s3.buckets.all():
            print(bucket.name)


    def create_new_bucket(self, bucket_name):
        """
        バケットを新規に作成する
        :param bucket_name: 新しく作成するバケット名
        :return:
        """
        response = self.s3.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={
                'LocationConstraint': 'ap-northeast-1'
            },
        )
        return response


if __name__ == '__main__':
    sample = SampleS3App()

    sample.create_new_bucket("48hands-hogehogehoea")
    sample.show_list_bucket()

SDK for Java

Kotlinで書いてみました。
すごいテキトー。

import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.ListBucketsRequest


class SampleS3App {
    private val s3Client = AmazonS3ClientBuilder.defaultClient()

    /**
     * 新しいバケットを作成する
     */
    fun createNewBucket(bucketName: String) {
        s3Client.createBucket(bucketName)
    }

    /**
     * バケット一覧を表示する
     */
    fun showListOfBucket() {
        val listBucketsRequest = ListBucketsRequest()
        s3Client.listBuckets(listBucketsRequest)
            .forEach { println(it.name) }
    }
}

fun main(args: Array<String>) {
    val sampleS3App = SampleS3App()
    sampleS3App.createNewBucket("48hands-i-love-newyork")
    sampleS3App.showListOfBucket()
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1