個人用メモです。以下について記載しています。
AWSに普段触る機会がないので初心者です。ご了承ください。
- Credentialの設定
- AWS CLIの設定
- AWS SDKの設定(AWS触る際、自分で使いそうな言語についてのみ記載しています。)
- Go
- Node.js
- Ruby
- Python
- Java
- AWS S3に対して簡単な疎通確認アプリを書いてみる。(各言語で)
Credentialの設定
そもそものIAMユーザの作成方法
- IAM コンソールに移動します (最初に AWS へのサインインが必要になる場合があります)。
- サイドバーの [Users (ユーザー)] をクリックして IAM ユーザーを表示します。
- IAM ユーザーを設定していない場合は、[Create New Users (新規ユーザーの作成)] をクリックして作成します。
- AWS にアクセスするために使用するリストで、IAM ユーザーを選択します。
- [Security Credentials (セキュリティ認証情報)] タブを開き、[Create Access Key (アクセスキーの作成)] をクリックします。
- 表示されるダイアログボックスで、[Download Credentials (認証情報のダウンロード)] ボタンをクリックして認証情報ファイルをコンピュータにダウンロードするか、[Show User Security Credentials (ユーザーのセキュリティ認証情報を表示)] をクリックして IAM ユーザーのアクセスキー ID とシークレットアクセスキーを表示します
~/.aws/credentials
の設定
これがないと、ローカルで開発するときに、ソースやら環境変数やらにアクセスキー、シークレットキーの情報を埋め込まないといけなくなるので、こういうセキュアな情報はここで管理する。
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットキー
~/.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()
}